]> Cypherpunks repositories - gostls13.git/commitdiff
vectors bug
authorKen Thompson <ken@golang.org>
Mon, 22 Sep 2008 23:58:30 +0000 (16:58 -0700)
committerKen Thompson <ken@golang.org>
Mon, 22 Sep 2008 23:58:30 +0000 (16:58 -0700)
R=r
OCL=15664
CL=15664

src/cmd/6g/cgen.c
src/cmd/6g/gg.h
src/cmd/gc/sys.go
src/cmd/gc/sysimport.c
src/cmd/gc/walk.c
src/runtime/iface.c

index 6e11558c2cead8914771f9d8e4c4e2fb0b719a3e..51cf162f94532e24e3b53226b55b7c0273eb0845 100644 (file)
@@ -667,21 +667,33 @@ ret:
 int32
 stkof(Node *n)
 {
+       Type *t;
+       Iter flist;
+
        switch(n->op) {
-//     case OS2I:
-//             return 2*widthptr;
-//     case OI2I:
-//             return 1*widthptr;
        case OINDREG:
                return n->xoffset;
+
+       case OCALLMETH:
+       case OCALLINTER:
+       case OCALL:
+               t = n->left->type;
+               if(isptr[t->etype])
+                       t = t->type;
+
+               t = structfirst(&flist, getoutarg(t));
+               if(t != T)
+                       return t->width;
+               break;
        }
+
        // botch - probably failing to recognize address
        // arithmetic on the above. eg INDEX and DOT
-       return -1;
+       return -1000;
 }
 
 void
-sgen(Node *n, Node *ns, uint32 w)
+sgen(Node *n, Node *ns, int32 w)
 {
        Node nodl, nodr;
        int32 c, q, odst, osrc;
@@ -697,12 +709,11 @@ sgen(Node *n, Node *ns, uint32 w)
        }
 
        // offset on the stack
-       odst = stkof(ns);
        osrc = stkof(n);
-       if(osrc < 0)
-               odst = odst;
-       if(odst < 0)
-               osrc = odst;
+       odst = stkof(ns);
+//print("\nnsrc=%N\n", n);
+//print("ndst=%N\n", ns);
+//print("osrc=%d odst=%d w=%d\n", osrc, odst, w);
 
        nodreg(&nodl, types[tptr], D_DI);
        nodreg(&nodr, types[tptr], D_SI);
@@ -720,7 +731,7 @@ sgen(Node *n, Node *ns, uint32 w)
 
        // if we are copying forward on the stack and
        // the src and dst overlap, then reverse direction
