use embedded interface types
R=r
DELTA=205 (1 added, 157 deleted, 47 changed)
OCL=25071
CL=25073
diff --git a/src/lib/io/io.go b/src/lib/io/io.go
index 5f5966d..c4464f5 100644
--- a/src/lib/io/io.go
+++ b/src/lib/io/io.go
@@ -24,24 +24,24 @@
}
type ReadWrite interface {
- Read(p []byte) (n int, err *os.Error);
- Write(p []byte) (n int, err *os.Error);
+ Read;
+ Write;
}
type ReadClose interface {
- Read(p []byte) (n int, err *os.Error);
- Close() *os.Error;
+ Read;
+ Close;
}
type WriteClose interface {
- Write(p []byte) (n int, err *os.Error);
- Close() *os.Error;
+ Write;
+ Close;
}
type ReadWriteClose interface {
- Read(p []byte) (n int, err *os.Error);
- Write(p []byte) (n int, err *os.Error);
- Close() *os.Error;
+ Read;
+ Write;
+ Close;
}
// Convert a string to an array of bytes for easy marshaling.
diff --git a/src/lib/reflect/type.go b/src/lib/reflect/type.go
index 6d14e66..f0585f0 100644
--- a/src/lib/reflect/type.go
+++ b/src/lib/reflect/type.go
@@ -108,23 +108,24 @@
var (
Missing = newBasicType(missingString, MissingKind, 1);
DotDotDot = newBasicType(dotDotDotString, DotDotDotKind, 16); // TODO(r): size of interface?
- Bool = newBasicType("bool", BoolKind, 1); // TODO: need to know how big a bool is
- Int = newBasicType("int", IntKind, 4); // TODO: need to know how big an int is
+ Bool = newBasicType("bool", BoolKind, unsafe.Sizeof(true));
+ Int = newBasicType("int", IntKind, unsafe.Sizeof(int(0)));
Int8 = newBasicType("int8", Int8Kind, 1);
Int16 = newBasicType("int16", Int16Kind, 2);
Int32 = newBasicType("int32", Int32Kind, 4);
Int64 = newBasicType("int64", Int64Kind, 8);
- Uint = newBasicType("uint", UintKind, 4); // TODO: need to know how big a uint is
+ Uint = newBasicType("uint", UintKind, unsafe.Sizeof(uint(0)));
Uint8 = newBasicType("uint8", Uint8Kind, 1);
Uint16 = newBasicType("uint16", Uint16Kind, 2);
Uint32 = newBasicType("uint32", Uint32Kind, 4);
Uint64 = newBasicType("uint64", Uint64Kind, 8);
- Uintptr = newBasicType("uintptr", UintptrKind, 8); // TODO: need to know how big a uintptr is
- Float = newBasicType("float", FloatKind, 4); // TODO: need to know how big a float is
+ Uintptr = newBasicType("uintptr", UintptrKind, unsafe.Sizeof(uintptr(0)));
+ Float = newBasicType("float", FloatKind, unsafe.Sizeof(float(0)));
Float32 = newBasicType("float32", Float32Kind, 4);
Float64 = newBasicType("float64", Float64Kind, 8);
Float80 = newBasicType("float80", Float80Kind, 10); // TODO: strange size?
- String = newBasicType("string", StringKind, 8); // implemented as a pointer
+ // TODO(rsc): Sizeof("") should work, doesn't.
+ String = newBasicType("string", StringKind, unsafe.Sizeof(string(0)));
)
// Stub types allow us to defer evaluating type names until needed.
@@ -149,12 +150,7 @@
// -- Pointer
type PtrType interface {
- // TODO: Type;
- Kind() int;
- Name() string;
- String() string;
- Size() int;
-
+ Type;
Sub() Type
}
@@ -174,12 +170,7 @@
// -- Array
type ArrayType interface {
- // TODO: Type;
- Kind() int;
- Name() string;
- String() string;
- Size() int;
-
+ Type;
IsSlice() bool;
Len() int;
Elem() Type;
@@ -219,12 +210,7 @@
// -- Map
type MapType interface {
- // TODO: Type;
- Kind() int;
- Name() string;
- String() string;
- Size() int;
-
+ Type;
Key() Type;
Elem() Type;
}
@@ -250,12 +236,7 @@
// -- Chan
type ChanType interface {
- // TODO: Type;
- Kind() int;
- Name() string;
- String() string;
- Size() int;
-
+ Type;
Dir() int;
Elem() Type;
}
@@ -287,12 +268,7 @@
// -- Struct
type StructType interface {
- // TODO: Type;
- Kind() int;
- Name() string;
- String() string;
- Size() int;
-
+ Type;
Field(int) (name string, typ Type, tag string, offset int);
Len() int;
}
@@ -353,12 +329,7 @@
// -- Interface
type InterfaceType interface {
- // TODO: Type;
- Kind() int;
- Name() string;
- String() string;
- Size() int;
-
+ Type;
Field(int) (name string, typ Type, tag string, offset int);
Len() int;
}
@@ -385,12 +356,7 @@
// -- Func
type FuncType interface {
- // TODO: Type;
- Kind() int;
- Name() string;
- String() string;
- Size() int;
-
+ Type;
In() StructType;
Out() StructType;
}
diff --git a/src/lib/reflect/value.go b/src/lib/reflect/value.go
index 8d15a8e..ba430c2 100644
--- a/src/lib/reflect/value.go
+++ b/src/lib/reflect/value.go
@@ -66,11 +66,7 @@
// -- Missing
type MissingValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
+ Value;
}
type missingValueStruct struct {
@@ -84,12 +80,7 @@
// -- Int
type IntValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() int;
Set(int);
}
@@ -113,12 +104,7 @@
// -- Int8
type Int8Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() int8;
Set(int8);
}
@@ -142,12 +128,7 @@
// -- Int16
type Int16Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() int16;
Set(int16);
}
@@ -171,12 +152,7 @@
// -- Int32
type Int32Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() int32;
Set(int32);
}
@@ -200,12 +176,7 @@
// -- Int64
type Int64Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() int64;
Set(int64);
}
@@ -229,12 +200,7 @@
// -- Uint
type UintValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() uint;
Set(uint);
}
@@ -258,12 +224,7 @@
// -- Uint8
type Uint8Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() uint8;
Set(uint8);
}
@@ -287,12 +248,7 @@
// -- Uint16
type Uint16Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() uint16;
Set(uint16);
}
@@ -316,12 +272,7 @@
// -- Uint32
type Uint32Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() uint32;
Set(uint32);
}
@@ -345,12 +296,7 @@
// -- Uint64
type Uint64Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() uint64;
Set(uint64);
}
@@ -374,12 +320,7 @@
// -- Uintptr
type UintptrValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() uintptr;
Set(uintptr);
}
@@ -403,12 +344,7 @@
// -- Float
type FloatValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() float;
Set(float);
}
@@ -432,12 +368,7 @@
// -- Float32
type Float32Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() float32;
Set(float32);
}
@@ -461,12 +392,7 @@
// -- Float64
type Float64Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() float64;
Set(float64);
}
@@ -490,12 +416,7 @@
// -- Float80
type Float80Value interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() float80;
Set(float80);
}
@@ -522,12 +443,7 @@
// -- String
type StringValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() string;
Set(string);
}
@@ -551,12 +467,7 @@
// -- Bool
type BoolValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() bool;
Set(bool);
}
@@ -580,12 +491,7 @@
// -- Pointer
type PtrValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Sub() Value;
Get() Addr;
SetSub(Value);
@@ -621,12 +527,7 @@
// Slices and arrays are represented by the same interface.
type ArrayValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
IsSlice() bool;
Len() int;
Cap() int;
@@ -759,12 +660,7 @@
// -- Map TODO: finish and test
type MapValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Len() int;
Elem(key Value) Value;
}
@@ -789,11 +685,7 @@
// -- Chan
type ChanValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
+ Value;
}
type chanValueStruct struct {
@@ -807,12 +699,7 @@
// -- Struct
type StructValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Len() int;
Field(i int) Value;
}
@@ -846,12 +733,7 @@
// -- Interface
type InterfaceValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
-
+ Value;
Get() interface {};
}
@@ -870,11 +752,7 @@
// -- Func
type FuncValue interface {
- // TODO: Value;
- Kind() int;
- Type() Type;
- Addr() Addr;
- Interface() interface {};
+ Value;
}
type funcValueStruct struct {