diff options
| author | Marcel van Lohuizen <mpvl@golang.org> | 2019-02-08 17:48:17 +0100 |
|---|---|---|
| committer | Marcel van Lohuizen <mpvl@golang.org> | 2019-02-27 18:27:01 +0000 |
| commit | 9650726e79e20386b59b253e98dcaaa768e06c95 (patch) | |
| tree | cbec3bc830648a2aa767ac2fa9ca31d073da3510 /src/runtime | |
| parent | b9596aea50a0703f89c6f11c206cfd2c7dd189fa (diff) | |
| download | go-9650726e79e20386b59b253e98dcaaa768e06c95.tar.xz | |
internal/reflectlite: lite version of reflect package
to be used by errors package for checking assignability
and setting error values in As.
Updates #29934.
Change-Id: I8c1d02a2c6efa0919d54b286cfe8b4edc26da059
Reviewed-on: https://go-review.googlesource.com/c/161759
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/iface.go | 5 | ||||
| -rw-r--r-- | src/runtime/malloc.go | 5 | ||||
| -rw-r--r-- | src/runtime/mbarrier.go | 5 | ||||
| -rw-r--r-- | src/runtime/runtime1.go | 12 |
4 files changed, 27 insertions, 0 deletions
diff --git a/src/runtime/iface.go b/src/runtime/iface.go index 8eca2e849d..246b63b897 100644 --- a/src/runtime/iface.go +++ b/src/runtime/iface.go @@ -492,6 +492,11 @@ func reflect_ifaceE2I(inter *interfacetype, e eface, dst *iface) { *dst = assertE2I(inter, e) } +//go:linkname reflectlite_ifaceE2I internal/reflectlite.ifaceE2I +func reflectlite_ifaceE2I(inter *interfacetype, e eface, dst *iface) { + *dst = assertE2I(inter, e) +} + func iterate_itabs(fn func(*itab)) { // Note: only runs during stop the world or with itabLock held, // so no other locks/atomics needed. diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index 8c617bb42b..6695372a3f 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -1073,6 +1073,11 @@ func reflect_unsafe_New(typ *_type) unsafe.Pointer { return mallocgc(typ.size, typ, true) } +//go:linkname reflectlite_unsafe_New internal/reflectlite.unsafe_New +func reflectlite_unsafe_New(typ *_type) unsafe.Pointer { + return mallocgc(typ.size, typ, true) +} + // newarray allocates an array of n elements of type typ. func newarray(typ *_type, n int) unsafe.Pointer { if n == 1 { diff --git a/src/runtime/mbarrier.go b/src/runtime/mbarrier.go index 6da8cf2ccb..c0bd236313 100644 --- a/src/runtime/mbarrier.go +++ b/src/runtime/mbarrier.go @@ -186,6 +186,11 @@ func reflect_typedmemmove(typ *_type, dst, src unsafe.Pointer) { typedmemmove(typ, dst, src) } +//go:linkname reflectlite_typedmemmove internal/reflectlite.typedmemmove +func reflectlite_typedmemmove(typ *_type, dst, src unsafe.Pointer) { + reflect_typedmemmove(typ, dst, src) +} + // typedmemmovepartial is like typedmemmove but assumes that // dst and src point off bytes into the value and only copies size bytes. //go:linkname reflect_typedmemmovepartial reflect.typedmemmovepartial diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go index 0c0a31ee6a..a597e1cd7f 100644 --- a/src/runtime/runtime1.go +++ b/src/runtime/runtime1.go @@ -490,6 +490,18 @@ func reflect_resolveTextOff(rtype unsafe.Pointer, off int32) unsafe.Pointer { } +// reflectlite_resolveNameOff resolves a name offset from a base pointer. +//go:linkname reflectlite_resolveNameOff internal/reflectlite.resolveNameOff +func reflectlite_resolveNameOff(ptrInModule unsafe.Pointer, off int32) unsafe.Pointer { + return unsafe.Pointer(resolveNameOff(ptrInModule, nameOff(off)).bytes) +} + +// reflectlite_resolveTypeOff resolves an *rtype offset from a base type. +//go:linkname reflectlite_resolveTypeOff internal/reflectlite.resolveTypeOff +func reflectlite_resolveTypeOff(rtype unsafe.Pointer, off int32) unsafe.Pointer { + return unsafe.Pointer((*_type)(rtype).typeOff(typeOff(off))) +} + // reflect_addReflectOff adds a pointer to the reflection offset lookup map. //go:linkname reflect_addReflectOff reflect.addReflectOff func reflect_addReflectOff(ptr unsafe.Pointer) int32 { |