-       if(odst > osrc && odst-osrc < w) {
+       if(osrc < odst && odst < osrc+w) {
                // reverse direction
                gins(ASTD, N, N);               // set direction flag
                if(c > 0) {
index 5d1f7030bdf153d2af86127d92f451558f2838d7..5a45aca873e45ab65daf2f03902f22a375e8a98b 100644 (file)
@@ -153,7 +153,7 @@ void        agen(Node*, Node*);
 void   igen(Node*, Node*, Node*);
 vlong  fieldoffset(Type*, Node*);
 void   bgen(Node*, int, Prog*);
-void   sgen(Node*, Node*, uint32);
+void   sgen(Node*, Node*, int32);
 void   gmove(Node*, Node*);
 Prog*  gins(int, Node*, Node*);
 int    samaddr(Node*, Node*);
index 083337d3c9af93454103934839ea1b7fe9cf1059..c61c1666940c19f9b2480eed38a8aeb6656cec49 100644 (file)
@@ -16,6 +16,7 @@ func  printfloat(double);
 func   printint(int64);
 func   printstring(string);
 func   printpointer(*any);
+func   printinter(any);
 
 func   catstring(string, string) string;
 func   cmpstring(string, string) int32;
@@ -24,8 +25,8 @@ func  indexstring(string, int32) byte;
 func   intstring(int64) string;
 func   byteastring(*byte, int32) string;
 
-func   ifaceT2I(sigi *byte, sigt *byte, elem any) (ret interface{});
-func   ifaceI2T(sigt *byte, iface interface{}) (ret any);
+func   ifaceT2I(sigi *byte, sigt *byte, elem any) (ret any);
+func   ifaceI2T(sigt *byte, iface any) (ret any);
 func   ifaceI2I(sigi *byte, iface any) (ret any);
 
 func   argc() int32;
@@ -90,6 +91,7 @@ export
        printint
        printstring
        printpointer
+       printinter
 
        // op string
        catstring
index ad858c9ebaba958b8a0cbbac9946aed10619e126..6964338b445eea2c338452bcc9f0cbab4feeb572 100644 (file)
@@ -3,10 +3,10 @@ char* sysimport =
        "type sys._esys_002 {}\n"
        "type sys.any 24\n"
        "type sys._esys_003 *sys.any\n"
-       "type sys._osys_445 {_esys_443 sys._esys_003}\n"
+       "type sys._osys_442 {_esys_440 sys._esys_003}\n"
        "type sys.uint32 6\n"
-       "type sys._isys_447 {_esys_444 sys.uint32}\n"
-       "type sys._esys_001 (sys._esys_002 sys._osys_445 sys._isys_447)\n"
+       "type sys._isys_444 {_esys_441 sys.uint32}\n"
+       "type sys._esys_001 (sys._esys_002 sys._osys_442 sys._isys_444)\n"
        "var !sys.mal sys._esys_001\n"
        "type sys._esys_005 {}\n"
        "type sys._esys_006 {}\n"
@@ -26,331 +26,334 @@ char*     sysimport =
        "type sys._esys_017 {}\n"
        "type sys._esys_018 {}\n"
        "type sys.int32 5\n"
-       "type sys._isys_455 {_esys_454 sys.int32}\n"
-       "type sys._esys_016 (sys._esys_017 sys._esys_018 sys._isys_455)\n"
+       "type sys._isys_452 {_esys_451 sys.int32}\n"
+       "type sys._esys_016 (sys._esys_017 sys._esys_018 sys._isys_452)\n"
        "var !sys.panicl sys._esys_016\n"
        "type sys._esys_020 {}\n"
        "type sys._esys_021 {}\n"
        "type sys.bool 12\n"
-       "type sys._isys_460 {_esys_459 sys.bool}\n"
-       "type sys._esys_019 (sys._esys_020 sys._esys_021 sys._isys_460)\n"
+       "type sys._isys_457 {_esys_456 sys.bool}\n"
+       "type sys._esys_019 (sys._esys_020 sys._esys_021 sys._isys_457)\n"
        "var !sys.printbool sys._esys_019\n"
        "type sys._esys_023 {}\n"
        "type sys._esys_024 {}\n"
        "type sys.float64 10\n"
-       "type sys._isys_465 {_esys_464 sys.float64}\n"
-       "type sys._esys_022 (sys._esys_023 sys._esys_024 sys._isys_465)\n"
+       "type sys._isys_462 {_esys_461 sys.float64}\n"
+       "type sys._esys_022 (sys._esys_023 sys._esys_024 sys._isys_462)\n"
        "var !sys.printfloat sys._esys_022\n"
        "type sys._esys_026 {}\n"
        "type sys._esys_027 {}\n"
        "type sys.int64 7\n"
-       "type sys._isys_470 {_esys_469 sys.int64}\n"
-       "type sys._esys_025 (sys._esys_026 sys._esys_027 sys._isys_470)\n"
+       "type sys._isys_467 {_esys_466 sys.int64}\n"
+       "type sys._esys_025 (sys._esys_026 sys._esys_027 sys._isys_467)\n"
        "var !sys.printint sys._esys_025\n"
        "type sys._esys_029 {}\n"
        "type sys._esys_030 {}\n"
        "type sys._esys_031 25\n"
        "type sys.string *sys._esys_031\n"
-       "type sys._isys_475 {_esys_474 sys.string}\n"
-       "type sys._esys_028 (sys._esys_029 sys._esys_030 sys._isys_475)\n"
+       "type sys._isys_472 {_esys_471 sys.string}\n"
+       "type sys._esys_028 (sys._esys_029 sys._esys_030 sys._isys_472)\n"
        "var !sys.printstring sys._esys_028\n"
        "type sys._esys_033 {}\n"
        "type sys._esys_034 {}\n"
        "type sys._esys_035 *sys.any\n"
-       "type sys._isys_480 {_esys_479 sys._esys_035}\n"
-       "type sys._esys_032 (sys._esys_033 sys._esys_034 sys._isys_480)\n"
+       "type sys._isys_477 {_esys_476 sys._esys_035}\n"
+       "type sys._esys_032 (sys._esys_033 sys._esys_034 sys._isys_477)\n"
        "var !sys.printpointer sys._esys_032\n"
        "type sys._esys_037 {}\n"
-       "type sys._osys_487 {_esys_484 sys.string}\n"
-       "type sys._isys_489 {_esys_485 sys.string _esys_486 sys.string}\n"
-       "type sys._esys_036 (sys._esys_037 sys._osys_487 sys._isys_489)\n"
-       "var !sys.catstring sys._esys_036\n"
-       "type sys._esys_039 {}\n"
-       "type sys._osys_497 {_esys_494 sys.int32}\n"
-       "type sys._isys_499 {_esys_495 sys.string _esys_496 sys.string}\n"
-       "type sys._esys_038 (sys._esys_039 sys._osys_497 sys._isys_499)\n"
-       "var !sys.cmpstring sys._esys_038\n"
-       "type sys._esys_041 {}\n"
-       "type sys._osys_508 {_esys_504 sys.string}\n"
-       "type sys._isys_510 {_esys_505 sys.string _esys_506 sys.int32 _esys_507 sys.int32}\n"
-       "type sys._esys_040 (sys._esys_041 sys._osys_508 sys._isys_510)\n"
-       "var !sys.slicestring sys._esys_040\n"
-       "type sys._esys_043 {}\n"
+       "type sys._esys_038 {}\n"
+       "type sys._isys_482 {_esys_481 sys.any}\n"
+       "type sys._esys_036 (sys._esys_037 sys._esys_038 sys._isys_482)\n"
+       "var !sys.printinter sys._esys_036\n"
+       "type sys._esys_040 {}\n"
+       "type sys._osys_489 {_esys_486 sys.string}\n"
+       "type sys._isys_491 {_esys_487 sys.string _esys_488 sys.string}\n"
+       "type sys._esys_039 (sys._esys_040 sys._osys_489 sys._isys_491)\n"
+       "var !sys.catstring sys._esys_039\n"
+       "type sys._esys_042 {}\n"
+       "type sys._osys_499 {_esys_496 sys.int32}\n"
+       "type sys._isys_501 {_esys_497 sys.string _esys_498 sys.string}\n"
+       "type sys._esys_041 (sys._esys_042 sys._osys_499 sys._isys_501)\n"
+       "var !sys.cmpstring sys._esys_041\n"
+       "type sys._esys_044 {}\n"
+       "type sys._osys_510 {_esys_506 sys.string}\n"
+       "type sys._isys_512 {_esys_507 sys.string _esys_508 sys.int32 _esys_509 sys.int32}\n"
+       "type sys._esys_043 (sys._esys_044 sys._osys_510 sys._isys_512)\n"
+       "var !sys.slicestring sys._esys_043\n"
+       "type sys._esys_046 {}\n"
        "type sys.uint8 2\n"
-       "type sys._osys_519 {_esys_516 sys.uint8}\n"
-       "type sys._isys_521 {_esys_517 sys.string _esys_518 sys.int32}\n"
-       "type sys._esys_042 (sys._esys_043 sys._osys_519 sys._isys_521)\n"
-       "var !sys.indexstring sys._esys_042\n"
-       "type sys._esys_045 {}\n"
-       "type sys._osys_528 {_esys_526 sys.string}\n"
-       "type sys._isys_530 {_esys_527 sys.int64}\n"
-       "type sys._esys_044 (sys._esys_045 sys._osys_528 sys._isys_530)\n"
-       "var !sys.intstring sys._esys_044\n"
-       "type sys._esys_047 {}\n"
-       "type sys._osys_537 {_esys_534 sys.string}\n"
-       "type sys._esys_048 *sys.uint8\n"
-       "type sys._isys_539 {_esys_535 sys._esys_048 _esys_536 sys.int32}\n"
-       "type sys._esys_046 (sys._esys_047 sys._osys_537 sys._isys_539)\n"
-       "var !sys.byteastring sys._esys_046\n"
+       "type sys._osys_521 {_esys_518 sys.uint8}\n"
+       "type sys._isys_523 {_esys_519 sys.string _esys_520 sys.int32}\n"
+       "type sys._esys_045 (sys._esys_046 sys._osys_521 sys._isys_523)\n"
+       "var !sys.indexstring sys._esys_045\n"
+       "type sys._esys_048 {}\n"
+       "type sys._osys_530 {_esys_528 sys.string}\n"
+       "type sys._isys_532 {_esys_529 sys.int64}\n"
+       "type sys._esys_047 (sys._esys_048 sys._osys_530 sys._isys_532)\n"
+       "var !sys.intstring sys._esys_047\n"
        "type sys._esys_050 {}\n"
-       "type sys._esys_051 <>\n"
-       "type sys._osys_544 {ret sys._esys_051}\n"
-       "type sys._esys_052 *sys.uint8\n"
-       "type sys._esys_053 *sys.uint8\n"
-       "type sys._isys_546 {sigi sys._esys_052 sigt sys._esys_053 elem sys.any}\n"
-       "type sys._esys_049 (sys._esys_050 sys._osys_544 sys._isys_546)\n"
-       "var !sys.ifaceT2I sys._esys_049\n"
-       "type sys._esys_055 {}\n"
-       "type sys._osys_553 {ret sys.any}\n"
-       "type sys._esys_056 *sys.uint8\n"
-       "type sys._esys_057 <>\n"
-       "type sys._isys_555 {sigt sys._esys_056 iface sys._esys_057}\n"
-       "type sys._esys_054 (sys._esys_055 sys._osys_553 sys._isys_555)\n"
-       "var !sys.ifaceI2T sys._esys_054\n"
-       "type sys._esys_059 {}\n"
-       "type sys._osys_561 {ret sys.any}\n"
-       "type sys._esys_060 *sys.uint8\n"
-       "type sys._isys_563 {sigi sys._esys_060 iface sys.any}\n"
-       "type sys._esys_058 (sys._esys_059 sys._osys_561 sys._isys_563)\n"
-       "var !sys.ifaceI2I sys._esys_058\n"
-       "type sys._esys_062 {}\n"
-       "type sys._osys_570 {_esys_569 sys.int32}\n"
+       "type sys._osys_539 {_esys_536 sys.string}\n"
+       "type sys._esys_051 *sys.uint8\n"
+       "type sys._isys_541 {_esys_537 sys._esys_051 _esys_538 sys.int32}\n"
+       "type sys._esys_049 (sys._esys_050 sys._osys_539 sys._isys_541)\n"
+       "var !sys.byteastring sys._esys_049\n"
+       "type sys._esys_053 {}\n"
+       "type sys._osys_546 {ret sys.any}\n"
+       "type sys._esys_054 *sys.uint8\n"
+       "type sys._esys_055 *sys.uint8\n"
+       "type sys._isys_548 {sigi sys._esys_054 sigt sys._esys_055 elem sys.any}\n"
+       "type sys._esys_052 (sys._esys_053 sys._osys_546 sys._isys_548)\n"
+       "var !sys.ifaceT2I sys._esys_052\n"
+       "type sys._esys_057 {}\n"
+       "type sys._osys_555 {ret sys.any}\n"
+       "type sys._esys_058 *sys.uint8\n"
+       "type sys._isys_557 {sigt sys._esys_058 iface sys.any}\n"
+       "type sys._esys_056 (sys._esys_057 sys._osys_555 sys._isys_557)\n"
+       "var !sys.ifaceI2T sys._esys_056\n"
+       "type sys._esys_060 {}\n"
+       "type sys._osys_563 {ret sys.any}\n"
+       "type sys._esys_061 *sys.uint8\n"
+       "type sys._isys_565 {sigi sys._esys_061 iface sys.any}\n"
+       "type sys._esys_059 (sys._esys_060 sys._osys_563 sys._isys_565)\n"
+       "var !sys.ifaceI2I sys._esys_059\n"
        "type sys._esys_063 {}\n"
-       "type sys._esys_061 (sys._esys_062 sys._osys_570 sys._esys_063)\n"
-       "var !sys.argc sys._esys_061\n"
-       "type sys._esys_065 {}\n"
-       "type sys._osys_574 {_esys_573 sys.int32}\n"
+       "type sys._osys_572 {_esys_571 sys.int32}\n"
+       "type sys._esys_064 {}\n"
+       "type sys._esys_062 (sys._esys_063 sys._osys_572 sys._esys_064)\n"
+       "var !sys.argc sys._esys_062\n"
        "type sys._esys_066 {}\n"
-       "type sys._esys_064 (sys._esys_065 sys._osys_574 sys._esys_066)\n"
-       "var !sys.envc sys._esys_064\n"
-       "type sys._esys_068 {}\n"
-       "type sys._osys_579 {_esys_577 sys.string}\n"
-       "type sys._isys_581 {_esys_578 sys.int32}\n"
-       "type sys._esys_067 (sys._esys_068 sys._osys_579 sys._isys_581)\n"
-       "var !sys.argv sys._esys_067\n"
-       "type sys._esys_070 {}\n"
-       "type sys._osys_587 {_esys_585 sys.string}\n"
-       "type sys._isys_589 {_esys_586 sys.int32}\n"
-       "type sys._esys_069 (sys._esys_070 sys._osys_587 sys._isys_589)\n"
-       "var !sys.envv sys._esys_069\n"
-       "type sys._esys_072 {}\n"
-       "type sys._osys_596 {_esys_593 sys.float64 _esys_594 sys.int32}\n"
-       "type sys._isys_598 {_esys_595 sys.float64}\n"
-       "type sys._esys_071 (sys._esys_072 sys._osys_596 sys._isys_598)\n"
-       "var !sys.frexp sys._esys_071\n"
-       "type sys._esys_074 {}\n"
-       "type sys._osys_605 {_esys_602 sys.float64}\n"
-       "type sys._isys_607 {_esys_603 sys.float64 _esys_604 sys.int32}\n"
-       "type sys._esys_073 (sys._esys_074 sys._osys_605 sys._isys_607)\n"
-       "var !sys.ldexp sys._esys_073\n"
-       "type sys._esys_076 {}\n"
-       "type sys._osys_615 {_esys_612 sys.float64 _esys_613 sys.float64}\n"
-       "type sys._isys_617 {_esys_614 sys.float64}\n"
-       "type sys._esys_075 (sys._esys_076 sys._osys_615 sys._isys_617)\n"
-       "var !sys.modf sys._esys_075\n"
-       "type sys._esys_078 {}\n"
-       "type sys._osys_624 {_esys_621 sys.bool}\n"
-       "type sys._isys_626 {_esys_622 sys.float64 _esys_623 sys.int32}\n"
-       "type sys._esys_077 (sys._esys_078 sys._osys_624 sys._isys_626)\n"
-       "var !sys.isInf sys._esys_077\n"
-       "type sys._esys_080 {}\n"
-       "type sys._osys_633 {_esys_631 sys.bool}\n"
-       "type sys._isys_635 {_esys_632 sys.float64}\n"
-       "type sys._esys_079 (sys._esys_080 sys._osys_633 sys._isys_635)\n"
-       "var !sys.isNaN sys._esys_079\n"
-       "type sys._esys_082 {}\n"
-       "type sys._osys_641 {_esys_639 sys.float64}\n"
-       "type sys._isys_643 {_esys_640 sys.int32}\n"
-       "type sys._esys_081 (sys._esys_082 sys._osys_641 sys._isys_643)\n"
-       "var !sys.Inf sys._esys_081\n"
-       "type sys._esys_084 {}\n"
-       "type sys._osys_648 {_esys_647 sys.float64}\n"
+       "type sys._osys_576 {_esys_575 sys.int32}\n"
+       "type sys._esys_067 {}\n"
+       "type sys._esys_065 (sys._esys_066 sys._osys_576 sys._esys_067)\n"
+       "var !sys.envc sys._esys_065\n"
+       "type sys._esys_069 {}\n"
+       "type sys._osys_581 {_esys_579 sys.string}\n"
+       "type sys._isys_583 {_esys_580 sys.int32}\n"
+       "type sys._esys_068 (sys._esys_069 sys._osys_581 sys._isys_583)\n"
+       "var !sys.argv sys._esys_068\n"
+       "type sys._esys_071 {}\n"
+       "type sys._osys_589 {_esys_587 sys.string}\n"
+       "type sys._isys_591 {_esys_588 sys.int32}\n"
+       "type sys._esys_070 (sys._esys_071 sys._osys_589 sys._isys_591)\n"
+       "var !sys.envv sys._esys_070\n"
+       "type sys._esys_073 {}\n"
+       "type sys._osys_598 {_esys_595 sys.float64 _esys_596 sys.int32}\n"
+       "type sys._isys_600 {_esys_597 sys.float64}\n"
+       "type sys._esys_072 (sys._esys_073 sys._osys_598 sys._isys_600)\n"
+       "var !sys.frexp sys._esys_072\n"
+       "type sys._esys_075 {}\n"
+       "type sys._osys_607 {_esys_604 sys.float64}\n"
+       "type sys._isys_609 {_esys_605 sys.float64 _esys_606 sys.int32}\n"
+       "type sys._esys_074 (sys._esys_075 sys._osys_607 sys._isys_609)\n"
+       "var !sys.ldexp sys._esys_074\n"
+       "type sys._esys_077 {}\n"
+       "type sys._osys_617 {_esys_614 sys.float64 _esys_615 sys.float64}\n"
+       "type sys._isys_619 {_esys_616 sys.float64}\n"
+       "type sys._esys_076 (sys._esys_077 sys._osys_617 sys._isys_619)\n"
+       "var !sys.modf sys._esys_076\n"
+       "type sys._esys_079 {}\n"
+       "type sys._osys_626 {_esys_623 sys.bool}\n"
+       "type sys._isys_628 {_esys_624 sys.float64 _esys_625 sys.int32}\n"
+       "type sys._esys_078 (sys._esys_079 sys._osys_626 sys._isys_628)\n"
+       "var !sys.isInf sys._esys_078\n"
+       "type sys._esys_081 {}\n"
+       "type sys._osys_635 {_esys_633 sys.bool}\n"
+       "type sys._isys_637 {_esys_634 sys.float64}\n"
+       "type sys._esys_080 (sys._esys_081 sys._osys_635 sys._isys_637)\n"
+       "var !sys.isNaN sys._esys_080\n"
+       "type sys._esys_083 {}\n"
+       "type sys._osys_643 {_esys_641 sys.float64}\n"
+       "type sys._isys_645 {_esys_642 sys.int32}\n"
+       "type sys._esys_082 (sys._esys_083 sys._osys_643 sys._isys_645)\n"
+       "var !sys.Inf sys._esys_082\n"
        "type sys._esys_085 {}\n"
-       "type sys._esys_083 (sys._esys_084 sys._osys_648 sys._esys_085)\n"
-       "var !sys.NaN sys._esys_083\n"
-       "type sys._esys_087 {}\n"
-       "type sys._esys_089 [sys.any] sys.any\n"
-       "type sys._esys_088 *sys._esys_089\n"
-       "type sys._osys_651 {hmap sys._esys_088}\n"
-       "type sys._isys_653 {keysize sys.uint32 valsize sys.uint32 keyalg sys.uint32 valalg sys.uint32 hint sys.uint32}\n"
-       "type sys._esys_086 (sys._esys_087 sys._osys_651 sys._isys_653)\n"
-       "var !sys.newmap sys._esys_086\n"
-       "type sys._esys_091 {}\n"
-       "type sys._osys_662 {val sys.any}\n"
-       "type sys._esys_093 [sys.any] sys.any\n"
-       "type sys._esys_092 *sys._esys_093\n"
-       "type sys._isys_664 {hmap sys._esys_092 key sys.any}\n"
-       "type sys._esys_090 (sys._esys_091 sys._osys_662 sys._isys_664)\n"
-       "var !sys.mapaccess1 sys._esys_090\n"
-       "type sys._esys_095 {}\n"
-       "type sys._osys_670 {val sys.any pres sys.bool}\n"
-       "type sys._esys_097 [sys.any] sys.any\n"
-       "type sys._esys_096 *sys._esys_097\n"
-       "type sys._isys_672 {hmap sys._esys_096 key sys.any}\n"
-       "type sys._esys_094 (sys._esys_095 sys._osys_670 sys._isys_672)\n"
-       "var !sys.mapaccess2 sys._esys_094\n"
-       "type sys._esys_099 {}\n"
+       "type sys._osys_650 {_esys_649 sys.float64}\n"
+       "type sys._esys_086 {}\n"
+       "type sys._esys_084 (sys._esys_085 sys._osys_650 sys._esys_086)\n"
+       "var !sys.NaN sys._esys_084\n"
+       "type sys._esys_088 {}\n"
+       "type sys._esys_090 [sys.any] sys.any\n"
+       "type sys._esys_089 *sys._esys_090\n"
+       "type sys._osys_653 {hmap sys._esys_089}\n"
+       "type sys._isys_655 {keysize sys.uint32 valsize sys.uint32 keyalg sys.uint32 valalg sys.uint32 hint sys.uint32}\n"
+       "type sys._esys_087 (sys._esys_088 sys._osys_653 sys._isys_655)\n"
+       "var !sys.newmap sys._esys_087\n"
+       "type sys._esys_092 {}\n"
+       "type sys._osys_664 {val sys.any}\n"
+       "type sys._esys_094 [sys.any] sys.any\n"
+       "type sys._esys_093 *sys._esys_094\n"
+       "type sys._isys_666 {hmap sys._esys_093 key sys.any}\n"
+       "type sys._esys_091 (sys._esys_092 sys._osys_664 sys._isys_666)\n"
+       "var !sys.mapaccess1 sys._esys_091\n"
+       "type sys._esys_096 {}\n"
+       "type sys._osys_672 {val sys.any pres sys.bool}\n"
+       "type sys._esys_098 [sys.any] sys.any\n"
+       "type sys._esys_097 *sys._esys_098\n"
+       "type sys._isys_674 {hmap sys._esys_097 key sys.any}\n"
+       "type sys._esys_095 (sys._esys_096 sys._osys_672 sys._isys_674)\n"
+       "var !sys.mapaccess2 sys._esys_095\n"
        "type sys._esys_100 {}\n"
-       "type sys._esys_102 [sys.any] sys.any\n"
-       "type sys._esys_101 *sys._esys_102\n"
-       "type sys._isys_679 {hmap sys._esys_101 key sys.any val sys.any}\n"
-       "type sys._esys_098 (sys._esys_099 sys._esys_100 sys._isys_679)\n"
-       "var !sys.mapassign1 sys._esys_098\n"
-       "type sys._esys_104 {}\n"
+       "type sys._esys_101 {}\n"
+       "type sys._esys_103 [sys.any] sys.any\n"
+       "type sys._esys_102 *sys._esys_103\n"
+       "type sys._isys_681 {hmap sys._esys_102 key sys.any val sys.any}\n"
+       "type sys._esys_099 (sys._esys_100 sys._esys_101 sys._isys_681)\n"
+       "var !sys.mapassign1 sys._esys_099\n"
        "type sys._esys_105 {}\n"
-       "type sys._esys_107 [sys.any] sys.any\n"
-       "type sys._esys_106 *sys._esys_107\n"
-       "type sys._isys_685 {hmap sys._esys_106 key sys.any val sys.any pres sys.bool}\n"
-       "type sys._esys_103 (sys._esys_104 sys._esys_105 sys._isys_685)\n"
-       "var !sys.mapassign2 sys._esys_103\n"
-       "type sys._esys_109 {}\n"
-       "type sys._esys_111 1 sys.any\n"
-       "type sys._esys_110 *sys._esys_111\n"
-       "type sys._osys_692 {hchan sys._esys_110}\n"
-       "type sys._isys_694 {elemsize sys.uint32 elemalg sys.uint32 hint sys.uint32}\n"
-       "type sys._esys_108 (sys._esys_109 sys._osys_692 sys._isys_694)\n"
-       "var !sys.newchan sys._esys_108\n"
-       "type sys._esys_113 {}\n"
-       "type sys._osys_701 {elem sys.any}\n"
-       "type sys._esys_115 1 sys.any\n"
-       "type sys._esys_114 *sys._esys_115\n"
-       "type sys._isys_703 {hchan sys._esys_114}\n"
-       "type sys._esys_112 (sys._esys_113 sys._osys_701 sys._isys_703)\n"
-       "var !sys.chanrecv1 sys._esys_112\n"
-       "type sys._esys_117 {}\n"
-       "type sys._osys_708 {elem sys.any pres sys.bool}\n"
-       "type sys._esys_119 1 sys.any\n"
-       "type sys._esys_118 *sys._esys_119\n"
-       "type sys._isys_710 {hchan sys._esys_118}\n"
-       "type sys._esys_116 (sys._esys_117 sys._osys_708 sys._isys_710)\n"
-       "var !sys.chanrecv2 sys._esys_116\n"
-       "type sys._esys_121 {}\n"
-       "type sys._osys_716 {pres sys.bool}\n"
-       "type sys._esys_123 1 sys.any\n"
-       "type sys._esys_122 *sys._esys_123\n"
-       "type sys._esys_124 *sys.any\n"
-       "type sys._isys_718 {hchan sys._esys_122 elem sys._esys_124}\n"
-       "type sys._esys_120 (sys._esys_121 sys._osys_716 sys._isys_718)\n"
-       "var !sys.chanrecv3 sys._esys_120\n"
-       "type sys._esys_126 {}\n"
+       "type sys._esys_106 {}\n"
+       "type sys._esys_108 [sys.any] sys.any\n"
+       "type sys._esys_107 *sys._esys_108\n"
+       "type sys._isys_687 {hmap sys._esys_107 key sys.any val sys.any pres sys.bool}\n"
+       "type sys._esys_104 (sys._esys_105 sys._esys_106 sys._isys_687)\n"
+       "var !sys.mapassign2 sys._esys_104\n"
+       "type sys._esys_110 {}\n"
+       "type sys._esys_112 1 sys.any\n"
+       "type sys._esys_111 *sys._esys_112\n"
+       "type sys._osys_694 {hchan sys._esys_111}\n"
+       "type sys._isys_696 {elemsize sys.uint32 elemalg sys.uint32 hint sys.uint32}\n"
+       "type sys._esys_109 (sys._esys_110 sys._osys_694 sys._isys_696)\n"
+       "var !sys.newchan sys._esys_109\n"
+       "type sys._esys_114 {}\n"
+       "type sys._osys_703 {elem sys.any}\n"
+       "type sys._esys_116 1 sys.any\n"
+       "type sys._esys_115 *sys._esys_116\n"
+       "type sys._isys_705 {hchan sys._esys_115}\n"
+       "type sys._esys_113 (sys._esys_114 sys._osys_703 sys._isys_705)\n"
+       "var !sys.chanrecv1 sys._esys_113\n"
+       "type sys._esys_118 {}\n"
+       "type sys._osys_710 {elem sys.any pres sys.bool}\n"
+       "type sys._esys_120 1 sys.any\n"
+       "type sys._esys_119 *sys._esys_120\n"
+       "type sys._isys_712 {hchan sys._esys_119}\n"
+       "type sys._esys_117 (sys._esys_118 sys._osys_710 sys._isys_712)\n"
+       "var !sys.chanrecv2 sys._esys_117\n"
+       "type sys._esys_122 {}\n"
+       "type sys._osys_718 {pres sys.bool}\n"
+       "type sys._esys_124 1 sys.any\n"
+       "type sys._esys_123 *sys._esys_124\n"
+       "type sys._esys_125 *sys.any\n"
+       "type sys._isys_720 {hchan sys._esys_123 elem sys._esys_125}\n"
+       "type sys._esys_121 (sys._esys_122 sys._osys_718 sys._isys_720)\n"
+       "var !sys.chanrecv3 sys._esys_121\n"
        "type sys._esys_127 {}\n"
-       "type sys._esys_129 1 sys.any\n"
-       "type sys._esys_128 *sys._esys_129\n"
-       "type sys._isys_724 {hchan sys._esys_128 elem sys.any}\n"
-       "type sys._esys_125 (sys._esys_126 sys._esys_127 sys._isys_724)\n"
-       "var !sys.chansend1 sys._esys_125\n"
-       "type sys._esys_131 {}\n"
-       "type sys._osys_729 {pres sys.bool}\n"
-       "type sys._esys_133 1 sys.any\n"
-       "type sys._esys_132 *sys._esys_133\n"
-       "type sys._isys_731 {hchan sys._esys_132 elem sys.any}\n"
-       "type sys._esys_130 (sys._esys_131 sys._osys_729 sys._isys_731)\n"
-       "var !sys.chansend2 sys._esys_130\n"
-       "type sys._esys_135 {}\n"
-       "type sys._esys_136 *sys.uint8\n"
-       "type sys._osys_737 {sel sys._esys_136}\n"
-       "type sys._isys_739 {size sys.uint32}\n"
-       "type sys._esys_134 (sys._esys_135 sys._osys_737 sys._isys_739)\n"
-       "var !sys.newselect sys._esys_134\n"
-       "type sys._esys_138 {}\n"
-       "type sys._osys_744 {selected sys.bool}\n"
-       "type sys._esys_139 *sys.uint8\n"
-       "type sys._esys_141 1 sys.any\n"
-       "type sys._esys_140 *sys._esys_141\n"
-       "type sys._isys_746 {sel sys._esys_139 hchan sys._esys_140 elem sys.any}\n"
-       "type sys._esys_137 (sys._esys_138 sys._osys_744 sys._isys_746)\n"
-       "var !sys.selectsend sys._esys_137\n"
-       "type sys._esys_143 {}\n"
-       "type sys._osys_753 {selected sys.bool}\n"
-       "type sys._esys_144 *sys.uint8\n"
-       "type sys._esys_146 1 sys.any\n"
-       "type sys._esys_145 *sys._esys_146\n"
-       "type sys._esys_147 *sys.any\n"
-       "type sys._isys_755 {sel sys._esys_144 hchan sys._esys_145 elem sys._esys_147}\n"
-       "type sys._esys_142 (sys._esys_143 sys._osys_753 sys._isys_755)\n"
-       "var !sys.selectrecv sys._esys_142\n"
-       "type sys._esys_149 {}\n"
+       "type sys._esys_128 {}\n"
+       "type sys._esys_130 1 sys.any\n"
+       "type sys._esys_129 *sys._esys_130\n"
+       "type sys._isys_726 {hchan sys._esys_129 elem sys.any}\n"
+       "type sys._esys_126 (sys._esys_127 sys._esys_128 sys._isys_726)\n"
+       "var !sys.chansend1 sys._esys_126\n"
+       "type sys._esys_132 {}\n"
+       "type sys._osys_731 {pres sys.bool}\n"
+       "type sys._esys_134 1 sys.any\n"
+       "type sys._esys_133 *sys._esys_134\n"
+       "type sys._isys_733 {hchan sys._esys_133 elem sys.any}\n"
+       "type sys._esys_131 (sys._esys_132 sys._osys_731 sys._isys_733)\n"
+       "var !sys.chansend2 sys._esys_131\n"
+       "type sys._esys_136 {}\n"
+       "type sys._esys_137 *sys.uint8\n"
+       "type sys._osys_739 {sel sys._esys_137}\n"
+       "type sys._isys_741 {size sys.uint32}\n"
+       "type sys._esys_135 (sys._esys_136 sys._osys_739 sys._isys_741)\n"
+       "var !sys.newselect sys._esys_135\n"
+       "type sys._esys_139 {}\n"
+       "type sys._osys_746 {selected sys.bool}\n"
+       "type sys._esys_140 *sys.uint8\n"
+       "type sys._esys_142 1 sys.any\n"
+       "type sys._esys_141 *sys._esys_142\n"
+       "type sys._isys_748 {sel sys._esys_140 hchan sys._esys_141 elem sys.any}\n"
+       "type sys._esys_138 (sys._esys_139 sys._osys_746 sys._isys_748)\n"
+       "var !sys.selectsend sys._esys_138\n"
+       "type sys._esys_144 {}\n"
+       "type sys._osys_755 {selected sys.bool}\n"
+       "type sys._esys_145 *sys.uint8\n"
+       "type sys._esys_147 1 sys.any\n"
+       "type sys._esys_146 *sys._esys_147\n"
+       "type sys._esys_148 *sys.any\n"
+       "type sys._isys_757 {sel sys._esys_145 hchan sys._esys_146 elem sys._esys_148}\n"
+       "type sys._esys_143 (sys._esys_144 sys._osys_755 sys._isys_757)\n"
+       "var !sys.selectrecv sys._esys_143\n"
        "type sys._esys_150 {}\n"
-       "type sys._esys_151 *sys.uint8\n"
-       "type sys._isys_762 {sel sys._esys_151}\n"
-       "type sys._esys_148 (sys._esys_149 sys._esys_150 sys._isys_762)\n"
-       "var !sys.selectgo sys._esys_148\n"
-       "type sys._esys_153 {}\n"
-       "type sys._esys_155 [] sys.any\n"
-       "type sys._esys_154 *sys._esys_155\n"
-       "type sys._osys_766 {ary sys._esys_154}\n"
-       "type sys._isys_768 {nel sys.uint32 cap sys.uint32 width sys.uint32}\n"
-       "type sys._esys_152 (sys._esys_153 sys._osys_766 sys._isys_768)\n"
-       "var !sys.newarray sys._esys_152\n"
-       "type sys._esys_157 {}\n"
-       "type sys._esys_159 [] sys.any\n"
-       "type sys._esys_158 *sys._esys_159\n"
-       "type sys._osys_775 {ary sys._esys_158}\n"
-       "type sys._esys_161 [] sys.any\n"
-       "type sys._esys_160 *sys._esys_161\n"
-       "type sys._isys_777 {old sys._esys_160 lb sys.uint32 hb sys.uint32 width sys.uint32}\n"
-       "type sys._esys_156 (sys._esys_157 sys._osys_775 sys._isys_777)\n"
-       "var !sys.arraysliced sys._esys_156\n"
-       "type sys._esys_163 {}\n"
-       "type sys._esys_165 [] sys.any\n"
-       "type sys._esys_164 *sys._esys_165\n"
-       "type sys._osys_785 {ary sys._esys_164}\n"
-       "type sys._esys_166 *sys.any\n"
-       "type sys._isys_787 {old sys._esys_166 nel sys.uint32 lb sys.uint32 hb sys.uint32 width sys.uint32}\n"
-       "type sys._esys_162 (sys._esys_163 sys._osys_785 sys._isys_787)\n"
-       "var !sys.arrayslices sys._esys_162\n"
-       "type sys._esys_168 {}\n"
-       "type sys._esys_170 [] sys.any\n"
-       "type sys._esys_169 *sys._esys_170\n"
-       "type sys._osys_796 {ary sys._esys_169}\n"
-       "type sys._esys_171 *sys.any\n"
-       "type sys._isys_798 {old sys._esys_171 nel sys.uint32}\n"
-       "type sys._esys_167 (sys._esys_168 sys._osys_796 sys._isys_798)\n"
-       "var !sys.arrays2d sys._esys_167\n"
-       "type sys._esys_173 {}\n"
+       "type sys._esys_151 {}\n"
+       "type sys._esys_152 *sys.uint8\n"
+       "type sys._isys_764 {sel sys._esys_152}\n"
+       "type sys._esys_149 (sys._esys_150 sys._esys_151 sys._isys_764)\n"
+       "var !sys.selectgo sys._esys_149\n"
+       "type sys._esys_154 {}\n"
+       "type sys._esys_156 [] sys.any\n"
+       "type sys._esys_155 *sys._esys_156\n"
+       "type sys._osys_768 {ary sys._esys_155}\n"
+       "type sys._isys_770 {nel sys.uint32 cap sys.uint32 width sys.uint32}\n"
+       "type sys._esys_153 (sys._esys_154 sys._osys_768 sys._isys_770)\n"
+       "var !sys.newarray sys._esys_153\n"
+       "type sys._esys_158 {}\n"
+       "type sys._esys_160 [] sys.any\n"
+       "type sys._esys_159 *sys._esys_160\n"
+       "type sys._osys_777 {ary sys._esys_159}\n"
+       "type sys._esys_162 [] sys.any\n"
+       "type sys._esys_161 *sys._esys_162\n"
+       "type sys._isys_779 {old sys._esys_161 lb sys.uint32 hb sys.uint32 width sys.uint32}\n"
+       "type sys._esys_157 (sys._esys_158 sys._osys_777 sys._isys_779)\n"
+       "var !sys.arraysliced sys._esys_157\n"
+       "type sys._esys_164 {}\n"
+       "type sys._esys_166 [] sys.any\n"
+       "type sys._esys_165 *sys._esys_166\n"
+       "type sys._osys_787 {ary sys._esys_165}\n"
+       "type sys._esys_167 *sys.any\n"
+       "type sys._isys_789 {old sys._esys_167 nel sys.uint32 lb sys.uint32 hb sys.uint32 width sys.uint32}\n"
+       "type sys._esys_163 (sys._esys_164 sys._osys_787 sys._isys_789)\n"
+       "var !sys.arrayslices sys._esys_163\n"
+       "type sys._esys_169 {}\n"
+       "type sys._esys_171 [] sys.any\n"
+       "type sys._esys_170 *sys._esys_171\n"
+       "type sys._osys_798 {ary sys._esys_170}\n"
+       "type sys._esys_172 *sys.any\n"
+       "type sys._isys_800 {old sys._esys_172 nel sys.uint32}\n"
+       "type sys._esys_168 (sys._esys_169 sys._osys_798 sys._isys_800)\n"
+       "var !sys.arrays2d sys._esys_168\n"
        "type sys._esys_174 {}\n"
        "type sys._esys_175 {}\n"
-       "type sys._esys_172 (sys._esys_173 sys._esys_174 sys._esys_175)\n"
-       "var !sys.gosched sys._esys_172\n"
-       "type sys._esys_177 {}\n"
+       "type sys._esys_176 {}\n"
+       "type sys._esys_173 (sys._esys_174 sys._esys_175 sys._esys_176)\n"
+       "var !sys.gosched sys._esys_173\n"
        "type sys._esys_178 {}\n"
        "type sys._esys_179 {}\n"
-       "type sys._esys_176 (sys._esys_177 sys._esys_178 sys._esys_179)\n"
-       "var !sys.goexit sys._esys_176\n"
-       "type sys._esys_181 {}\n"
-       "type sys._osys_809 {_esys_806 sys.string _esys_807 sys.bool}\n"
-       "type sys._isys_811 {_esys_808 sys.string}\n"
-       "type sys._esys_180 (sys._esys_181 sys._osys_809 sys._isys_811)\n"
-       "var !sys.readfile sys._esys_180\n"
-       "type sys._esys_183 {}\n"
-       "type sys._osys_818 {_esys_815 sys.bool}\n"
-       "type sys._isys_820 {_esys_816 sys.string _esys_817 sys.string}\n"
-       "type sys._esys_182 (sys._esys_183 sys._osys_818 sys._isys_820)\n"
-       "var !sys.writefile sys._esys_182\n"
-       "type sys._esys_185 {}\n"
-       "type sys._osys_830 {_esys_825 sys.int32 _esys_826 sys.int32}\n"
-       "type sys._esys_186 *sys.uint8\n"
-       "type sys._isys_832 {_esys_827 sys._esys_186 _esys_828 sys.int32 _esys_829 sys.int32}\n"
-       "type sys._esys_184 (sys._esys_185 sys._osys_830 sys._isys_832)\n"
-       "var !sys.bytestorune sys._esys_184\n"
-       "type sys._esys_188 {}\n"
-       "type sys._osys_843 {_esys_838 sys.int32 _esys_839 sys.int32}\n"
-       "type sys._isys_845 {_esys_840 sys.string _esys_841 sys.int32 _esys_842 sys.int32}\n"
-       "type sys._esys_187 (sys._esys_188 sys._osys_843 sys._isys_845)\n"
-       "var !sys.stringtorune sys._esys_187\n"
-       "type sys._esys_190 {}\n"
+       "type sys._esys_180 {}\n"
+       "type sys._esys_177 (sys._esys_178 sys._esys_179 sys._esys_180)\n"
+       "var !sys.goexit sys._esys_177\n"
+       "type sys._esys_182 {}\n"
+       "type sys._osys_811 {_esys_808 sys.string _esys_809 sys.bool}\n"
+       "type sys._isys_813 {_esys_810 sys.string}\n"
+       "type sys._esys_181 (sys._esys_182 sys._osys_811 sys._isys_813)\n"
+       "var !sys.readfile sys._esys_181\n"
+       "type sys._esys_184 {}\n"
+       "type sys._osys_820 {_esys_817 sys.bool}\n"
+       "type sys._isys_822 {_esys_818 sys.string _esys_819 sys.string}\n"
+       "type sys._esys_183 (sys._esys_184 sys._osys_820 sys._isys_822)\n"
+       "var !sys.writefile sys._esys_183\n"
+       "type sys._esys_186 {}\n"
+       "type sys._osys_832 {_esys_827 sys.int32 _esys_828 sys.int32}\n"
+       "type sys._esys_187 *sys.uint8\n"
+       "type sys._isys_834 {_esys_829 sys._esys_187 _esys_830 sys.int32 _esys_831 sys.int32}\n"
+       "type sys._esys_185 (sys._esys_186 sys._osys_832 sys._isys_834)\n"
+       "var !sys.bytestorune sys._esys_185\n"
+       "type sys._esys_189 {}\n"
+       "type sys._osys_845 {_esys_840 sys.int32 _esys_841 sys.int32}\n"
+       "type sys._isys_847 {_esys_842 sys.string _esys_843 sys.int32 _esys_844 sys.int32}\n"
+       "type sys._esys_188 (sys._esys_189 sys._osys_845 sys._isys_847)\n"
+       "var !sys.stringtorune sys._esys_188\n"
        "type sys._esys_191 {}\n"
-       "type sys._isys_851 {ms sys.int64}\n"
-       "type sys._esys_189 (sys._esys_190 sys._esys_191 sys._isys_851)\n"
-       "var !sys.sleep sys._esys_189\n"
-       "type sys._esys_193 {}\n"
+       "type sys._esys_192 {}\n"
+       "type sys._isys_853 {ms sys.int64}\n"
+       "type sys._esys_190 (sys._esys_191 sys._esys_192 sys._isys_853)\n"
+       "var !sys.sleep sys._esys_190\n"
        "type sys._esys_194 {}\n"
-       "type sys._isys_856 {_esys_855 sys.int32}\n"
-       "type sys._esys_192 (sys._esys_193 sys._esys_194 sys._isys_856)\n"
-       "var !sys.exit sys._esys_192\n"
-       "type sys._esys_196 {}\n"
+       "type sys._esys_195 {}\n"
+       "type sys._isys_858 {_esys_857 sys.int32}\n"
+       "type sys._esys_193 (sys._esys_194 sys._esys_195 sys._isys_858)\n"
+       "var !sys.exit sys._esys_193\n"
        "type sys._esys_197 {}\n"
        "type sys._esys_198 {}\n"
-       "type sys._esys_195 (sys._esys_196 sys._esys_197 sys._esys_198)\n"
+       "type sys._esys_199 {}\n"
+       "type sys._esys_196 (sys._esys_197 sys._esys_198 sys._esys_199)\n"
        "))\n"
 ;
index 006d287e88b6a7aad39d623ad4f04103eae27588..b4c018d6cdd0841c3007cd6032b95f2dd94d54c2 100644 (file)
@@ -552,6 +552,7 @@ loop:
                // interface and structure
                et = isandss(n->type, l);
                if(et != Inone) {
+if(et == I2I) dump("conv", n);
                        indir(n, ifaceop(n->type, l, et));
                        goto ret;
                }
@@ -1626,14 +1627,19 @@ loop:
        default:
                if(l->type == T)
                        goto out;
-               if(!isptr[l->type->etype]) {
-                       badtype(n->op, l->type, T);
-                       l = listnext(&save);
-                       goto loop;
+               if(isinter(l->type)) {
+                       on = syslook("printinter", 1);
+                       argtype(on, l->type);           // any-1
+                       break;
                }
-               on = syslook("printpointer", 1);
-               argtype(on, l->type->type);     // any-1
-               break;
+               if(isptr[l->type->etype]) {
+                       on = syslook("printpointer", 1);
+                       argtype(on, l->type->type);     // any-1
+                       break;
+               }
+               badtype(n->op, l->type, T);
+               l = listnext(&save);
+               goto loop;
 
        case Wlitint:
        case Wtint:
@@ -2490,7 +2496,7 @@ ifaceop(Type *tl, Node *n, int op)
                fatal("ifaceop: unknown op %d\n", op);
 
        case I2T:
-               // ifaceI2T(sigt *byte, iface interface{}) (ret any);
+               // ifaceI2T(sigt *byte, iface any) (ret any);
 
                a = n;                          // interface
                r = a;
@@ -2503,12 +2509,13 @@ ifaceop(Type *tl, Node *n, int op)
                r = list(a, r);
 
                on = syslook("ifaceI2T", 1);
+               argtype(on, tr);
                argtype(on, tl);
 
                break;
 
        case T2I:
-               // ifaceT2I(sigi *byte, sigt *byte, elem any) (ret interface{});
+               // ifaceT2I(sigi *byte, sigt *byte, elem any) (ret any);
 
                a = n;                          // elem
                r = a;
@@ -2530,6 +2537,7 @@ ifaceop(Type *tl, Node *n, int op)
 
                on = syslook("ifaceT2I", 1);
                argtype(on, tr);
+               argtype(on, tl);
 
                break;
 
@@ -2538,16 +2546,17 @@ ifaceop(Type *tl, Node *n, int op)
 
                a = n;                          // interface
                r = a;
-               s = signame(tr);                // sigi
+
+               s = signame(tl);                // sigi
                if(s == S)
                        fatal("ifaceop: signame I2I");
                a = s->oname;
                a = nod(OADDR, a, N);
                r = list(a, r);
+
                on = syslook("ifaceI2I", 1);
-               argtype(on, n->type);
                argtype(on, tr);
-
+               argtype(on, tl);
                break;
        }
 
index c4d1014e30234ff3bfe81531e19eca5d62284fe1..b8e980fc481456a0eb9b6a4bcf49762b9586808f 100644 (file)
@@ -4,6 +4,8 @@
 
 #include "runtime.h"
 
+static int32   debug   = 0;
+
 typedef        struct  Sigt    Sigt;
 typedef        struct  Sigi    Sigi;
 typedef        struct  Map     Map;
@@ -33,19 +35,79 @@ struct      Map
 };
 
 static Map*    hash[1009];
-static int32   debug   = 0;
+
+static void
+printsigi(Sigi *si)
+{
+       int32 i, n;
+       byte *name;
+
+       sys·printpointer(si);
+       prints("{");
+       n = si[0].offset;
+       for(i=1; i<n; i++) {
+               name = si[i].name;
+               if(name == nil) {
+                       prints("<nil>");
+                       break;
+               }
+               prints("[");
+               sys·printint(i);
+               prints("]\"");
+               prints((int8*)name);
+               prints("\"");
+               sys·printint(si[i].hash);
+               prints("/");
+               sys·printint(si[i].offset);
+       }
+       prints("}");
+}
+
+static void
+printsigt(Sigt *st)
+{
+       int32 i;
+       byte *name;
+
+       sys·printpointer(st);
+       prints("{");
+       for(i=0;; i++) {
+               name = st[i].name;
+               if(name == nil)
+                       break;
+               prints("[");
+               sys·printint(i);
+               prints("]\"");
+               prints((int8*)name);
+               prints("\"");
+               sys·printint(st[i].hash);
+               prints("/");
+               sys·printpointer(st[i].fun);
+       }
+       prints("}");
+}
+
+static void
+printiface(Map *im, void *it)
+{
+       prints("(");
+       sys·printpointer(im);
+       prints(",");
+       sys·printpointer(it);
+       prints(")");
+}
 
 static Map*
-hashmap(Sigi *si, Sigt *ss)
+hashmap(Sigi *si, Sigt *st)
 {
-       int32 ns, ni;
+       int32 nt, ni;
        uint32 ihash, h;
        byte *sname, *iname;
        Map *m;
 
-       h = ((uint32)(uint64)si + (uint32)(uint64)ss) % nelem(hash);
+       h = ((uint32)(uint64)si + (uint32)(uint64)st) % nelem(hash);
        for(m=hash[h]; m!=nil; m=m->link) {
-               if(m->sigi == si && m->sigt == ss) {
+               if(m->sigi == si && m->sigt == st) {
                        if(m->bad) {
                                throw("bad hashmap");
                                m = nil;
@@ -58,10 +120,10 @@ hashmap(Sigi *si, Sigt *ss)
        ni = si[0].offset;      // first word has size
        m = mal(sizeof(*m) + ni*sizeof(m->fun[0]));
        m->sigi = si;
-       m->sigt = ss;
+       m->sigt = st;
 
        ni = 1;                 // skip first word
-       ns = 0;
+       nt = 0;
 
 loop1:
        // pick up next name from
@@ -78,7 +140,7 @@ loop1:
 loop2:
        // pick up and comapre next name
        // from structure signature
-       sname = ss[ns].name;
+       sname = st[nt].name;
        if(sname == nil) {
                prints((int8*)iname);
                prints(": ");
@@ -89,40 +151,18 @@ loop2:
                return nil;
        }
 
-       if(ihash != ss[ns].hash ||
+       if(ihash != st[nt].hash ||
           strcmp(sname, iname) != 0) {
-               ns++;
+               nt++;
                goto loop2;
        }
 
-       m->fun[si[ni].offset] = ss[ns].fun;
+       m->fun[si[ni].offset] = st[nt].fun;
        ni++;
        goto loop1;
 }
 
-static void
-printsigi(Sigi *si)
-{
-       sys·printpointer(si);
-}
-
-static void
-printsigt(Sigt *st)
-{
-       sys·printpointer(st);
-}
-
-static void
-printiface(Map *im, void *it)
-{
-       prints("(");
-       sys·printpointer(im);
-       prints(",");
-       sys·printpointer(it);
-       prints(")");
-}
-
-// ifaceT2I(sigi *byte, sigt *byte, elem any) (ret interface{});
+// ifaceT2I(sigi *byte, sigt *byte, elem any) (ret any);
 void
 sys·ifaceT2I(Sigi *si, Sigt *st, void *elem, Map *retim, void *retit)
 {
@@ -149,7 +189,7 @@ sys·ifaceT2I(Sigi *si, Sigt *st, void *elem, Map *retim, void *retit)
        FLUSH(&retim);
 }
 
-// ifaceI2T(sigt *byte, iface interface{}) (ret any);
+// ifaceI2T(sigt *byte, iface any) (ret any);
 void
 sys·ifaceI2T(Sigt *st, Map *im, void *it, void *ret)
 {
@@ -178,14 +218,14 @@ sys·ifaceI2T(Sigt *st, Map *im, void *it, void *ret)
        FLUSH(&ret);
 }
 
-// ifaceI2I(sigi *byte, iface interface{}) (ret interface{});
+// ifaceI2I(sigi *byte, iface any) (ret any);
 void
 sys·ifaceI2I(Sigi *si, Map *im, void *it, Map *retim, void *retit)
 {
 
        if(debug) {
                prints("I2I sigi=");
-               sys·printpointer(si);
+               printsigi(si);
                prints(" iface=");
                printiface(im, it);
                prints("\n");
@@ -209,3 +249,9 @@ sys·ifaceI2I(Sigi *si, Map *im, void *it, Map *retim, void *retit)
 
        FLUSH(&retim);
 }
+
+void
+sys·printinter(Map *im, void *it)
+{
+       printiface(im, it);
+}