+++ /dev/null
-// Conversion operators - really just casts
-// *** Created by gencast.sh - Do Not Edit ***
-
-TEXT reflect·AddrToPtrAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrAddrToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrInt(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrIntToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrInt8(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrInt8ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrInt16(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrInt16ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrInt32(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrInt32ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrInt64(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrInt64ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrUint(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrUintToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrUint8(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrUint8ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrUint16(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrUint16ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrUint32(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrUint32ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrUint64(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrUint64ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrFloat(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrFloatToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrFloat32(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrFloat32ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrFloat64(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrFloat64ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrFloat80(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrFloat80ToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrString(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrStringToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrBool(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrBoolToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrRuntimeArray(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrRuntimeArrayToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·AddrToPtrInterface(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
-TEXT reflect·PtrInterfaceToAddr(SB),7,$-8
- MOVQ 8(SP), AX
- MOVQ AX, 16(SP)
- RET
-
import (
"reflect";
+ "unsafe";
)
-type Addr uint64 // TODO: where are ptrint/intptr etc?
-
-// Conversion functions, implemented in assembler
-type RuntimeArray struct
-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
-func AddrToPtrBool(Addr) *bool
-func AddrToPtrRuntimeArray(Addr) *RuntimeArray
-func PtrRuntimeArrayToAddr(*RuntimeArray) Addr
-func AddrToPtrInterface(Addr) *interface{}
+type Addr unsafe.pointer // TODO: where are ptrint/intptr etc?
export type Value interface {
Kind() int;
}
func (c *Common) Interface() interface {} {
- return sys.unreflect(*AddrToPtrAddr(c.addr), c.typ.String());
+ return sys.unreflect(uint64(uintptr(*c.addr.(*Addr))), c.typ.String());
}
func NewValueAddr(typ Type, addr Addr) Value
}
func (v *IntValueStruct) Get() int {
- return *AddrToPtrInt(v.addr)
+ return *v.addr.(*int)
}
func (v *IntValueStruct) Set(i int) {
- *AddrToPtrInt(v.addr) = i
+ *v.addr.(*int) = i
}
// -- Int8
}
func (v *Int8ValueStruct) Get() int8 {
- return *AddrToPtrInt8(v.addr)
+ return *v.addr.(*int8)
}
func (v *Int8ValueStruct) Set(i int8) {
- *AddrToPtrInt8(v.addr) = i
+ *v.addr.(*int8) = i
}
// -- Int16
}
func (v *Int16ValueStruct) Get() int16 {
- return *AddrToPtrInt16(v.addr)
+ return *v.addr.(*int16)
}
func (v *Int16ValueStruct) Set(i int16) {
- *AddrToPtrInt16(v.addr) = i
+ *v.addr.(*int16) = i
}
// -- Int32
}
func (v *Int32ValueStruct) Get() int32 {
- return *AddrToPtrInt32(v.addr)
+ return *v.addr.(*int32)
}
func (v *Int32ValueStruct) Set(i int32) {
- *AddrToPtrInt32(v.addr) = i
+ *v.addr.(*int32) = i
}
// -- Int64
}
func (v *Int64ValueStruct) Get() int64 {
- return *AddrToPtrInt64(v.addr)
+ return *v.addr.(*int64)
}
func (v *Int64ValueStruct) Set(i int64) {
- *AddrToPtrInt64(v.addr) = i
+ *v.addr.(*int64) = i
}
// -- Uint
}
func (v *UintValueStruct) Get() uint {
- return *AddrToPtrUint(v.addr)
+ return *v.addr.(*uint)
}
func (v *UintValueStruct) Set(i uint) {
- *AddrToPtrUint(v.addr) = i
+ *v.addr.(*uint) = i
}
// -- Uint8
}
func (v *Uint8ValueStruct) Get() uint8 {
- return *AddrToPtrUint8(v.addr)
+ return *v.addr.(*uint8)
}
func (v *Uint8ValueStruct) Set(i uint8) {
- *AddrToPtrUint8(v.addr) = i
+ *v.addr.(*uint8) = i
}
// -- Uint16
}
func (v *Uint16ValueStruct) Get() uint16 {
- return *AddrToPtrUint16(v.addr)
+ return *v.addr.(*uint16)
}
func (v *Uint16ValueStruct) Set(i uint16) {
- *AddrToPtrUint16(v.addr) = i
+ *v.addr.(*uint16) = i
}
// -- Uint32
}
func (v *Uint32ValueStruct) Get() uint32 {
- return *AddrToPtrUint32(v.addr)
+ return *v.addr.(*uint32)
}
func (v *Uint32ValueStruct) Set(i uint32) {
- *AddrToPtrUint32(v.addr) = i
+ *v.addr.(*uint32) = i
}
// -- Uint64
}
func (v *Uint64ValueStruct) Get() uint64 {
- return *AddrToPtrUint64(v.addr)
+ return *v.addr.(*uint64)
}
func (v *Uint64ValueStruct) Set(i uint64) {
- *AddrToPtrUint64(v.addr) = i
+ *v.addr.(*uint64) = i
}
// -- Float
}
func (v *FloatValueStruct) Get() float {
- return *AddrToPtrFloat(v.addr)
+ return *v.addr.(*float)
}
func (v *FloatValueStruct) Set(f float) {
- *AddrToPtrFloat(v.addr) = f
+ *v.addr.(*float) = f
}
// -- Float32
}
func (v *Float32ValueStruct) Get() float32 {
- return *AddrToPtrFloat32(v.addr)
+ return *v.addr.(*float32)
}
func (v *Float32ValueStruct) Set(f float32) {
- *AddrToPtrFloat32(v.addr) = f
+ *v.addr.(*float32) = f
}
// -- Float64
}
func (v *Float64ValueStruct) Get() float64 {
- return *AddrToPtrFloat64(v.addr)
+ return *v.addr.(*float64)
}
func (v *Float64ValueStruct) Set(f float64) {
- *AddrToPtrFloat64(v.addr) = f
+ *v.addr.(*float64) = f
}
// -- Float80
/*
BUG: can't gen code for float80s
func (v *Float80ValueStruct) Get() float80 {
- return *AddrToPtrFloat80(v.addr)
- return 0;
+ return *v.addr.(*float80)
}
func (v *Float80ValueStruct) Set(f float80) {
- *AddrToPtrFloat80(v.addr) = f
+ *v.addr.(*float80) = f
}
*/
}
func (v *StringValueStruct) Get() string {
- return *AddrToPtrString(v.addr)
+ return *v.addr.(*string)
}
func (v *StringValueStruct) Set(s string) {
- *AddrToPtrString(v.addr) = s
+ *v.addr.(*string) = s
}
// -- Bool
}
func (v *BoolValueStruct) Get() bool {
- return *AddrToPtrBool(v.addr)
+ return *v.addr.(*bool)
}
func (v *BoolValueStruct) Set(b bool) {
- *AddrToPtrBool(v.addr) = b
+ *v.addr.(*bool) = b
}
// -- Pointer
}
func (v *PtrValueStruct) Get() Addr {
- return *AddrToPtrAddr(v.addr)
+ return *v.addr.(*Addr)
}
func (v *PtrValueStruct) Sub() Value {
if a != b {
panicln("reflect: incompatible types in PtrValue.SetSub:", a, b);
}
- *AddrToPtrAddr(v.addr) = subv.Addr();
+ *v.addr.(*Addr) = subv.Addr();
}
func PtrCreator(typ Type, addr Addr) Value {
}
func (v *OpenArrayValueStruct) Elem(i int) Value {
- return NewValueAddr(v.elemtype, v.array.data + Addr(i * v.elemsize));
+ data_uint := uintptr(v.array.data) + uintptr(i * v.elemsize);
+ return NewValueAddr(v.elemtype, Addr(data_uint));
}
type FixedArrayValueStruct struct {
}
func (v *FixedArrayValueStruct) Elem(i int) Value {
- return NewValueAddr(v.elemtype, v.addr + Addr(i * v.elemsize));
+ data_uint := uintptr(v.addr) + uintptr(i * v.elemsize);
+ return NewValueAddr(v.elemtype, Addr(data_uint));
return nil
}
v.typ = typ;
v.elemtype = arraytype.Elem();
v.elemsize = v.elemtype.Size();
- v.array = AddrToPtrRuntimeArray(addr);
+ v.array = addr.(*RuntimeArray);
return v;
}
v := new(FixedArrayValueStruct);
v := &StructValueStruct{ Common{StructKind, typ, addr}, new([]Value, nfield) };
for i := 0; i < nfield; i++ {
name, ftype, str, offset := t.Field(i);
- v.field[i] = NewValueAddr(ftype, addr + Addr(offset));
+ addr_uint := uintptr(addr) + uintptr(offset);
+ v.field[i] = NewValueAddr(ftype, Addr(addr_uint));
}
v.typ = typ;
return v;
}
func (v *InterfaceValueStruct) Get() interface{} {
- return *AddrToPtrInterface(v.addr);
+ return *v.addr.(*interface{})
}
func InterfaceCreator(typ Type, addr Addr) Value {
size = 1;
}
data := new([]uint8, size);
- return NewValueAddr(typ, PtrUint8ToAddr(&data[0]));
+ return NewValueAddr(typ, Addr(&data[0]));
}
/*
size = 1;
}
data := new([]uint8, size);
- array.data = PtrUint8ToAddr(&data[0]);
+ array.data = Addr(&data[0]);
array.len = uint32(len);
array.cap = uint32(cap);
- return NewValueAddr(typ, PtrRuntimeArrayToAddr(array));
+ return NewValueAddr(typ, Addr(array));
}
export func NewValue(e interface {}) Value {
// so we can modify the contents. Values contain pointers to 'values'.
ap := new(uint64);
*ap = value;
- return NewValueAddr(*p, PtrUint64ToAddr(ap));
+ return NewValueAddr(*p, ap.(Addr));
}