reflect: add reflect.TypeOf
This is the beginning of true reflection support in TinyGo.
Этот коммит содержится в:
родитель
70f1064f36
коммит
f0904779a5
4 изменённых файлов: 23 добавлений и 8 удалений
|
@ -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{}
|
||||
|
|
|
@ -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
testdata/reflect.go
предоставленный
Обычный файл
12
testdata/reflect.go
предоставленный
Обычный файл
|
@ -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
testdata/reflect.txt
предоставленный
Обычный файл
4
testdata/reflect.txt
предоставленный
Обычный файл
|
@ -0,0 +1,4 @@
|
|||
matching types
|
||||
true
|
||||
false
|
||||
false
|
Загрузка…
Создание таблицы
Сослаться в новой задаче