From f21e731c7112ab4d4de150fdd2fbea639eb4b810 Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Thu, 2 Oct 2008 14:38:07 -0700 Subject: [PATCH] added printn and panicn prints that insert spaces and new line R=r OCL=16370 CL=16370 --- src/cmd/gc/go.h | 4 +- src/cmd/gc/go.y | 12 +- src/cmd/gc/lex.c | 2 + src/cmd/gc/subr.c | 2 + src/cmd/gc/sys.go | 4 + src/cmd/gc/sysimport.c | 562 +++++++++++++++++++++-------------------- src/cmd/gc/walk.c | 40 ++- src/runtime/print.c | 12 + 8 files changed, 351 insertions(+), 287 deletions(-) diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index 073001e607..d38c8cb38f 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -269,7 +269,7 @@ enum ORETURN, OFOR, OIF, OSWITCH, OAS, OASOP, OCASE, OXCASE, OFALL, OXFALL, OGOTO, OPROC, ONEW, OEMPTY, OSELECT, - OLEN, OCAP, OPANIC, OPRINT, OTYPEOF, + OLEN, OCAP, OPANIC, OPANICN, OPRINT, OPRINTN, OTYPEOF, OOROR, OANDAND, @@ -695,7 +695,7 @@ Node* ascompatee(int, Node**, Node**); Node* ascompatet(int, Node**, Type**, int); Node* ascompatte(int, Type**, Node**, int); int ascompat(Type*, Type*); -Node* prcompat(Node*); +Node* prcompat(Node*, int); Node* nodpanic(int32); Node* newcompat(Node*); Node* stringop(Node*, int); diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index e4bcee30b7..46b01e3a43 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -18,7 +18,7 @@ %token LPACKAGE LIMPORT LEXPORT %token LMAP LCHAN LINTERFACE LFUNC LSTRUCT %token LCOLAS LFALL LRETURN -%token LNEW LLEN LCAP LTYPEOF LPANIC LPRINT +%token LNEW LLEN LCAP LTYPEOF LPANIC LPANICN LPRINT LPRINTN %token LVAR LTYPE LCONST LCONVERT LSELECT %token LFOR LIF LELSE LSWITCH LCASE LDEFAULT %token LBREAK LCONTINUE LGO LGOTO LRANGE @@ -361,10 +361,18 @@ noninc_stmt: { $$ = nod(OPRINT, $3, N); } +| LPRINTN '(' oexpr_list ')' + { + $$ = nod(OPRINTN, $3, N); + } | LPANIC '(' oexpr_list ')' { $$ = nod(OPANIC, $3, N); } +| LPANICN '(' oexpr_list ')' + { + $$ = nod(OPANICN, $3, N); + } inc_stmt: expr LINC @@ -896,7 +904,9 @@ keyword: | LLEN | LCAP | LPANIC +| LPANICN | LPRINT +| LPRINTN | LNEW | LBASETYPE | LTYPEOF diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index dce5c1453a..707b61aa15 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -998,7 +998,9 @@ static struct "nil", LNIL, Txxx, "package", LPACKAGE, Txxx, "panic", LPANIC, Txxx, + "panicn", LPANICN, Txxx, "print", LPRINT, Txxx, + "printn", LPRINTN, Txxx, "range", LRANGE, Txxx, "return", LRETURN, Txxx, "select", LSELECT, Txxx, diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c index f659c17c2e..4514f39140 100644 --- a/src/cmd/gc/subr.c +++ b/src/cmd/gc/subr.c @@ -693,7 +693,9 @@ opnames[] = [OFALL] = "FALL", [OXFALL] = "XFALL", [OPANIC] = "PANIC", + [OPANICN] = "PANICN", [OPRINT] = "PRINT", + [OPRINTN] = "PRINTN", [OXXX] = "XXX", }; diff --git a/src/cmd/gc/sys.go b/src/cmd/gc/sys.go index a969ace605..abc62886ec 100644 --- a/src/cmd/gc/sys.go +++ b/src/cmd/gc/sys.go @@ -17,6 +17,8 @@ func printint(int64); func printstring(string); func printpointer(*any); func printinter(any); +func printnl(); +func printsp(); func catstring(string, string) string; func cmpstring(string, string) int32; @@ -92,6 +94,8 @@ export printstring printpointer printinter + printnl + printsp // op string catstring diff --git a/src/cmd/gc/sysimport.c b/src/cmd/gc/sysimport.c index ab124460d9..b49e6ba278 100644 --- a/src/cmd/gc/sysimport.c +++ b/src/cmd/gc/sysimport.c @@ -2,10 +2,10 @@ char* sysimport = "package sys\n" "type sys._esys_002 {}\n" "type sys._esys_003 *sys.any\n" - "type sys._osys_457 {_esys_455 sys._esys_003}\n" + "type sys._osys_461 {_esys_459 sys._esys_003}\n" "type sys.uint32 6\n" - "type sys._isys_459 {_esys_456 sys.uint32}\n" - "type sys._esys_001 (sys._esys_002 sys._osys_457 sys._isys_459)\n" + "type sys._isys_463 {_esys_460 sys.uint32}\n" + "type sys._esys_001 (sys._esys_002 sys._osys_461 sys._isys_463)\n" "var !sys.mal sys._esys_001\n" "type sys._esys_005 {}\n" "type sys._esys_006 {}\n" @@ -25,337 +25,347 @@ char* sysimport = "type sys._esys_017 {}\n" "type sys._esys_018 {}\n" "type sys.int32 5\n" - "type sys._isys_467 {_esys_466 sys.int32}\n" - "type sys._esys_016 (sys._esys_017 sys._esys_018 sys._isys_467)\n" + "type sys._isys_471 {_esys_470 sys.int32}\n" + "type sys._esys_016 (sys._esys_017 sys._esys_018 sys._isys_471)\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_472 {_esys_471 sys.bool}\n" - "type sys._esys_019 (sys._esys_020 sys._esys_021 sys._isys_472)\n" + "type sys._isys_476 {_esys_475 sys.bool}\n" + "type sys._esys_019 (sys._esys_020 sys._esys_021 sys._isys_476)\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_477 {_esys_476 sys.float64}\n" - "type sys._esys_022 (sys._esys_023 sys._esys_024 sys._isys_477)\n" + "type sys._isys_481 {_esys_480 sys.float64}\n" + "type sys._esys_022 (sys._esys_023 sys._esys_024 sys._isys_481)\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_482 {_esys_481 sys.int64}\n" - "type sys._esys_025 (sys._esys_026 sys._esys_027 sys._isys_482)\n" + "type sys._isys_486 {_esys_485 sys.int64}\n" + "type sys._esys_025 (sys._esys_026 sys._esys_027 sys._isys_486)\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_487 {_esys_486 sys.string}\n" - "type sys._esys_028 (sys._esys_029 sys._esys_030 sys._isys_487)\n" + "type sys._isys_491 {_esys_490 sys.string}\n" + "type sys._esys_028 (sys._esys_029 sys._esys_030 sys._isys_491)\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_492 {_esys_491 sys._esys_035}\n" - "type sys._esys_032 (sys._esys_033 sys._esys_034 sys._isys_492)\n" + "type sys._isys_496 {_esys_495 sys._esys_035}\n" + "type sys._esys_032 (sys._esys_033 sys._esys_034 sys._isys_496)\n" "var !sys.printpointer sys._esys_032\n" "type sys._esys_037 {}\n" "type sys._esys_038 {}\n" "type sys.any 24\n" - "type sys._isys_497 {_esys_496 sys.any}\n" - "type sys._esys_036 (sys._esys_037 sys._esys_038 sys._isys_497)\n" + "type sys._isys_501 {_esys_500 sys.any}\n" + "type sys._esys_036 (sys._esys_037 sys._esys_038 sys._isys_501)\n" "var !sys.printinter sys._esys_036\n" "type sys._esys_040 {}\n" - "type sys._osys_504 {_esys_501 sys.string}\n" - "type sys._isys_506 {_esys_502 sys.string _esys_503 sys.string}\n" - "type sys._esys_039 (sys._esys_040 sys._osys_504 sys._isys_506)\n" - "var !sys.catstring sys._esys_039\n" + "type sys._esys_041 {}\n" "type sys._esys_042 {}\n" - "type sys._osys_514 {_esys_511 sys.int32}\n" - "type sys._isys_516 {_esys_512 sys.string _esys_513 sys.string}\n" - "type sys._esys_041 (sys._esys_042 sys._osys_514 sys._isys_516)\n" - "var !sys.cmpstring sys._esys_041\n" + "type sys._esys_039 (sys._esys_040 sys._esys_041 sys._esys_042)\n" + "var !sys.printnl sys._esys_039\n" "type sys._esys_044 {}\n" - "type sys._osys_525 {_esys_521 sys.string}\n" - "type sys._isys_527 {_esys_522 sys.string _esys_523 sys.int32 _esys_524 sys.int32}\n" - "type sys._esys_043 (sys._esys_044 sys._osys_525 sys._isys_527)\n" - "var !sys.slicestring sys._esys_043\n" + "type sys._esys_045 {}\n" "type sys._esys_046 {}\n" - "type sys.uint8 2\n" - "type sys._osys_536 {_esys_533 sys.uint8}\n" - "type sys._isys_538 {_esys_534 sys.string _esys_535 sys.int32}\n" - "type sys._esys_045 (sys._esys_046 sys._osys_536 sys._isys_538)\n" - "var !sys.indexstring sys._esys_045\n" + "type sys._esys_043 (sys._esys_044 sys._esys_045 sys._esys_046)\n" + "var !sys.printsp sys._esys_043\n" "type sys._esys_048 {}\n" - "type sys._osys_545 {_esys_543 sys.string}\n" - "type sys._isys_547 {_esys_544 sys.int64}\n" - "type sys._esys_047 (sys._esys_048 sys._osys_545 sys._isys_547)\n" - "var !sys.intstring sys._esys_047\n" + "type sys._osys_510 {_esys_507 sys.string}\n" + "type sys._isys_512 {_esys_508 sys.string _esys_509 sys.string}\n" + "type sys._esys_047 (sys._esys_048 sys._osys_510 sys._isys_512)\n" + "var !sys.catstring sys._esys_047\n" "type sys._esys_050 {}\n" - "type sys._osys_554 {_esys_551 sys.string}\n" - "type sys._esys_051 *sys.uint8\n" - "type sys._isys_556 {_esys_552 sys._esys_051 _esys_553 sys.int32}\n" - "type sys._esys_049 (sys._esys_050 sys._osys_554 sys._isys_556)\n" - "var !sys.byteastring sys._esys_049\n" - "type sys._esys_053 {}\n" - "type sys._osys_563 {_esys_561 sys.string}\n" - "type sys._esys_055 [] sys.uint8\n" - "type sys._esys_054 *sys._esys_055\n" - "type sys._isys_565 {_esys_562 sys._esys_054}\n" - "type sys._esys_052 (sys._esys_053 sys._osys_563 sys._isys_565)\n" - "var !sys.arraystring sys._esys_052\n" - "type sys._esys_057 {}\n" - "type sys._osys_569 {ret sys.any}\n" - "type sys._esys_058 *sys.uint8\n" + "type sys._osys_520 {_esys_517 sys.int32}\n" + "type sys._isys_522 {_esys_518 sys.string _esys_519 sys.string}\n" + "type sys._esys_049 (sys._esys_050 sys._osys_520 sys._isys_522)\n" + "var !sys.cmpstring sys._esys_049\n" + "type sys._esys_052 {}\n" + "type sys._osys_531 {_esys_527 sys.string}\n" + "type sys._isys_533 {_esys_528 sys.string _esys_529 sys.int32 _esys_530 sys.int32}\n" + "type sys._esys_051 (sys._esys_052 sys._osys_531 sys._isys_533)\n" + "var !sys.slicestring sys._esys_051\n" + "type sys._esys_054 {}\n" + "type sys.uint8 2\n" + "type sys._osys_542 {_esys_539 sys.uint8}\n" + "type sys._isys_544 {_esys_540 sys.string _esys_541 sys.int32}\n" + "type sys._esys_053 (sys._esys_054 sys._osys_542 sys._isys_544)\n" + "var !sys.indexstring sys._esys_053\n" + "type sys._esys_056 {}\n" + "type sys._osys_551 {_esys_549 sys.string}\n" + "type sys._isys_553 {_esys_550 sys.int64}\n" + "type sys._esys_055 (sys._esys_056 sys._osys_551 sys._isys_553)\n" + "var !sys.intstring sys._esys_055\n" + "type sys._esys_058 {}\n" + "type sys._osys_560 {_esys_557 sys.string}\n" "type sys._esys_059 *sys.uint8\n" - "type sys._isys_571 {sigi sys._esys_058 sigt sys._esys_059 elem sys.any}\n" - "type sys._esys_056 (sys._esys_057 sys._osys_569 sys._isys_571)\n" - "var !sys.ifaceT2I sys._esys_056\n" + "type sys._isys_562 {_esys_558 sys._esys_059 _esys_559 sys.int32}\n" + "type sys._esys_057 (sys._esys_058 sys._osys_560 sys._isys_562)\n" + "var !sys.byteastring sys._esys_057\n" "type sys._esys_061 {}\n" - "type sys._osys_578 {ret sys.any}\n" - "type sys._esys_062 *sys.uint8\n" - "type sys._isys_580 {sigt sys._esys_062 iface sys.any}\n" - "type sys._esys_060 (sys._esys_061 sys._osys_578 sys._isys_580)\n" - "var !sys.ifaceI2T sys._esys_060\n" - "type sys._esys_064 {}\n" - "type sys._osys_586 {ret sys.any}\n" - "type sys._esys_065 *sys.uint8\n" - "type sys._isys_588 {sigi sys._esys_065 iface sys.any}\n" - "type sys._esys_063 (sys._esys_064 sys._osys_586 sys._isys_588)\n" - "var !sys.ifaceI2I sys._esys_063\n" - "type sys._esys_067 {}\n" - "type sys._osys_595 {_esys_594 sys.int32}\n" - "type sys._esys_068 {}\n" - "type sys._esys_066 (sys._esys_067 sys._osys_595 sys._esys_068)\n" - "var !sys.argc sys._esys_066\n" - "type sys._esys_070 {}\n" - "type sys._osys_599 {_esys_598 sys.int32}\n" - "type sys._esys_071 {}\n" - "type sys._esys_069 (sys._esys_070 sys._osys_599 sys._esys_071)\n" - "var !sys.envc sys._esys_069\n" - "type sys._esys_073 {}\n" - "type sys._osys_604 {_esys_602 sys.string}\n" - "type sys._isys_606 {_esys_603 sys.int32}\n" - "type sys._esys_072 (sys._esys_073 sys._osys_604 sys._isys_606)\n" - "var !sys.argv sys._esys_072\n" + "type sys._osys_569 {_esys_567 sys.string}\n" + "type sys._esys_062 *sys._esys_063\n" + "type sys._isys_571 {_esys_568 sys._esys_062}\n" + "type sys._esys_060 (sys._esys_061 sys._osys_569 sys._isys_571)\n" + "var !sys.arraystring sys._esys_060\n" + "type sys._esys_065 {}\n" + "type sys._osys_575 {ret sys.any}\n" + "type sys._esys_066 *sys.uint8\n" + "type sys._esys_067 *sys.uint8\n" + "type sys._isys_577 {sigi sys._esys_066 sigt sys._esys_067 elem sys.any}\n" + "type sys._esys_064 (sys._esys_065 sys._osys_575 sys._isys_577)\n" + "var !sys.ifaceT2I sys._esys_064\n" + "type sys._esys_069 {}\n" + "type sys._osys_584 {ret sys.any}\n" + "type sys._esys_070 *sys.uint8\n" + "type sys._isys_586 {sigt sys._esys_070 iface sys.any}\n" + "type sys._esys_068 (sys._esys_069 sys._osys_584 sys._isys_586)\n" + "var !sys.ifaceI2T sys._esys_068\n" + "type sys._esys_072 {}\n" + "type sys._osys_592 {ret sys.any}\n" + "type sys._esys_073 *sys.uint8\n" + "type sys._isys_594 {sigi sys._esys_073 iface sys.any}\n" + "type sys._esys_071 (sys._esys_072 sys._osys_592 sys._isys_594)\n" + "var !sys.ifaceI2I sys._esys_071\n" "type sys._esys_075 {}\n" - "type sys._osys_612 {_esys_610 sys.string}\n" - "type sys._isys_614 {_esys_611 sys.int32}\n" - "type sys._esys_074 (sys._esys_075 sys._osys_612 sys._isys_614)\n" - "var !sys.envv sys._esys_074\n" - "type sys._esys_077 {}\n" - "type sys._osys_621 {_esys_618 sys.float64 _esys_619 sys.int32}\n" - "type sys._isys_623 {_esys_620 sys.float64}\n" - "type sys._esys_076 (sys._esys_077 sys._osys_621 sys._isys_623)\n" - "var !sys.frexp sys._esys_076\n" + "type sys._osys_601 {_esys_600 sys.int32}\n" + "type sys._esys_076 {}\n" + "type sys._esys_074 (sys._esys_075 sys._osys_601 sys._esys_076)\n" + "var !sys.argc sys._esys_074\n" + "type sys._esys_078 {}\n" + "type sys._osys_605 {_esys_604 sys.int32}\n" "type sys._esys_079 {}\n" - "type sys._osys_630 {_esys_627 sys.float64}\n" - "type sys._isys_632 {_esys_628 sys.float64 _esys_629 sys.int32}\n" - "type sys._esys_078 (sys._esys_079 sys._osys_630 sys._isys_632)\n" - "var !sys.ldexp sys._esys_078\n" + "type sys._esys_077 (sys._esys_078 sys._osys_605 sys._esys_079)\n" + "var !sys.envc sys._esys_077\n" "type sys._esys_081 {}\n" - "type sys._osys_640 {_esys_637 sys.float64 _esys_638 sys.float64}\n" - "type sys._isys_642 {_esys_639 sys.float64}\n" - "type sys._esys_080 (sys._esys_081 sys._osys_640 sys._isys_642)\n" - "var !sys.modf sys._esys_080\n" + "type sys._osys_610 {_esys_608 sys.string}\n" + "type sys._isys_612 {_esys_609 sys.int32}\n" + "type sys._esys_080 (sys._esys_081 sys._osys_610 sys._isys_612)\n" + "var !sys.argv sys._esys_080\n" "type sys._esys_083 {}\n" - "type sys._osys_649 {_esys_646 sys.bool}\n" - "type sys._isys_651 {_esys_647 sys.float64 _esys_648 sys.int32}\n" - "type sys._esys_082 (sys._esys_083 sys._osys_649 sys._isys_651)\n" - "var !sys.isInf sys._esys_082\n" + "type sys._osys_618 {_esys_616 sys.string}\n" + "type sys._isys_620 {_esys_617 sys.int32}\n" + "type sys._esys_082 (sys._esys_083 sys._osys_618 sys._isys_620)\n" + "var !sys.envv sys._esys_082\n" "type sys._esys_085 {}\n" - "type sys._osys_658 {_esys_656 sys.bool}\n" - "type sys._isys_660 {_esys_657 sys.float64}\n" - "type sys._esys_084 (sys._esys_085 sys._osys_658 sys._isys_660)\n" - "var !sys.isNaN sys._esys_084\n" + "type sys._osys_627 {_esys_624 sys.float64 _esys_625 sys.int32}\n" + "type sys._isys_629 {_esys_626 sys.float64}\n" + "type sys._esys_084 (sys._esys_085 sys._osys_627 sys._isys_629)\n" + "var !sys.frexp sys._esys_084\n" "type sys._esys_087 {}\n" - "type sys._osys_666 {_esys_664 sys.float64}\n" - "type sys._isys_668 {_esys_665 sys.int32}\n" - "type sys._esys_086 (sys._esys_087 sys._osys_666 sys._isys_668)\n" - "var !sys.Inf sys._esys_086\n" + "type sys._osys_636 {_esys_633 sys.float64}\n" + "type sys._isys_638 {_esys_634 sys.float64 _esys_635 sys.int32}\n" + "type sys._esys_086 (sys._esys_087 sys._osys_636 sys._isys_638)\n" + "var !sys.ldexp sys._esys_086\n" "type sys._esys_089 {}\n" - "type sys._osys_673 {_esys_672 sys.float64}\n" - "type sys._esys_090 {}\n" - "type sys._esys_088 (sys._esys_089 sys._osys_673 sys._esys_090)\n" - "var !sys.NaN sys._esys_088\n" - "type sys._esys_092 {}\n" - "type sys._esys_094 [sys.any] sys.any\n" - "type sys._esys_093 *sys._esys_094\n" - "type sys._osys_676 {hmap sys._esys_093}\n" - "type sys._isys_678 {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_676 sys._isys_678)\n" - "var !sys.newmap sys._esys_091\n" - "type sys._esys_096 {}\n" - "type sys._osys_687 {val sys.any}\n" - "type sys._esys_098 [sys.any] sys.any\n" - "type sys._esys_097 *sys._esys_098\n" - "type sys._isys_689 {hmap sys._esys_097 key sys.any}\n" - "type sys._esys_095 (sys._esys_096 sys._osys_687 sys._isys_689)\n" - "var !sys.mapaccess1 sys._esys_095\n" + "type sys._osys_646 {_esys_643 sys.float64 _esys_644 sys.float64}\n" + "type sys._isys_648 {_esys_645 sys.float64}\n" + "type sys._esys_088 (sys._esys_089 sys._osys_646 sys._isys_648)\n" + "var !sys.modf sys._esys_088\n" + "type sys._esys_091 {}\n" + "type sys._osys_655 {_esys_652 sys.bool}\n" + "type sys._isys_657 {_esys_653 sys.float64 _esys_654 sys.int32}\n" + "type sys._esys_090 (sys._esys_091 sys._osys_655 sys._isys_657)\n" + "var !sys.isInf sys._esys_090\n" + "type sys._esys_093 {}\n" + "type sys._osys_664 {_esys_662 sys.bool}\n" + "type sys._isys_666 {_esys_663 sys.float64}\n" + "type sys._esys_092 (sys._esys_093 sys._osys_664 sys._isys_666)\n" + "var !sys.isNaN sys._esys_092\n" + "type sys._esys_095 {}\n" + "type sys._osys_672 {_esys_670 sys.float64}\n" + "type sys._isys_674 {_esys_671 sys.int32}\n" + "type sys._esys_094 (sys._esys_095 sys._osys_672 sys._isys_674)\n" + "var !sys.Inf sys._esys_094\n" + "type sys._esys_097 {}\n" + "type sys._osys_679 {_esys_678 sys.float64}\n" + "type sys._esys_098 {}\n" + "type sys._esys_096 (sys._esys_097 sys._osys_679 sys._esys_098)\n" + "var !sys.NaN sys._esys_096\n" "type sys._esys_100 {}\n" - "type sys._osys_695 {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_697 {hmap sys._esys_101 key sys.any}\n" - "type sys._esys_099 (sys._esys_100 sys._osys_695 sys._isys_697)\n" - "var !sys.mapaccess2 sys._esys_099\n" + "type sys._osys_682 {hmap sys._esys_101}\n" + "type sys._isys_684 {keysize sys.uint32 valsize sys.uint32 keyalg sys.uint32 valalg sys.uint32 hint sys.uint32}\n" + "type sys._esys_099 (sys._esys_100 sys._osys_682 sys._isys_684)\n" + "var !sys.newmap sys._esys_099\n" "type sys._esys_104 {}\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_704 {hmap sys._esys_106 key sys.any val sys.any}\n" - "type sys._esys_103 (sys._esys_104 sys._esys_105 sys._isys_704)\n" - "var !sys.mapassign1 sys._esys_103\n" - "type sys._esys_109 {}\n" - "type sys._esys_110 {}\n" - "type sys._esys_112 [sys.any] sys.any\n" - "type sys._esys_111 *sys._esys_112\n" - "type sys._isys_710 {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_710)\n" - "var !sys.mapassign2 sys._esys_108\n" - "type sys._esys_114 {}\n" - "type sys._esys_116 1 sys.any\n" - "type sys._esys_115 *sys._esys_116\n" - "type sys._osys_717 {hchan sys._esys_115}\n" - "type sys._isys_719 {elemsize sys.uint32 elemalg sys.uint32 hint sys.uint32}\n" - "type sys._esys_113 (sys._esys_114 sys._osys_717 sys._isys_719)\n" - "var !sys.newchan sys._esys_113\n" + "type sys._osys_693 {val sys.any}\n" + "type sys._esys_105 *sys._esys_106\n" + "type sys._isys_695 {hmap sys._esys_105 key sys.any}\n" + "type sys._esys_103 (sys._esys_104 sys._osys_693 sys._isys_695)\n" + "var !sys.mapaccess1 sys._esys_103\n" + "type sys._esys_108 {}\n" + "type sys._osys_701 {val sys.any pres sys.bool}\n" + "type sys._esys_109 *sys._esys_110\n" + "type sys._isys_703 {hmap sys._esys_109 key sys.any}\n" + "type sys._esys_107 (sys._esys_108 sys._osys_701 sys._isys_703)\n" + "var !sys.mapaccess2 sys._esys_107\n" + "type sys._esys_112 {}\n" + "type sys._esys_113 {}\n" + "type sys._esys_114 *sys._esys_115\n" + "type sys._isys_710 {hmap sys._esys_114 key sys.any val sys.any}\n" + "type sys._esys_111 (sys._esys_112 sys._esys_113 sys._isys_710)\n" + "var !sys.mapassign1 sys._esys_111\n" + "type sys._esys_117 {}\n" "type sys._esys_118 {}\n" - "type sys._osys_726 {elem sys.any}\n" - "type sys._esys_120 1 sys.any\n" "type sys._esys_119 *sys._esys_120\n" - "type sys._isys_728 {hchan sys._esys_119}\n" - "type sys._esys_117 (sys._esys_118 sys._osys_726 sys._isys_728)\n" - "var !sys.chanrecv1 sys._esys_117\n" + "type sys._isys_716 {hmap sys._esys_119 key sys.any val sys.any pres sys.bool}\n" + "type sys._esys_116 (sys._esys_117 sys._esys_118 sys._isys_716)\n" + "var !sys.mapassign2 sys._esys_116\n" "type sys._esys_122 {}\n" - "type sys._osys_733 {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._isys_735 {hchan sys._esys_123}\n" - "type sys._esys_121 (sys._esys_122 sys._osys_733 sys._isys_735)\n" - "var !sys.chanrecv2 sys._esys_121\n" + "type sys._osys_723 {hchan sys._esys_123}\n" + "type sys._isys_725 {elemsize sys.uint32 elemalg sys.uint32 hint sys.uint32}\n" + "type sys._esys_121 (sys._esys_122 sys._osys_723 sys._isys_725)\n" + "var !sys.newchan sys._esys_121\n" "type sys._esys_126 {}\n" - "type sys._osys_741 {pres sys.bool}\n" - "type sys._esys_128 1 sys.any\n" + "type sys._osys_732 {elem sys.any}\n" "type sys._esys_127 *sys._esys_128\n" - "type sys._esys_129 *sys.any\n" - "type sys._isys_743 {hchan sys._esys_127 elem sys._esys_129}\n" - "type sys._esys_125 (sys._esys_126 sys._osys_741 sys._isys_743)\n" - "var !sys.chanrecv3 sys._esys_125\n" - "type sys._esys_131 {}\n" - "type sys._esys_132 {}\n" - "type sys._esys_134 1 sys.any\n" - "type sys._esys_133 *sys._esys_134\n" - "type sys._isys_749 {hchan sys._esys_133 elem sys.any}\n" - "type sys._esys_130 (sys._esys_131 sys._esys_132 sys._isys_749)\n" - "var !sys.chansend1 sys._esys_130\n" - "type sys._esys_136 {}\n" - "type sys._osys_754 {pres sys.bool}\n" - "type sys._esys_138 1 sys.any\n" - "type sys._esys_137 *sys._esys_138\n" - "type sys._isys_756 {hchan sys._esys_137 elem sys.any}\n" - "type sys._esys_135 (sys._esys_136 sys._osys_754 sys._isys_756)\n" - "var !sys.chansend2 sys._esys_135\n" + "type sys._isys_734 {hchan sys._esys_127}\n" + "type sys._esys_125 (sys._esys_126 sys._osys_732 sys._isys_734)\n" + "var !sys.chanrecv1 sys._esys_125\n" + "type sys._esys_130 {}\n" + "type sys._osys_739 {elem sys.any pres sys.bool}\n" + "type sys._esys_131 *sys._esys_132\n" + "type sys._isys_741 {hchan sys._esys_131}\n" + "type sys._esys_129 (sys._esys_130 sys._osys_739 sys._isys_741)\n" + "var !sys.chanrecv2 sys._esys_129\n" + "type sys._esys_134 {}\n" + "type sys._osys_747 {pres sys.bool}\n" + "type sys._esys_135 *sys._esys_136\n" + "type sys._esys_137 *sys.any\n" + "type sys._isys_749 {hchan sys._esys_135 elem sys._esys_137}\n" + "type sys._esys_133 (sys._esys_134 sys._osys_747 sys._isys_749)\n" + "var !sys.chanrecv3 sys._esys_133\n" + "type sys._esys_139 {}\n" "type sys._esys_140 {}\n" - "type sys._esys_141 *sys.uint8\n" - "type sys._osys_762 {sel sys._esys_141}\n" - "type sys._isys_764 {size sys.uint32}\n" - "type sys._esys_139 (sys._esys_140 sys._osys_762 sys._isys_764)\n" - "var !sys.newselect sys._esys_139\n" - "type sys._esys_143 {}\n" - "type sys._osys_769 {selected sys.bool}\n" - "type sys._esys_144 *sys.uint8\n" - "type sys._esys_146 1 sys.any\n" + "type sys._esys_141 *sys._esys_142\n" + "type sys._isys_755 {hchan sys._esys_141 elem sys.any}\n" + "type sys._esys_138 (sys._esys_139 sys._esys_140 sys._isys_755)\n" + "var !sys.chansend1 sys._esys_138\n" + "type sys._esys_144 {}\n" + "type sys._osys_760 {pres sys.bool}\n" "type sys._esys_145 *sys._esys_146\n" - "type sys._isys_771 {sel sys._esys_144 hchan sys._esys_145 elem sys.any}\n" - "type sys._esys_142 (sys._esys_143 sys._osys_769 sys._isys_771)\n" - "var !sys.selectsend sys._esys_142\n" + "type sys._isys_762 {hchan sys._esys_145 elem sys.any}\n" + "type sys._esys_143 (sys._esys_144 sys._osys_760 sys._isys_762)\n" + "var !sys.chansend2 sys._esys_143\n" "type sys._esys_148 {}\n" - "type sys._osys_778 {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_780 {sel sys._esys_149 hchan sys._esys_150 elem sys._esys_152}\n" - "type sys._esys_147 (sys._esys_148 sys._osys_778 sys._isys_780)\n" - "var !sys.selectrecv sys._esys_147\n" - "type sys._esys_154 {}\n" - "type sys._esys_155 {}\n" - "type sys._esys_156 *sys.uint8\n" - "type sys._isys_787 {sel sys._esys_156}\n" - "type sys._esys_153 (sys._esys_154 sys._esys_155 sys._isys_787)\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_791 {ary sys._esys_159}\n" - "type sys._isys_793 {nel sys.uint32 cap sys.uint32 width sys.uint32}\n" - "type sys._esys_157 (sys._esys_158 sys._osys_791 sys._isys_793)\n" - "var !sys.newarray sys._esys_157\n" + "type sys._osys_768 {sel sys._esys_149}\n" + "type sys._isys_770 {size sys.uint32}\n" + "type sys._esys_147 (sys._esys_148 sys._osys_768 sys._isys_770)\n" + "var !sys.newselect sys._esys_147\n" + "type sys._esys_151 {}\n" + "type sys._osys_775 {selected sys.bool}\n" + "type sys._esys_152 *sys.uint8\n" + "type sys._esys_153 *sys._esys_154\n" + "type sys._isys_777 {sel sys._esys_152 hchan sys._esys_153 elem sys.any}\n" + "type sys._esys_150 (sys._esys_151 sys._osys_775 sys._isys_777)\n" + "var !sys.selectsend sys._esys_150\n" + "type sys._esys_156 {}\n" + "type sys._osys_784 {selected sys.bool}\n" + "type sys._esys_157 *sys.uint8\n" + "type sys._esys_158 *sys._esys_159\n" + "type sys._esys_160 *sys.any\n" + "type sys._isys_786 {sel sys._esys_157 hchan sys._esys_158 elem sys._esys_160}\n" + "type sys._esys_155 (sys._esys_156 sys._osys_784 sys._isys_786)\n" + "var !sys.selectrecv sys._esys_155\n" "type sys._esys_162 {}\n" - "type sys._esys_164 [] sys.any\n" - "type sys._esys_163 *sys._esys_164\n" - "type sys._osys_800 {ary sys._esys_163}\n" - "type sys._esys_166 [] sys.any\n" - "type sys._esys_165 *sys._esys_166\n" - "type sys._isys_802 {old sys._esys_165 lb sys.uint32 hb sys.uint32 width sys.uint32}\n" - "type sys._esys_161 (sys._esys_162 sys._osys_800 sys._isys_802)\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_810 {ary sys._esys_169}\n" - "type sys._esys_171 *sys.any\n" - "type sys._isys_812 {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_810 sys._isys_812)\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_821 {ary sys._esys_174}\n" - "type sys._esys_176 *sys.any\n" - "type sys._isys_823 {old sys._esys_176 nel sys.uint32}\n" - "type sys._esys_172 (sys._esys_173 sys._osys_821 sys._isys_823)\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.gosched sys._esys_177\n" - "type sys._esys_182 {}\n" - "type sys._esys_183 {}\n" - "type sys._esys_184 {}\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_163 {}\n" + "type sys._esys_164 *sys.uint8\n" + "type sys._isys_793 {sel sys._esys_164}\n" + "type sys._esys_161 (sys._esys_162 sys._esys_163 sys._isys_793)\n" + "var !sys.selectgo sys._esys_161\n" + "type sys._esys_166 {}\n" + "type sys._esys_167 *sys._esys_168\n" + "type sys._osys_797 {ary sys._esys_167}\n" + "type sys._isys_799 {nel sys.uint32 cap sys.uint32 width sys.uint32}\n" + "type sys._esys_165 (sys._esys_166 sys._osys_797 sys._isys_799)\n" + "var !sys.newarray sys._esys_165\n" + "type sys._esys_170 {}\n" + "type sys._esys_171 *sys._esys_172\n" + "type sys._osys_806 {ary sys._esys_171}\n" + "type sys._esys_173 *sys._esys_174\n" + "type sys._isys_808 {old sys._esys_173 lb sys.uint32 hb sys.uint32 width sys.uint32}\n" + "type sys._esys_169 (sys._esys_170 sys._osys_806 sys._isys_808)\n" + "var !sys.arraysliced sys._esys_169\n" + "type sys._esys_176 {}\n" + "type sys._esys_177 *sys._esys_178\n" + "type sys._osys_816 {ary sys._esys_177}\n" + "type sys._esys_179 *sys.any\n" + "type sys._isys_818 {old sys._esys_179 nel sys.uint32 lb sys.uint32 hb sys.uint32 width sys.uint32}\n" + "type sys._esys_175 (sys._esys_176 sys._osys_816 sys._isys_818)\n" + "var !sys.arrayslices sys._esys_175\n" + "type sys._esys_181 {}\n" + "type sys._esys_182 *sys._esys_183\n" + "type sys._osys_827 {ary sys._esys_182}\n" + "type sys._esys_184 *sys.any\n" + "type sys._isys_829 {old sys._esys_184 nel sys.uint32}\n" + "type sys._esys_180 (sys._esys_181 sys._osys_827 sys._isys_829)\n" + "var !sys.arrays2d sys._esys_180\n" "type sys._esys_186 {}\n" - "type sys._osys_834 {_esys_831 sys.string _esys_832 sys.bool}\n" - "type sys._isys_836 {_esys_833 sys.string}\n" - "type sys._esys_185 (sys._esys_186 sys._osys_834 sys._isys_836)\n" - "var !sys.readfile sys._esys_185\n" + "type sys._esys_187 {}\n" "type sys._esys_188 {}\n" - "type sys._osys_843 {_esys_840 sys.bool}\n" - "type sys._isys_845 {_esys_841 sys.string _esys_842 sys.string}\n" - "type sys._esys_187 (sys._esys_188 sys._osys_843 sys._isys_845)\n" - "var !sys.writefile sys._esys_187\n" + "type sys._esys_185 (sys._esys_186 sys._esys_187 sys._esys_188)\n" + "var !sys.gosched sys._esys_185\n" "type sys._esys_190 {}\n" - "type sys._osys_855 {_esys_850 sys.int32 _esys_851 sys.int32}\n" - "type sys._esys_191 *sys.uint8\n" - "type sys._isys_857 {_esys_852 sys._esys_191 _esys_853 sys.int32 _esys_854 sys.int32}\n" - "type sys._esys_189 (sys._esys_190 sys._osys_855 sys._isys_857)\n" - "var !sys.bytestorune sys._esys_189\n" - "type sys._esys_193 {}\n" - "type sys._osys_868 {_esys_863 sys.int32 _esys_864 sys.int32}\n" - "type sys._isys_870 {_esys_865 sys.string _esys_866 sys.int32 _esys_867 sys.int32}\n" - "type sys._esys_192 (sys._esys_193 sys._osys_868 sys._isys_870)\n" - "var !sys.stringtorune sys._esys_192\n" - "type sys._esys_195 {}\n" + "type sys._esys_191 {}\n" + "type sys._esys_192 {}\n" + "type sys._esys_189 (sys._esys_190 sys._esys_191 sys._esys_192)\n" + "var !sys.goexit sys._esys_189\n" + "type sys._esys_194 {}\n" + "type sys._osys_840 {_esys_837 sys.string _esys_838 sys.bool}\n" + "type sys._isys_842 {_esys_839 sys.string}\n" + "type sys._esys_193 (sys._esys_194 sys._osys_840 sys._isys_842)\n" + "var !sys.readfile sys._esys_193\n" "type sys._esys_196 {}\n" - "type sys._isys_877 {_esys_876 sys.int32}\n" - "type sys._esys_194 (sys._esys_195 sys._esys_196 sys._isys_877)\n" - "var !sys.exit sys._esys_194\n" + "type sys._osys_849 {_esys_846 sys.bool}\n" + "type sys._isys_851 {_esys_847 sys.string _esys_848 sys.string}\n" + "type sys._esys_195 (sys._esys_196 sys._osys_849 sys._isys_851)\n" + "var !sys.writefile sys._esys_195\n" "type sys._esys_198 {}\n" - "type sys._esys_199 {}\n" - "type sys._esys_200 {}\n" - "type sys._esys_197 (sys._esys_198 sys._esys_199 sys._esys_200)\n" + "type sys._osys_861 {_esys_856 sys.int32 _esys_857 sys.int32}\n" + "type sys._esys_199 *sys.uint8\n" + "type sys._isys_863 {_esys_858 sys._esys_199 _esys_859 sys.int32 _esys_860 sys.int32}\n" + "type sys._esys_197 (sys._esys_198 sys._osys_861 sys._isys_863)\n" + "var !sys.bytestorune sys._esys_197\n" + "type sys._esys_201 {}\n" + "type sys._osys_874 {_esys_869 sys.int32 _esys_870 sys.int32}\n" + "type sys._isys_876 {_esys_871 sys.string _esys_872 sys.int32 _esys_873 sys.int32}\n" + "type sys._esys_200 (sys._esys_201 sys._osys_874 sys._isys_876)\n" + "var !sys.stringtorune sys._esys_200\n" + "type sys._esys_203 {}\n" + "type sys._esys_204 {}\n" + "type sys._isys_883 {_esys_882 sys.int32}\n" + "type sys._esys_202 (sys._esys_203 sys._esys_204 sys._isys_883)\n" + "var !sys.exit sys._esys_202\n" + "type sys._esys_206 {}\n" + "type sys._esys_207 {}\n" + "type sys._esys_208 {}\n" + "type sys._esys_205 (sys._esys_206 sys._esys_207 sys._esys_208)\n" + "type sys._esys_031 25\n" + "type sys._esys_063 [] sys.uint8\n" + "type sys._esys_102 [sys.any] sys.any\n" + "type sys._esys_106 [sys.any] sys.any\n" + "type sys._esys_110 [sys.any] sys.any\n" + "type sys._esys_115 [sys.any] sys.any\n" + "type sys._esys_120 [sys.any] sys.any\n" + "type sys._esys_124 1 sys.any\n" + "type sys._esys_128 1 sys.any\n" + "type sys._esys_132 1 sys.any\n" + "type sys._esys_136 1 sys.any\n" + "type sys._esys_142 1 sys.any\n" + "type sys._esys_146 1 sys.any\n" + "type sys._esys_154 1 sys.any\n" + "type sys._esys_159 1 sys.any\n" + "type sys._esys_168 [] sys.any\n" + "type sys._esys_172 [] sys.any\n" + "type sys._esys_174 [] sys.any\n" + "type sys._esys_178 [] sys.any\n" + "type sys._esys_183 [] sys.any\n" "))\n" ; diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 1cd3c2003b..cc06abc6e5 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -124,7 +124,9 @@ loop: case OSEND: case ORECV: case OPRINT: + case OPRINTN: case OPANIC: + case OPANICN: case OFOR: case OIF: case OSWITCH: @@ -203,14 +205,28 @@ loop: if(top != Etop) goto nottop; walktype(n->left, Erv); - indir(n, prcompat(n->left)); + indir(n, prcompat(n->left, 0)); + goto ret; + + case OPRINTN: + if(top != Etop) + goto nottop; + walktype(n->left, Erv); + indir(n, prcompat(n->left, 1)); goto ret; case OPANIC: if(top != Etop) goto nottop; walktype(n->left, Erv); - indir(n, list(prcompat(n->left), nodpanic(n->lineno))); + indir(n, list(prcompat(n->left, 0), nodpanic(n->lineno))); + goto ret; + + case OPANICN: + if(top != Etop) + goto nottop; + walktype(n->left, Erv); + indir(n, list(prcompat(n->left, 1), nodpanic(n->lineno))); goto ret; case OLITERAL: @@ -1598,23 +1614,33 @@ ascompat(Type *t1, Type *t2) } Node* -prcompat(Node *n) +prcompat(Node *n, int fmt) { Node *l, *r; Node *on; Type *t; Iter save; - int w; + int w, notfirst; r = N; l = listfirst(&save, &n); + notfirst = 0; loop: if(l == N) { + if(fmt) { + on = syslook("printnl", 0); + r = list(r, nod(OCALL, on, N)); + } walktype(r, Etop); return r; } + if(notfirst) { + on = syslook("printsp", 0); + r = list(r, nod(OCALL, on, N)); + } + w = whatis(l); switch(w) { default: @@ -1663,12 +1689,10 @@ loop: l->type = t; } - if(r == N) - r = nod(OCALL, on, l); - else - r = list(r, nod(OCALL, on, l)); + r = list(r, nod(OCALL, on, l)); out: + notfirst = fmt; l = listnext(&save); goto loop; } diff --git a/src/runtime/print.c b/src/runtime/print.c index 2bc58752d5..f50d308957 100644 --- a/src/runtime/print.c +++ b/src/runtime/print.c @@ -166,3 +166,15 @@ sys·printstring(string v) if(v != nil) sys·write(1, v->str, v->len); } + +void +sys·printsp(void) +{ + sys·write(1, " ", 1); +} + +void +sys·printnl(void) +{ + sys·write(1, "\n", 1); +} -- 2.48.1