]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: convT2{I,E} don't handle direct interfaces
authorKeith Randall <khr@golang.org>
Tue, 19 Apr 2016 19:48:09 +0000 (12:48 -0700)
committerKeith Randall <khr@golang.org>
Tue, 19 Apr 2016 22:27:08 +0000 (22:27 +0000)
We now inline type to interface conversions when the type
is pointer-shaped.  No need to keep code to handle that in
convT2{I,E}.

Change-Id: I3a6668259556077cbb2986a9e8fe42a625d506c9
Reviewed-on: https://go-review.googlesource.com/22249
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michel Lespinasse <walken@google.com>
src/runtime/iface.go

index 8f179bac802894b7ca6ca7e169a376c2494fb4af..352ff774654c01dac096bfda2a342bd6b67f9ac7 100644 (file)
@@ -160,18 +160,16 @@ func convT2E(t *_type, elem unsafe.Pointer, x unsafe.Pointer) (e eface) {
                msanread(elem, t.size)
        }
        if isDirectIface(t) {
-               e._type = t
-               typedmemmove(t, unsafe.Pointer(&e.data), elem)
-       } else {
-               if x == nil {
-                       x = newobject(t)
-               }
+               throw("direct convT2E")
+       }
+       if x == nil {
+               x = newobject(t)
                // TODO: We allocate a zeroed object only to overwrite it with
                // actual data. Figure out how to avoid zeroing. Also below in convT2I.
-               typedmemmove(t, x, elem)
-               e._type = t
-               e.data = x
        }
+       typedmemmove(t, x, elem)
+       e._type = t
+       e.data = x
        return
 }
 
@@ -184,16 +182,14 @@ func convT2I(tab *itab, elem unsafe.Pointer, x unsafe.Pointer) (i iface) {
                msanread(elem, t.size)
        }
        if isDirectIface(t) {
-               i.tab = tab
-               typedmemmove(t, unsafe.Pointer(&i.data), elem)
-       } else {
-               if x == nil {
-                       x = newobject(t)
-               }
-               typedmemmove(t, x, elem)
-               i.tab = tab
-               i.data = x
+               throw("direct convT2I")
+       }
+       if x == nil {
+               x = newobject(t)
        }
+       typedmemmove(t, x, elem)
+       i.tab = tab
+       i.data = x
        return
 }