aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorMarcel van Lohuizen <mpvl@golang.org>2019-02-08 17:48:17 +0100
committerMarcel van Lohuizen <mpvl@golang.org>2019-02-27 18:27:01 +0000
commit9650726e79e20386b59b253e98dcaaa768e06c95 (patch)
treecbec3bc830648a2aa767ac2fa9ca31d073da3510 /src/runtime
parentb9596aea50a0703f89c6f11c206cfd2c7dd189fa (diff)
downloadgo-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.go5
-rw-r--r--src/runtime/malloc.go5
-rw-r--r--src/runtime/mbarrier.go5
-rw-r--r--src/runtime/runtime1.go12
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 {