1
0
mirror of https://github.com/golang/go synced 2024-11-22 05:24:39 -07:00

change string([]byte) to pass array, rather than &a[0],

to string convert.  if the byte array has length 0,
the computation of &a[0] throws an index bounds error.

for fixed size arrays, this ends up invoking arrays2d
unnecessarily, but it works.

R=ken
DELTA=304  (44 added, 28 deleted, 232 changed)
OCL=15674
CL=15678
This commit is contained in:
Russ Cox 2008-09-22 20:12:15 -07:00
parent c13c03c261
commit 5383e28ea0
5 changed files with 276 additions and 260 deletions

View File

@ -24,6 +24,7 @@ func slicestring(string, int32, int32) string;
func indexstring(string, int32) byte;
func intstring(int64) string;
func byteastring(*byte, int32) string;
func arraystring(*[]byte) string;
func ifaceT2I(sigi *byte, sigt *byte, elem any) (ret any);
func ifaceI2T(sigt *byte, iface any) (ret any);
@ -100,6 +101,7 @@ export
indexstring
intstring
byteastring
arraystring
// interface
ifaceT2I

View 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_442 {_esys_440 sys._esys_003}\n"
"type sys._osys_429 {_esys_427 sys._esys_003}\n"
"type sys.uint32 6\n"
"type sys._isys_444 {_esys_441 sys.uint32}\n"
"type sys._esys_001 (sys._esys_002 sys._osys_442 sys._isys_444)\n"
"type sys._isys_431 {_esys_428 sys.uint32}\n"
"type sys._esys_001 (sys._esys_002 sys._osys_429 sys._isys_431)\n"
"var !sys.mal sys._esys_001\n"
"type sys._esys_005 {}\n"
"type sys._esys_006 {}\n"
@ -26,334 +26,341 @@ char* sysimport =
"type sys._esys_017 {}\n"
"type sys._esys_018 {}\n"
"type sys.int32 5\n"
"type sys._isys_452 {_esys_451 sys.int32}\n"
"type sys._esys_016 (sys._esys_017 sys._esys_018 sys._isys_452)\n"
"type sys._isys_439 {_esys_438 sys.int32}\n"
"type sys._esys_016 (sys._esys_017 sys._esys_018 sys._isys_439)\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_457 {_esys_456 sys.bool}\n"
"type sys._esys_019 (sys._esys_020 sys._esys_021 sys._isys_457)\n"
"type sys._isys_444 {_esys_443 sys.bool}\n"
"type sys._esys_019 (sys._esys_020 sys._esys_021 sys._isys_444)\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_462 {_esys_461 sys.float64}\n"
"type sys._esys_022 (sys._esys_023 sys._esys_024 sys._isys_462)\n"
"type sys._isys_449 {_esys_448 sys.float64}\n"
"type sys._esys_022 (sys._esys_023 sys._esys_024 sys._isys_449)\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_467 {_esys_466 sys.int64}\n"
"type sys._esys_025 (sys._esys_026 sys._esys_027 sys._isys_467)\n"
"type sys._isys_454 {_esys_453 sys.int64}\n"
"type sys._esys_025 (sys._esys_026 sys._esys_027 sys._isys_454)\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_472 {_esys_471 sys.string}\n"
"type sys._esys_028 (sys._esys_029 sys._esys_030 sys._isys_472)\n"
"type sys._isys_459 {_esys_458 sys.string}\n"
"type sys._esys_028 (sys._esys_029 sys._esys_030 sys._isys_459)\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_477 {_esys_476 sys._esys_035}\n"
"type sys._esys_032 (sys._esys_033 sys._esys_034 sys._isys_477)\n"
"type sys._isys_464 {_esys_463 sys._esys_035}\n"
"type sys._esys_032 (sys._esys_033 sys._esys_034 sys._isys_464)\n"
"var !sys.printpointer sys._esys_032\n"
"type sys._esys_037 {}\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"
"type sys._isys_469 {_esys_468 sys.any}\n"
"type sys._esys_036 (sys._esys_037 sys._esys_038 sys._isys_469)\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"
"type sys._osys_476 {_esys_473 sys.string}\n"
"type sys._isys_478 {_esys_474 sys.string _esys_475 sys.string}\n"
"type sys._esys_039 (sys._esys_040 sys._osys_476 sys._isys_478)\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"
"type sys._osys_486 {_esys_483 sys.int32}\n"
"type sys._isys_488 {_esys_484 sys.string _esys_485 sys.string}\n"
"type sys._esys_041 (sys._esys_042 sys._osys_486 sys._isys_488)\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"
"type sys._osys_497 {_esys_493 sys.string}\n"
"type sys._isys_499 {_esys_494 sys.string _esys_495 sys.int32 _esys_496 sys.int32}\n"
"type sys._esys_043 (sys._esys_044 sys._osys_497 sys._isys_499)\n"
"var !sys.slicestring sys._esys_043\n"
"type sys._esys_046 {}\n"
"type sys.uint8 2\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"
"type sys._osys_508 {_esys_505 sys.uint8}\n"
"type sys._isys_510 {_esys_506 sys.string _esys_507 sys.int32}\n"
"type sys._esys_045 (sys._esys_046 sys._osys_508 sys._isys_510)\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"
"type sys._osys_517 {_esys_515 sys.string}\n"
"type sys._isys_519 {_esys_516 sys.int64}\n"
"type sys._esys_047 (sys._esys_048 sys._osys_517 sys._isys_519)\n"
"var !sys.intstring sys._esys_047\n"
"type sys._esys_050 {}\n"
"type sys._osys_539 {_esys_536 sys.string}\n"
"type sys._osys_526 {_esys_523 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"
"type sys._isys_528 {_esys_524 sys._esys_051 _esys_525 sys.int32}\n"
"type sys._esys_049 (sys._esys_050 sys._osys_526 sys._isys_528)\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._osys_535 {_esys_533 sys.string}\n"
"type sys._esys_055 [] sys.uint8\n"
"type sys._esys_054 *sys._esys_055\n"
"type sys._isys_537 {_esys_534 sys._esys_054}\n"
"type sys._esys_052 (sys._esys_053 sys._osys_535 sys._isys_537)\n"
"var !sys.arraystring sys._esys_052\n"
"type sys._esys_057 {}\n"
"type sys._osys_555 {ret sys.any}\n"
"type sys._osys_541 {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._osys_572 {_esys_571 sys.int32}\n"
"type sys._esys_059 *sys.uint8\n"
"type sys._isys_543 {sigi sys._esys_058 sigt sys._esys_059 elem sys.any}\n"
"type sys._esys_056 (sys._esys_057 sys._osys_541 sys._isys_543)\n"
"var !sys.ifaceT2I sys._esys_056\n"
"type sys._esys_061 {}\n"
"type sys._osys_550 {ret sys.any}\n"
"type sys._esys_062 *sys.uint8\n"
"type sys._isys_552 {sigt sys._esys_062 iface sys.any}\n"
"type sys._esys_060 (sys._esys_061 sys._osys_550 sys._isys_552)\n"
"var !sys.ifaceI2T sys._esys_060\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._osys_576 {_esys_575 sys.int32}\n"
"type sys._osys_558 {ret sys.any}\n"
"type sys._esys_065 *sys.uint8\n"
"type sys._isys_560 {sigi sys._esys_065 iface sys.any}\n"
"type sys._esys_063 (sys._esys_064 sys._osys_558 sys._isys_560)\n"
"var !sys.ifaceI2I sys._esys_063\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._osys_567 {_esys_566 sys.int32}\n"
"type sys._esys_068 {}\n"
"type sys._esys_066 (sys._esys_067 sys._osys_567 sys._esys_068)\n"
"var !sys.argc sys._esys_066\n"
"type sys._esys_070 {}\n"
"type sys._osys_571 {_esys_570 sys.int32}\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_069 (sys._esys_070 sys._osys_571 sys._esys_071)\n"
"var !sys.envc sys._esys_069\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._osys_576 {_esys_574 sys.string}\n"
"type sys._isys_578 {_esys_575 sys.int32}\n"
"type sys._esys_072 (sys._esys_073 sys._osys_576 sys._isys_578)\n"
"var !sys.argv 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._osys_584 {_esys_582 sys.string}\n"
"type sys._isys_586 {_esys_583 sys.int32}\n"
"type sys._esys_074 (sys._esys_075 sys._osys_584 sys._isys_586)\n"
"var !sys.envv 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._osys_593 {_esys_590 sys.float64 _esys_591 sys.int32}\n"
"type sys._isys_595 {_esys_592 sys.float64}\n"
"type sys._esys_076 (sys._esys_077 sys._osys_593 sys._isys_595)\n"
"var !sys.frexp 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._osys_602 {_esys_599 sys.float64}\n"
"type sys._isys_604 {_esys_600 sys.float64 _esys_601 sys.int32}\n"
"type sys._esys_078 (sys._esys_079 sys._osys_602 sys._isys_604)\n"
"var !sys.ldexp 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._osys_612 {_esys_609 sys.float64 _esys_610 sys.float64}\n"
"type sys._isys_614 {_esys_611 sys.float64}\n"
"type sys._esys_080 (sys._esys_081 sys._osys_612 sys._isys_614)\n"
"var !sys.modf 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._osys_621 {_esys_618 sys.bool}\n"
"type sys._isys_623 {_esys_619 sys.float64 _esys_620 sys.int32}\n"
"type sys._esys_082 (sys._esys_083 sys._osys_621 sys._isys_623)\n"
"var !sys.isInf sys._esys_082\n"
"type sys._esys_085 {}\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._osys_630 {_esys_628 sys.bool}\n"
"type sys._isys_632 {_esys_629 sys.float64}\n"
"type sys._esys_084 (sys._esys_085 sys._osys_630 sys._isys_632)\n"
"var !sys.isNaN sys._esys_084\n"
"type sys._esys_087 {}\n"
"type sys._osys_638 {_esys_636 sys.float64}\n"
"type sys._isys_640 {_esys_637 sys.int32}\n"
"type sys._esys_086 (sys._esys_087 sys._osys_638 sys._isys_640)\n"
"var !sys.Inf sys._esys_086\n"
"type sys._esys_089 {}\n"
"type sys._osys_645 {_esys_644 sys.float64}\n"
"type sys._esys_090 {}\n"
"type sys._esys_088 (sys._esys_089 sys._osys_645 sys._esys_090)\n"
"var !sys.NaN sys._esys_088\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._osys_648 {hmap sys._esys_093}\n"
"type sys._isys_650 {keysize sys.uint32 valsize sys.uint32 keyalg sys.uint32 valalg sys.uint32 hint sys.uint32}\n"
"type sys._esys_091 (sys._esys_092 sys._osys_648 sys._isys_650)\n"
"var !sys.newmap sys._esys_091\n"
"type sys._esys_096 {}\n"
"type sys._osys_672 {val sys.any pres sys.bool}\n"
"type sys._osys_659 {val sys.any}\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._isys_661 {hmap sys._esys_097 key sys.any}\n"
"type sys._esys_095 (sys._esys_096 sys._osys_659 sys._isys_661)\n"
"var !sys.mapaccess1 sys._esys_095\n"
"type sys._esys_100 {}\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._osys_667 {val sys.any pres sys.bool}\n"
"type sys._esys_102 [sys.any] sys.any\n"
"type sys._esys_101 *sys._esys_102\n"
"type sys._isys_669 {hmap sys._esys_101 key sys.any}\n"
"type sys._esys_099 (sys._esys_100 sys._osys_667 sys._isys_669)\n"
"var !sys.mapaccess2 sys._esys_099\n"
"type sys._esys_104 {}\n"
"type sys._esys_105 {}\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_107 [sys.any] sys.any\n"
"type sys._esys_106 *sys._esys_107\n"
"type sys._isys_676 {hmap sys._esys_106 key sys.any val sys.any}\n"
"type sys._esys_103 (sys._esys_104 sys._esys_105 sys._isys_676)\n"
"var !sys.mapassign1 sys._esys_103\n"
"type sys._esys_109 {}\n"
"type sys._esys_110 {}\n"
"type sys._esys_112 1 sys.any\n"
"type sys._esys_112 [sys.any] 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._isys_682 {hmap sys._esys_111 key sys.any val sys.any pres sys.bool}\n"
"type sys._esys_108 (sys._esys_109 sys._esys_110 sys._isys_682)\n"
"var !sys.mapassign2 sys._esys_108\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._osys_689 {hchan sys._esys_115}\n"
"type sys._isys_691 {elemsize sys.uint32 elemalg sys.uint32 hint sys.uint32}\n"
"type sys._esys_113 (sys._esys_114 sys._osys_689 sys._isys_691)\n"
"var !sys.newchan sys._esys_113\n"
"type sys._esys_118 {}\n"
"type sys._osys_710 {elem sys.any pres sys.bool}\n"
"type sys._osys_698 {elem sys.any}\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._isys_700 {hchan sys._esys_119}\n"
"type sys._esys_117 (sys._esys_118 sys._osys_698 sys._isys_700)\n"
"var !sys.chanrecv1 sys._esys_117\n"
"type sys._esys_122 {}\n"
"type sys._osys_718 {pres sys.bool}\n"
"type sys._osys_705 {elem sys.any 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_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._isys_707 {hchan sys._esys_123}\n"
"type sys._esys_121 (sys._esys_122 sys._osys_705 sys._isys_707)\n"
"var !sys.chanrecv2 sys._esys_121\n"
"type sys._esys_126 {}\n"
"type sys._osys_713 {pres sys.bool}\n"
"type sys._esys_128 1 sys.any\n"
"type sys._esys_127 *sys._esys_128\n"
"type sys._esys_129 *sys.any\n"
"type sys._isys_715 {hchan sys._esys_127 elem sys._esys_129}\n"
"type sys._esys_125 (sys._esys_126 sys._osys_713 sys._isys_715)\n"
"var !sys.chanrecv3 sys._esys_125\n"
"type sys._esys_131 {}\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._isys_721 {hchan sys._esys_133 elem sys.any}\n"
"type sys._esys_130 (sys._esys_131 sys._esys_132 sys._isys_721)\n"
"var !sys.chansend1 sys._esys_130\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 {}\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._osys_726 {pres sys.bool}\n"
"type sys._esys_138 1 sys.any\n"
"type sys._esys_137 *sys._esys_138\n"
"type sys._isys_728 {hchan sys._esys_137 elem sys.any}\n"
"type sys._esys_135 (sys._esys_136 sys._osys_726 sys._isys_728)\n"
"var !sys.chansend2 sys._esys_135\n"
"type sys._esys_140 {}\n"
"type sys._esys_141 *sys.uint8\n"
"type sys._osys_734 {sel sys._esys_141}\n"
"type sys._isys_736 {size sys.uint32}\n"
"type sys._esys_139 (sys._esys_140 sys._osys_734 sys._isys_736)\n"
"var !sys.newselect sys._esys_139\n"
"type sys._esys_143 {}\n"
"type sys._osys_741 {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._isys_743 {sel sys._esys_144 hchan sys._esys_145 elem sys.any}\n"
"type sys._esys_142 (sys._esys_143 sys._osys_741 sys._isys_743)\n"
"var !sys.selectsend sys._esys_142\n"
"type sys._esys_148 {}\n"
"type sys._osys_750 {selected sys.bool}\n"
"type sys._esys_149 *sys.uint8\n"
"type sys._esys_151 1 sys.any\n"
"type sys._esys_150 *sys._esys_151\n"
"type sys._esys_152 *sys.any\n"
"type sys._isys_752 {sel sys._esys_149 hchan sys._esys_150 elem sys._esys_152}\n"
"type sys._esys_147 (sys._esys_148 sys._osys_750 sys._isys_752)\n"
"var !sys.selectrecv sys._esys_147\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_155 {}\n"
"type sys._esys_156 *sys.uint8\n"
"type sys._isys_759 {sel sys._esys_156}\n"
"type sys._esys_153 (sys._esys_154 sys._esys_155 sys._isys_759)\n"
"var !sys.selectgo 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._osys_763 {ary sys._esys_159}\n"
"type sys._isys_765 {nel sys.uint32 cap sys.uint32 width sys.uint32}\n"
"type sys._esys_157 (sys._esys_158 sys._osys_763 sys._isys_765)\n"
"var !sys.newarray sys._esys_157\n"
"type sys._esys_162 {}\n"
"type sys._esys_164 [] sys.any\n"
"type sys._esys_163 *sys._esys_164\n"
"type sys._osys_772 {ary sys._esys_163}\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_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._isys_774 {old sys._esys_165 lb sys.uint32 hb sys.uint32 width sys.uint32}\n"
"type sys._esys_161 (sys._esys_162 sys._osys_772 sys._isys_774)\n"
"var !sys.arraysliced sys._esys_161\n"
"type sys._esys_168 {}\n"
"type sys._esys_170 [] sys.any\n"
"type sys._esys_169 *sys._esys_170\n"
"type sys._osys_782 {ary sys._esys_169}\n"
"type sys._esys_171 *sys.any\n"
"type sys._isys_784 {old sys._esys_171 nel sys.uint32 lb sys.uint32 hb sys.uint32 width sys.uint32}\n"
"type sys._esys_167 (sys._esys_168 sys._osys_782 sys._isys_784)\n"
"var !sys.arrayslices sys._esys_167\n"
"type sys._esys_173 {}\n"
"type sys._esys_175 [] sys.any\n"
"type sys._esys_174 *sys._esys_175\n"
"type sys._osys_793 {ary sys._esys_174}\n"
"type sys._esys_176 *sys.any\n"
"type sys._isys_795 {old sys._esys_176 nel sys.uint32}\n"
"type sys._esys_172 (sys._esys_173 sys._osys_793 sys._isys_795)\n"
"var !sys.arrays2d sys._esys_172\n"
"type sys._esys_178 {}\n"
"type sys._esys_179 {}\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"
"var !sys.gosched 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_183 {}\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_181 (sys._esys_182 sys._esys_183 sys._esys_184)\n"
"var !sys.goexit sys._esys_181\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._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._osys_806 {_esys_803 sys.string _esys_804 sys.bool}\n"
"type sys._isys_808 {_esys_805 sys.string}\n"
"type sys._esys_185 (sys._esys_186 sys._osys_806 sys._isys_808)\n"
"var !sys.readfile sys._esys_185\n"
"type sys._esys_188 {}\n"
"type sys._osys_815 {_esys_812 sys.bool}\n"
"type sys._isys_817 {_esys_813 sys.string _esys_814 sys.string}\n"
"type sys._esys_187 (sys._esys_188 sys._osys_815 sys._isys_817)\n"
"var !sys.writefile sys._esys_187\n"
"type sys._esys_190 {}\n"
"type sys._osys_827 {_esys_822 sys.int32 _esys_823 sys.int32}\n"
"type sys._esys_191 *sys.uint8\n"
"type sys._isys_829 {_esys_824 sys._esys_191 _esys_825 sys.int32 _esys_826 sys.int32}\n"
"type sys._esys_189 (sys._esys_190 sys._osys_827 sys._isys_829)\n"
"var !sys.bytestorune sys._esys_189\n"
"type sys._esys_193 {}\n"
"type sys._osys_840 {_esys_835 sys.int32 _esys_836 sys.int32}\n"
"type sys._isys_842 {_esys_837 sys.string _esys_838 sys.int32 _esys_839 sys.int32}\n"
"type sys._esys_192 (sys._esys_193 sys._osys_840 sys._isys_842)\n"
"var !sys.stringtorune sys._esys_192\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_196 {}\n"
"type sys._isys_848 {ms sys.int64}\n"
"type sys._esys_194 (sys._esys_195 sys._esys_196 sys._isys_848)\n"
"var !sys.sleep sys._esys_194\n"
"type sys._esys_198 {}\n"
"type sys._esys_199 {}\n"
"type sys._esys_196 (sys._esys_197 sys._esys_198 sys._esys_199)\n"
"type sys._isys_853 {_esys_852 sys.int32}\n"
"type sys._esys_197 (sys._esys_198 sys._esys_199 sys._isys_853)\n"
"var !sys.exit sys._esys_197\n"
"type sys._esys_201 {}\n"
"type sys._esys_202 {}\n"
"type sys._esys_203 {}\n"
"type sys._esys_200 (sys._esys_201 sys._esys_202 sys._esys_203)\n"
"))\n"
;

