]> Cypherpunks repositories - gostls13.git/commitdiff
handle zeroed interface in ifaceI2I
authorRuss Cox <rsc@golang.org>
Fri, 10 Oct 2008 23:21:50 +0000 (16:21 -0700)
committerRuss Cox <rsc@golang.org>
Fri, 10 Oct 2008 23:21:50 +0000 (16:21 -0700)
R=r
OCL=16938
CL=16938

src/runtime/iface.c

index 089975b92326aa0bbf2adb41234b6bf9c789c490..de59172d1780221e0bbfeeaf469b0b76d5528cdd 100644 (file)
@@ -231,7 +231,6 @@ sys·ifaceI2T(Sigt *st, Map *im, void *it, void *ret)
 void
 sys·ifaceI2I(Sigi *si, Map *im, void *it, Map *retim, void *retit)
 {
-
        if(debug) {
                prints("I2I sigi=");
                printsigi(si);
@@ -241,15 +240,17 @@ sys·ifaceI2I(Sigi *si, Map *im, void *it, Map *retim, void *retit)
        }
 
        if(im == nil) {
-               throw("ifaceI2I: nil map");
-               return;
+               // If incoming interface is uninitialized (zeroed)
+               // make the outgoing interface zeroed as well.
+               retim = nil;
+               retit = nil;
+       } else {
+               retit = it;
+               retim = im;
+               if(im->sigi != si)
+                       retim = hashmap(si, im->sigt);
        }
 
-       retit = it;
-       retim = im;
-       if(im->sigi != si)
-               retim = hashmap(si, im->sigt);
-
        if(debug) {
                prints("I2I ret=");
                printiface(retim, retit);