]> Cypherpunks repositories - gostls13.git/commitdiff
more on t,ok = I.(T)
authorKen Thompson <ken@golang.org>
Wed, 5 Nov 2008 23:33:01 +0000 (15:33 -0800)
committerKen Thompson <ken@golang.org>
Wed, 5 Nov 2008 23:33:01 +0000 (15:33 -0800)
R=r
OCL=18599
CL=18599

src/cmd/gc/walk.c

index f382390627814288772df3a3785c7661bc7f2682..cdc675a9157cc8c774e833a30eda742233f36cdf 100644 (file)
@@ -469,6 +469,7 @@ loop:
                case OCONV:
                        if(cl == 2 && cr == 1) {
                                // a,b = i.(T)
+                               walktype(r->left, Erv);
                                if(r->left == N)
                                        break;
                                et = isandss(r->type, r->left);
@@ -2964,6 +2965,20 @@ multi:
                n = list(n, a);
                break;
 
+       case OCONV:
+               // a,b := i.(T)
+               if(cl != 2)
+                       goto badt;
+               walktype(nr->left, Erv);
+               if(!isinter(nr->left->type))
+                       goto badt;
+               // a,b = iface
+               a = old2new(nl->left, nr->type);
+               n = a;
+               a = old2new(nl->right, types[TBOOL]);
+               n = list(n, a);
+               break;
+
        case ORECV:
                if(cl != 2)
                        goto badt;
@@ -2975,6 +2990,7 @@ multi:
                n = a;
                a = old2new(nl->right, types[TBOOL]);
                n = list(n, a);
+               break;
        }
        n = rev(n);
        return n;