size uint64;
}
+func NewBasicType(name string, kind int, size uint64) Type {
+ return &BasicType{kind, name, size}
+}
+
func (t *BasicType) Name() string {
return t.name
}
return t.size
}
-func NewBasicType(n string, k int, size uint64) Type {
- t := new(BasicType);
- t.name = n;
- t.kind = k;
- t.size = size;
- return t;
-}
-
// Prebuilt basic types
export var (
Missing = NewBasicType(MissingString, MissingKind, 1);
typ Type;
}
+func NewStubType(name string, typ Type) *StubType {
+ return &StubType{name, typ}
+}
+
func (t *StubType) Get() Type {
if t.typ == nil {
t.typ = ExpandType(t.name)
return t.typ
}
-func NewStubType(name string, t Type) *StubType {
- s := new(StubType);
- s.name = name;
- s.typ = t;
- return s;
-}
-
// -- Pointer
export type PtrType interface {
sub *StubType;
}
+func NewPtrTypeStruct(name string, sub *StubType) *PtrTypeStruct {
+ return &PtrTypeStruct{name, sub}
+}
+
func (t *PtrTypeStruct) Kind() int {
return PtrKind
}
return t.sub.Get()
}
-func NewPtrTypeStruct(name string, sub *StubType) *PtrTypeStruct {
- t := new(PtrTypeStruct);
- t.name = name;
- t.sub = sub;
- return t;
-}
-
// -- Array
export type ArrayType interface {
len uint64;
}
+func NewArrayTypeStruct(name string, open bool, len uint64, elem *StubType) *ArrayTypeStruct {
+ return &ArrayTypeStruct{name, elem, open, len}
+}
+
func (t *ArrayTypeStruct) Kind() int {
return ArrayKind
}
return t.elem.Get()
}
-func NewArrayTypeStruct(name string, open bool, len uint64, elem *StubType) *ArrayTypeStruct {
- t := new(ArrayTypeStruct);
- t.name = name;
- t.open = open;
- t.len = len;
- t.elem = elem;
- return t;
-}
-
// -- Map
export type MapType interface {
elem *StubType;
}
+func NewMapTypeStruct(name string, key, elem *StubType) *MapTypeStruct {
+ return &MapTypeStruct{name, key, elem}
+}
+
func (t *MapTypeStruct) Kind() int {
return MapKind
}
return t.elem.Get()
}
-func NewMapTypeStruct(name string, key, elem *StubType) *MapTypeStruct {
- t := new(MapTypeStruct);
- t.name = name;
- t.key = key;
- t.elem = elem;
- return t;
-}
-
// -- Chan
export type ChanType interface {
dir int;
}
+func NewChanTypeStruct(name string, dir int, elem *StubType) *ChanTypeStruct {
+ return &NewChanTypeStruct{name, elem, dir}
+}
+
func (t *ChanTypeStruct) Kind() int {
return ChanKind
}
return t.elem.Get()
}
-func NewChanTypeStruct(name string, dir int, elem *StubType) *ChanTypeStruct {
- t := new(ChanTypeStruct);
- t.name = name;
- t.dir = dir;
- t.elem = elem;
- return t;
-}
-
// -- Struct
export type StructType interface {
field *[]Field;
}
+func NewStructTypeStruct(name string, field *[]Field) *StructTypeStruct {
+ return &StructTypeStruct{name, field}
+}
+
func (t *StructTypeStruct) Kind() int {
return StructKind
}
return len(t.field)
}
-func NewStructTypeStruct(name string, field *[]Field) *StructTypeStruct {
- t := new(StructTypeStruct);
- t.name = name;
- t.field = field;
- return t;
-}
-
// -- Interface
export type InterfaceType interface {
field *[]Field;
}
+func NewInterfaceTypeStruct(name string, field *[]Field) *InterfaceTypeStruct {
+ return &InterfaceTypeStruct{name, field}
+}
+
func (t *InterfaceTypeStruct) Field(i int) (name string, typ Type, offset uint64) {
return t.field[i].name, t.field[i].typ.Get(), 0
}
return len(t.field)
}
-func NewInterfaceTypeStruct(name string, field *[]Field) *InterfaceTypeStruct {
- t := new(InterfaceTypeStruct);
- t.name = name;
- t.field = field;
- return t;
-}
-
func (t *InterfaceTypeStruct) Kind() int {
return InterfaceKind
}
out *StructTypeStruct;
}
+func NewFuncTypeStruct(name string, in, out *StructTypeStruct) *FuncTypeStruct {
+ return &FuncTypeStruct{name, in, out}
+}
+
func (t *FuncTypeStruct) Kind() int {
return FuncKind
}
return t.out
}
-func NewFuncTypeStruct(name string, in, out *StructTypeStruct) *FuncTypeStruct {
- t := new(FuncTypeStruct);
- t.name = name;
- t.in = in;
- t.out = out;
- return t;
-}
-
// Cache of expanded types keyed by type name.
var types *map[string] *Type // BUG TODO: should be Type not *Type
addr Addr
}
+func Int8Creator(typ Type, addr Addr) Value {
+ return &Int8ValueStruct{addr}
+}
+
func (v *Int8ValueStruct) Kind() int {
return Int8Kind
}
*AddrToPtrInt8(v.addr) = i
}
-func Int8Creator(typ Type, addr Addr) Value {
- v := new(Int8ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Int16
export type Int16Value interface {
addr Addr
}
+func Int16Creator(typ Type, addr Addr) Value {
+ return &Int16ValueStruct{addr}
+}
+
func (v *Int16ValueStruct) Kind() int {
return Int16Kind
}
*AddrToPtrInt16(v.addr) = i
}
-func Int16Creator(typ Type, addr Addr) Value {
- v := new(Int16ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Int32
export type Int32Value interface {
addr Addr
}
+func Int32Creator(typ Type, addr Addr) Value {
+ return &Int32ValueStruct{addr}
+}
+
func (v *Int32ValueStruct) Type() Type {
return Int32
}
*AddrToPtrInt32(v.addr) = i
}
-func Int32Creator(typ Type, addr Addr) Value {
- v := new(Int32ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Int64
export type Int64Value interface {
Type() Type;
}
+func Int64Creator(typ Type, addr Addr) Value {
+ return &Int64ValueStruct{addr}
+}
+
type Int64ValueStruct struct {
addr Addr
}
*AddrToPtrInt64(v.addr) = i
}
-func Int64Creator(typ Type, addr Addr) Value {
- v := new(Int64ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Uint8
export type Uint8Value interface {
addr Addr
}
+func Uint8Creator(typ Type, addr Addr) Value {
+ return &Uint8ValueStruct{addr}
+}
+
func (v *Uint8ValueStruct) Kind() int {
return Uint8Kind
}
*AddrToPtrUint8(v.addr) = i
}
-func Uint8Creator(typ Type, addr Addr) Value {
- v := new(Uint8ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Uint16
export type Uint16Value interface {
addr Addr
}
+func Uint16Creator(typ Type, addr Addr) Value {
+ return &Uint16ValueStruct{addr}
+}
+
func (v *Uint16ValueStruct) Kind() int {
return Uint16Kind
}
*AddrToPtrUint16(v.addr) = i
}
-func Uint16Creator(typ Type, addr Addr) Value {
- v := new(Uint16ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Uint32
export type Uint32Value interface {
addr Addr
}
+func Uint32Creator(typ Type, addr Addr) Value {
+ return &Uint32ValueStruct{addr}
+}
+
func (v *Uint32ValueStruct) Kind() int {
return Uint32Kind
}
*AddrToPtrUint32(v.addr) = i
}
-func Uint32Creator(typ Type, addr Addr) Value {
- v := new(Uint32ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Uint64
export type Uint64Value interface {
addr Addr
}
+func Uint64Creator(typ Type, addr Addr) Value {
+ return &Uint64ValueStruct{addr}
+}
+
func (v *Uint64ValueStruct) Kind() int {
return Uint64Kind
}
*AddrToPtrUint64(v.addr) = i
}
-func Uint64Creator(typ Type, addr Addr) Value {
- v := new(Uint64ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Float32
export type Float32Value interface {
addr Addr
}
+func Float32Creator(typ Type, addr Addr) Value {
+ return &Float32ValueStruct{addr}
+}
+
func (v *Float32ValueStruct) Kind() int {
return Float32Kind
}
*AddrToPtrFloat32(v.addr) = f
}
-func Float32Creator(typ Type, addr Addr) Value {
- v := new(Float32ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Float64
export type Float64Value interface {
addr Addr
}
+func Float64Creator(typ Type, addr Addr) Value {
+ return &Float64ValueStruct{addr}
+}
+
func (v *Float64ValueStruct) Kind() int {
return Float64Kind
}
*AddrToPtrFloat64(v.addr) = f
}
-func Float64Creator(typ Type, addr Addr) Value {
- v := new(Float64ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Float80
export type Float80Value interface {
addr Addr
}
+func Float80Creator(typ Type, addr Addr) Value {
+ return &Float80ValueStruct{addr}
+}
+
func (v *Float80ValueStruct) Kind() int {
return Float80Kind
}
}
*/
-func Float80Creator(typ Type, addr Addr) Value {
- v := new(Float80ValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- String
export type StringValue interface {
addr Addr
}
+func StringCreator(typ Type, addr Addr) Value {
+ return &StringValueStruct{addr}
+}
+
func (v *StringValueStruct) Kind() int {
return StringKind
}
*AddrToPtrString(v.addr) = s
}
-func StringCreator(typ Type, addr Addr) Value {
- v := new(StringValueStruct);
- v.addr = addr;
- return v;
-}
-
// -- Pointer
export type PtrValue interface {
type MapValueStruct struct {
addr Addr;
typ Type;
- len int;
+}
+
+func MapCreator(typ Type, addr Addr) Value {
+ return &MapValueStruct{addr, typ}
}
func (v *MapValueStruct) Kind() int {
}
func (v *MapValueStruct) Len() int {
- return v.len // TODO: probably want this to be dynamic
+ return 0 // TODO: probably want this to be dynamic
}
func (v *MapValueStruct) Elem(key Value) Value {
return nil
}
-func MapCreator(typ Type, addr Addr) Value {
- arraytype := typ.(MapType);
- v := new(MapValueStruct);
- v.addr = addr;
- v.typ = typ;
- return v;
-}
-
// -- Chan
export type ChanValue interface {
type ChanValueStruct struct {
addr Addr;
typ Type;
- len int;
+}
+
+func ChanCreator(typ Type, addr Addr) Value {
+ return &ChanValueStruct{addr, typ}
}
func (v *ChanValueStruct) Kind() int {
return v.typ
}
-func ChanCreator(typ Type, addr Addr) Value {
- v := new(ChanValueStruct);
- v.addr = addr;
- v.typ = typ;
- return v;
-}
-
// -- Struct
export type StructValue interface {
Type() Type;
}
-type InterfaceValueInterface struct {
+type InterfaceValueStruct struct {
addr Addr;
typ Type;
}
-func (v *InterfaceValueInterface) Kind() int {
- return InterfaceKind
+func InterfaceCreator(typ Type, addr Addr) Value {
+ return &InterfaceValueStruct{addr, typ}
}
-func (v *InterfaceValueInterface) Type() Type {
- return v.typ
+func (v *InterfaceValueStruct) Kind() int {
+ return InterfaceKind
}
-func InterfaceCreator(typ Type, addr Addr) Value {
- v := new(InterfaceValueInterface);
- v.addr = addr;
- v.typ = typ;
- return v;
+func (v *InterfaceValueStruct) Type() Type {
+ return v.typ
}
// -- Func
Type() Type;
}
-type FuncValueFunc struct {
+type FuncValueStruct struct {
addr Addr;
typ Type;
}
-func (v *FuncValueFunc) Kind() int {
- return FuncKind
+func FuncCreator(typ Type, addr Addr) Value {
+ return &FuncValueStruct{addr, typ}
}
-func (v *FuncValueFunc) Type() Type {
- return v.typ
+func (v *FuncValueStruct) Kind() int {
+ return FuncKind
}
-func FuncCreator(typ Type, addr Addr) Value {
- v := new(FuncValueFunc);
- v.addr = addr;
- v.typ = typ;
- return v;
+func (v *FuncValueStruct) Type() Type {
+ return v.typ
}
var creator *map[int] Creator