update reflection library to int/int32 etc. split
fmt still to come
R=rsc
DELTA=168 (141 added, 19 deleted, 8 changed)
OCL=18064
CL=18071
diff --git a/src/lib/reflect/value.go b/src/lib/reflect/value.go
index 890fd9b..c39b1cb3 100644
--- a/src/lib/reflect/value.go
+++ b/src/lib/reflect/value.go
@@ -41,21 +41,49 @@
// Conversion functions, implemented in assembler
func AddrToPtrAddr(Addr) *Addr
+func AddrToPtrInt(Addr) *int
func AddrToPtrInt8(Addr) *int8
func AddrToPtrInt16(Addr) *int16
func AddrToPtrInt32(Addr) *int32
func AddrToPtrInt64(Addr) *int64
+func AddrToPtrUint(Addr) *uint
func AddrToPtrUint8(Addr) *uint8
func PtrUint8ToAddr(*uint8) Addr
func AddrToPtrUint16(Addr) *uint16
func AddrToPtrUint32(Addr) *uint32
func AddrToPtrUint64(Addr) *uint64
func PtrUint64ToAddr(*uint64) Addr
+func AddrToPtrFloat(Addr) *float
func AddrToPtrFloat32(Addr) *float32
func AddrToPtrFloat64(Addr) *float64
func AddrToPtrFloat80(Addr) *float80
func AddrToPtrString(Addr) *string
+// -- Int
+
+export type IntValue interface {
+ Kind() int;
+ Get() int;
+ Put(int);
+ Type() Type;
+}
+
+type IntValueStruct struct {
+ CommonV
+}
+
+func IntCreator(typ Type, addr Addr) Value {
+ return &IntValueStruct{ CommonV{IntKind, typ, addr} }
+}
+
+func (v *IntValueStruct) Get() int {
+ return *AddrToPtrInt(v.addr)
+}
+
+func (v *IntValueStruct) Put(i int) {
+ *AddrToPtrInt(v.addr) = i
+}
+
// -- Int8
export type Int8Value interface {
@@ -156,6 +184,31 @@
*AddrToPtrInt64(v.addr) = i
}
+// -- Uint
+
+export type UintValue interface {
+ Kind() int;
+ Get() uint;
+ Put(uint);
+ Type() Type;
+}
+
+type UintValueStruct struct {
+ CommonV
+}
+
+func UintCreator(typ Type, addr Addr) Value {
+ return &UintValueStruct{ CommonV{UintKind, typ, addr} }
+}
+
+func (v *UintValueStruct) Get() uint {
+ return *AddrToPtrUint(v.addr)
+}
+
+func (v *UintValueStruct) Put(i uint) {
+ *AddrToPtrUint(v.addr) = i
+}
+
// -- Uint8
export type Uint8Value interface {
@@ -256,6 +309,31 @@
*AddrToPtrUint64(v.addr) = i
}
+// -- Float
+
+export type FloatValue interface {
+ Kind() int;
+ Get() float;
+ Put(float);
+ Type() Type;
+}
+
+type FloatValueStruct struct {
+ CommonV
+}
+
+func FloatCreator(typ Type, addr Addr) Value {
+ return &FloatValueStruct{ CommonV{FloatKind, typ, addr} }
+}
+
+func (v *FloatValueStruct) Get() float {
+ return *AddrToPtrFloat(v.addr)
+}
+
+func (v *FloatValueStruct) Put(f float) {
+ *AddrToPtrFloat(v.addr) = f
+}
+
// -- Float32
export type Float32Value interface {
@@ -572,14 +650,17 @@
func init() {
creator = new(map[int] Creator);
+ creator[IntKind] = &IntCreator;
creator[Int8Kind] = &Int8Creator;
creator[Int16Kind] = &Int16Creator;
creator[Int32Kind] = &Int32Creator;
creator[Int64Kind] = &Int64Creator;
+ creator[UintKind] = &UintCreator;
creator[Uint8Kind] = &Uint8Creator;
creator[Uint16Kind] = &Uint16Creator;
creator[Uint32Kind] = &Uint32Creator;
creator[Uint64Kind] = &Uint64Creator;
+ creator[FloatKind] = &FloatCreator;
creator[Float32Kind] = &Float32Creator;
creator[Float64Kind] = &Float64Creator;
creator[Float80Kind] = &Float80Creator;