reflect: add reflect.TypeOf

This is the beginning of true reflection support in TinyGo.
This commit is contained in:
Ayke van Laethem
2018-12-12 11:52:47 +01:00
parent 70f1064f36
commit f0904779a5
4 changed files with 23 additions and 8 deletions
+4 -7
View File
@@ -1,24 +1,21 @@
package reflect
import (
_ "unsafe" // for go:linkname
"unsafe"
)
// This is the same thing as an interface{}.
type Value struct {
typecode Type
value *uint8
value unsafe.Pointer
}
func Indirect(v Value) Value {
return v
}
func ValueOf(i interface{}) Value
//go:linkname _ValueOf reflect.ValueOf
func _ValueOf(i Value) Value {
return i
func ValueOf(i interface{}) Value {
return *(*Value)(unsafe.Pointer(&i))
}
func (v Value) Interface() interface{}
+3 -1
View File
@@ -5,9 +5,11 @@ package runtime
// Interfaces are represented as a pair of {typecode, value}, where value can be
// anything (including non-pointers).
import "unsafe"
type _interface struct {
typecode uintptr
value *uint8
value unsafe.Pointer
}
// Return true iff both interfaces are equal.
+12
View File
@@ -0,0 +1,12 @@
package main
import "reflect"
type myint int
func main() {
println("matching types")
println(reflect.TypeOf(int(3)) == reflect.TypeOf(int(5)))
println(reflect.TypeOf(int(3)) == reflect.TypeOf(uint(5)))
println(reflect.TypeOf(myint(3)) == reflect.TypeOf(int(5)))
}
+4
View File
@@ -0,0 +1,4 @@
matching types
true
false
false