View File

@ -1824,25 +1824,11 @@ stringop(Node *n, int top)
break;
case OARRAY:
// byteastring(*byte, int32) string;
t = n->left->type;
l = bytearraysz(t);
// &a[0]
c = nodintconst(0);
r = nod(OINDEX, n->left, c);
r = nod(OADDR, r, N);
if(l >= 0) {
// static size
c = nodintconst(l);
} else {
// dynamic size
c = nod(OLEN, n->left, N);
}
r = list(r, c);
on = syslook("byteastring", 0);
// arraystring(*[]byte) string;
r = n->left;
if(!isptr[r->type->etype])
r = nod(OADDR, r, N);
on = syslook("arraystring", 0);
r = nod(OCALL, on, r);
break;
}

View File

@ -164,3 +164,12 @@ sys·byteastring(byte *a, int32 l, string s)
mcpy(s->str, a, l);
FLUSH(&s);
}
void
sys·arraystring(Array *b, string s)
{
s = mal(sizeof(s->len)+b->nel);
s->len = b->nel;
mcpy(s->str, b->array, s->len);
FLUSH(&s);
}

View File

@ -9,5 +9,17 @@ package main
func main() {
var b [0]byte;
s := string(b); // out of bounds trap
if s != "" {
panic("bad convert")
}
var b1 = [5]byte{'h', 'e', 'l', 'l', 'o'};
if string(b1) != "hello" {
panic("bad convert 1")
}
var b2 = new([]byte, 5)
for i := 0; i < 5; i++ { b2[i] = b1[i] }
if string(b2) != "hello" {
panic("bad convert 2")
}
}