This is the beginning of true reflection support in TinyGo.
Этот коммит содержится в:
Ayke van Laethem 2018-12-12 11:52:47 +01:00
родитель 70f1064f36
коммит f0904779a5
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED
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 предоставленный Обычный файл
Просмотреть файл

@ -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 предоставленный Обычный файл
Просмотреть файл

@ -0,0 +1,4 @@
matching types
true
false
false