From: Matthew Dempsky Date: Tue, 7 Apr 2015 18:57:52 +0000 (-0700) Subject: cmd/internal/gc, cmd/yacc: merge yaccerrors.go into cmd/yacc X-Git-Tag: go1.5beta1~567 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=82e1651a246db496fa9598f46a6c6af999b699ba;p=gostls13.git cmd/internal/gc, cmd/yacc: merge yaccerrors.go into cmd/yacc This extends cmd/yacc with support for %error { tokens } : message syntax to specify custom error messages to use instead of the default generic ones. This allows merging go.errors into go.y and removing the yaccerrors.go tool. Updates #9968. Change-Id: I781219c568b86472755f877f48401eaeab00ead5 Reviewed-on: https://go-review.googlesource.com/8563 Reviewed-by: Russ Cox --- diff --git a/src/cmd/internal/gc/go.errors b/src/cmd/internal/gc/go.errors deleted file mode 100644 index 8370a2007d..0000000000 --- a/src/cmd/internal/gc/go.errors +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Example-based syntax error messages. -// See yaccerrors.go. - -package gc - -var yymsg = []struct { - yystate int - yychar int - msg string -}{ - // Each line of the form % token list - // is converted by yaccerrors.go into the yystate and yychar caused - // by that token list. - - % loadsys package LIMPORT '(' LLITERAL import_package import_there ',' - "unexpected comma during import block"}, - - % loadsys package LIMPORT LNAME ';' - "missing import path; require quoted string"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header ';' - "missing { after if clause"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LSWITCH if_header ';' - "missing { after switch clause"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LFOR for_header ';' - "missing { after for clause"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LFOR ';' LBODY - "missing { after for clause"}, - - % loadsys package imports LFUNC LNAME '(' ')' ';' '{' - "unexpected semicolon or newline before {"}, - - % loadsys package imports LTYPE LNAME ';' - "unexpected semicolon or newline in type declaration"}, - - % loadsys package imports LCHAN '}' - "unexpected } in channel type"}, - - % loadsys package imports LCHAN ')' - "unexpected ) in channel type"}, - - % loadsys package imports LCHAN ',' - "unexpected comma in channel type"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' if_stmt ';' LELSE - "unexpected semicolon or newline before else"}, - - % loadsys package imports LTYPE LNAME LINTERFACE '{' LNAME ',' LNAME - "name list not allowed in interface type"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LFOR LVAR LNAME '=' LNAME - "var declaration not allowed in for initializer"}, - - % loadsys package imports LVAR LNAME '[' ']' LNAME '{' - "unexpected { at end of statement"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LVAR LNAME '[' ']' LNAME '{' - "unexpected { at end of statement"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LDEFER LNAME ';' - "argument to go/defer must be function call"}, - - % loadsys package imports LVAR LNAME '=' LNAME '{' LNAME ';' - "need trailing comma before newline in composite literal"}, - - % loadsys package imports LVAR LNAME '=' comptype '{' LNAME ';' - "need trailing comma before newline in composite literal"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LFUNC LNAME - "nested func not allowed"}, - - % loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header loop_body LELSE ';' - "else must be followed by if or statement block"}, -} diff --git a/src/cmd/internal/gc/go.y b/src/cmd/internal/gc/go.y index e2e4331a77..7d523ae7c0 100644 --- a/src/cmd/internal/gc/go.y +++ b/src/cmd/internal/gc/go.y @@ -117,7 +117,68 @@ import ( %left ')' %left PreferToRightParen -// TODO(rsc): Add %error-verbose +%error loadsys package LIMPORT '(' LLITERAL import_package import_there ',': + "unexpected comma during import block" + +%error loadsys package LIMPORT LNAME ';': + "missing import path; require quoted string" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header ';': + "missing { after if clause" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LSWITCH if_header ';': + "missing { after switch clause" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LFOR for_header ';': + "missing { after for clause" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LFOR ';' LBODY: + "missing { after for clause" + +%error loadsys package imports LFUNC LNAME '(' ')' ';' '{': + "unexpected semicolon or newline before {" + +%error loadsys package imports LTYPE LNAME ';': + "unexpected semicolon or newline in type declaration" + +%error loadsys package imports LCHAN '}': + "unexpected } in channel type" + +%error loadsys package imports LCHAN ')': + "unexpected ) in channel type" + +%error loadsys package imports LCHAN ',': + "unexpected comma in channel type" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' if_stmt ';' LELSE: + "unexpected semicolon or newline before else" + +%error loadsys package imports LTYPE LNAME LINTERFACE '{' LNAME ',' LNAME: + "name list not allowed in interface type" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LFOR LVAR LNAME '=' LNAME: + "var declaration not allowed in for initializer" + +%error loadsys package imports LVAR LNAME '[' ']' LNAME '{': + "unexpected { at end of statement" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LVAR LNAME '[' ']' LNAME '{': + "unexpected { at end of statement" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LDEFER LNAME ';': + "argument to go/defer must be function call" + +%error loadsys package imports LVAR LNAME '=' LNAME '{' LNAME ';': + "need trailing comma before newline in composite literal" + +%error loadsys package imports LVAR LNAME '=' comptype '{' LNAME ';': + "need trailing comma before newline in composite literal" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LFUNC LNAME: + "nested func not allowed" + +%error loadsys package imports LFUNC LNAME '(' ')' '{' LIF if_header loop_body LELSE ';': + "else must be followed by if or statement block" %% file: diff --git a/src/cmd/internal/gc/lex.go b/src/cmd/internal/gc/lex.go index 1bf0758000..9e2baec220 100644 --- a/src/cmd/internal/gc/lex.go +++ b/src/cmd/internal/gc/lex.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. //go:generate go tool yacc go.y -//go:generate go run yaccerrors.go //go:generate go run mkbuiltin.go runtime unsafe package gc diff --git a/src/cmd/internal/gc/subr.go b/src/cmd/internal/gc/subr.go index 7f9e78810f..74415be49a 100644 --- a/src/cmd/internal/gc/subr.go +++ b/src/cmd/internal/gc/subr.go @@ -125,13 +125,6 @@ func Yyerror(format string, args ...interface{}) { if strings.HasPrefix(msg, "syntax error") { nsyntaxerrors++ - yystate := theparser.(*yyParserImpl).state() - yychar := theparser.Lookahead() - - if Debug['x'] != 0 { - fmt.Printf("yyerror: yystate=%d yychar=%d\n", yystate, yychar) - } - // An unexpected EOF caused a syntax error. Use the previous // line number since getc generated a fake newline character. if curio.eofnl != 0 { @@ -144,14 +137,6 @@ func Yyerror(format string, args ...interface{}) { } yyerror_lastsyntax = int(lexlineno) - // look for parse state-specific errors in list (see go.errors). - for i := range yymsg { - if yymsg[i].yystate == yystate && yymsg[i].yychar == yychar { - yyerrorl(int(lexlineno), "syntax error: %s", yymsg[i].msg) - return - } - } - // plain "syntax error" gets "near foo" added if msg == "syntax error" { yyerrorl(int(lexlineno), "syntax error near %s", lexbuf.String()) diff --git a/src/cmd/internal/gc/y.go b/src/cmd/internal/gc/y.go index 06f6b13eb6..72bce9a465 100644 --- a/src/cmd/internal/gc/y.go +++ b/src/cmd/internal/gc/y.go @@ -154,7 +154,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyMaxDepth = 200 -//line go.y:2243 +//line go.y:2304 func fixlbrace(lbr int) { // If the opening brace was an LBODY, // set up for another one now that we're done. @@ -857,6 +857,34 @@ var yyTok3 = [...]int{ 0, } +var yyErrorMessages = [...]struct { + state int + token int + msg string +}{ + {332, 76, "unexpected comma during import block"}, + {89, 63, "missing import path; require quoted string"}, + {390, 63, "missing { after if clause"}, + {387, 63, "missing { after switch clause"}, + {279, 63, "missing { after for clause"}, + {498, 36, "missing { after for clause"}, + {17, 68, "unexpected semicolon or newline before {"}, + {111, 63, "unexpected semicolon or newline in type declaration"}, + {78, 69, "unexpected } in channel type"}, + {78, 61, "unexpected ) in channel type"}, + {78, 76, "unexpected comma in channel type"}, + {416, 15, "unexpected semicolon or newline before else"}, + {329, 76, "name list not allowed in interface type"}, + {279, 33, "var declaration not allowed in for initializer"}, + {25, 68, "unexpected { at end of statement"}, + {371, 68, "unexpected { at end of statement"}, + {122, 63, "argument to go/defer must be function call"}, + {398, 63, "need trailing comma before newline in composite literal"}, + {414, 63, "need trailing comma before newline in composite literal"}, + {124, 25, "nested func not allowed"}, + {650, 63, "else must be followed by if or statement block"}, +} + //line yaccpar:1 /* parser for yacc output */ @@ -878,7 +906,6 @@ type yyParser interface { type yyParserImpl struct { lookahead func() int - state func() int } func (p *yyParserImpl) Lookahead() int { @@ -888,7 +915,6 @@ func (p *yyParserImpl) Lookahead() int { func yyNewParser() yyParser { p := &yyParserImpl{ lookahead: func() int { return -1 }, - state: func() int { return -1 }, } return p } @@ -919,6 +945,13 @@ func yyErrorMessage(state, lookAhead int) string { if !yyErrorVerbose { return "syntax error" } + + for _, e := range yyErrorMessages { + if e.state == state && e.token == lookAhead { + return "syntax error: " + e.msg + } + } + res := "syntax error: unexpected " + yyTokname(lookAhead) // To match Bison, suggest at most four expected tokens. @@ -1021,7 +1054,6 @@ func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int { yystate := 0 yychar := -1 yytoken := -1 // yychar translated into internal numbering - yyrcvr.state = func() int { return yystate } yyrcvr.lookahead = func() int { return yychar } defer func() { // Make sure we report no lookahead when not parsing. @@ -1188,13 +1220,13 @@ yydefault: case 1: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:128 + //line go.y:189 { xtop = concat(xtop, yyDollar[4].list) } case 2: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:134 + //line go.y:195 { prevlineno = lineno Yyerror("package statement must be first") @@ -1202,13 +1234,13 @@ yydefault: } case 3: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:140 + //line go.y:201 { mkpackage(yyDollar[2].sym.Name) } case 4: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:150 + //line go.y:211 { importpkg = Runtimepkg @@ -1221,13 +1253,13 @@ yydefault: } case 5: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:162 + //line go.y:223 { importpkg = nil } case 11: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:176 + //line go.y:237 { ipkg := importpkg my := importmyname @@ -1264,7 +1296,7 @@ yydefault: } case 12: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:211 + //line go.y:272 { // When an invalid import path is passed to importfile, // it calls Yyerror and then sets up a fake import with @@ -1276,7 +1308,7 @@ yydefault: } case 15: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:227 + //line go.y:288 { // import with original name yyVAL.i = parserline() @@ -1285,7 +1317,7 @@ yydefault: } case 16: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:234 + //line go.y:295 { // import with given name yyVAL.i = parserline() @@ -1294,7 +1326,7 @@ yydefault: } case 17: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:241 + //line go.y:302 { // import into my name space yyVAL.i = parserline() @@ -1303,7 +1335,7 @@ yydefault: } case 18: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:250 + //line go.y:311 { if importpkg.Name == "" { importpkg.Name = yyDollar[2].sym.Name @@ -1320,7 +1352,7 @@ yydefault: } case 20: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:267 + //line go.y:328 { if yyDollar[1].sym.Name == "safe" { curio.importsafe = true @@ -1328,64 +1360,64 @@ yydefault: } case 21: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:274 + //line go.y:335 { defercheckwidth() } case 22: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:278 + //line go.y:339 { resumecheckwidth() unimportfile() } case 23: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:287 + //line go.y:348 { Yyerror("empty top-level declaration") yyVAL.list = nil } case 25: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:293 + //line go.y:354 { yyVAL.list = list1(yyDollar[1].node) } case 26: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:297 + //line go.y:358 { Yyerror("non-declaration statement outside function body") yyVAL.list = nil } case 27: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:302 + //line go.y:363 { yyVAL.list = nil } case 28: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:308 + //line go.y:369 { yyVAL.list = yyDollar[2].list } case 29: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:312 + //line go.y:373 { yyVAL.list = yyDollar[3].list } case 30: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:316 + //line go.y:377 { yyVAL.list = nil } case 31: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:320 + //line go.y:381 { yyVAL.list = yyDollar[2].list iota_ = -100000 @@ -1393,7 +1425,7 @@ yydefault: } case 32: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:326 + //line go.y:387 { yyVAL.list = yyDollar[3].list iota_ = -100000 @@ -1401,7 +1433,7 @@ yydefault: } case 33: yyDollar = yyS[yypt-7 : yypt+1] - //line go.y:332 + //line go.y:393 { yyVAL.list = concat(yyDollar[3].list, yyDollar[5].list) iota_ = -100000 @@ -1409,80 +1441,80 @@ yydefault: } case 34: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:338 + //line go.y:399 { yyVAL.list = nil iota_ = -100000 } case 35: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:343 + //line go.y:404 { yyVAL.list = list1(yyDollar[2].node) } case 36: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:347 + //line go.y:408 { yyVAL.list = yyDollar[3].list } case 37: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:351 + //line go.y:412 { yyVAL.list = nil } case 38: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:357 + //line go.y:418 { iota_ = 0 } case 39: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:363 + //line go.y:424 { yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, nil) } case 40: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:367 + //line go.y:428 { yyVAL.list = variter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list) } case 41: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:371 + //line go.y:432 { yyVAL.list = variter(yyDollar[1].list, nil, yyDollar[3].list) } case 42: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:377 + //line go.y:438 { yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, yyDollar[4].list) } case 43: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:381 + //line go.y:442 { yyVAL.list = constiter(yyDollar[1].list, nil, yyDollar[3].list) } case 45: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:388 + //line go.y:449 { yyVAL.list = constiter(yyDollar[1].list, yyDollar[2].node, nil) } case 46: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:392 + //line go.y:453 { yyVAL.list = constiter(yyDollar[1].list, nil, nil) } case 47: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:398 + //line go.y:459 { // different from dclname because the name // becomes visible right here, not at the end @@ -1491,13 +1523,13 @@ yydefault: } case 48: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:407 + //line go.y:468 { yyVAL.node = typedcl1(yyDollar[1].node, yyDollar[2].node, true) } case 49: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:413 + //line go.y:474 { yyVAL.node = yyDollar[1].node @@ -1513,14 +1545,14 @@ yydefault: } case 50: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:427 + //line go.y:488 { yyVAL.node = Nod(OASOP, yyDollar[1].node, yyDollar[3].node) yyVAL.node.Etype = uint8(yyDollar[2].i) // rathole to pass opcode } case 51: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:432 + //line go.y:493 { if yyDollar[1].list.Next == nil && yyDollar[3].list.Next == nil { // simple @@ -1534,7 +1566,7 @@ yydefault: } case 52: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:444 + //line go.y:505 { if yyDollar[3].list.N.Op == OTYPESW { yyVAL.node = Nod(OTYPESW, nil, yyDollar[3].list.N.Right) @@ -1554,7 +1586,7 @@ yydefault: } case 53: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:462 + //line go.y:523 { yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1)) yyVAL.node.Implicit = true @@ -1562,7 +1594,7 @@ yydefault: } case 54: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:468 + //line go.y:529 { yyVAL.node = Nod(OASOP, yyDollar[1].node, Nodintconst(1)) yyVAL.node.Implicit = true @@ -1570,7 +1602,7 @@ yydefault: } case 55: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:476 + //line go.y:537 { var n, nn *Node @@ -1595,7 +1627,7 @@ yydefault: } case 56: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:499 + //line go.y:560 { var n *Node @@ -1615,7 +1647,7 @@ yydefault: } case 57: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:517 + //line go.y:578 { // will be converted to OCASE // right will point to next case @@ -1626,7 +1658,7 @@ yydefault: } case 58: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:526 + //line go.y:587 { var n, nn *Node @@ -1647,13 +1679,13 @@ yydefault: } case 59: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:547 + //line go.y:608 { markdcl() } case 60: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:551 + //line go.y:612 { if yyDollar[3].list == nil { yyVAL.node = Nod(OEMPTY, nil, nil) @@ -1664,7 +1696,7 @@ yydefault: } case 61: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:562 + //line go.y:623 { // If the last token read by the lexer was consumed // as part of the case, clear it (parser has cleared yychar). @@ -1677,7 +1709,7 @@ yydefault: } case 62: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:573 + //line go.y:634 { // This is the only place in the language where a statement // list is not allowed to drop the final semicolon, because @@ -1697,32 +1729,32 @@ yydefault: } case 63: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:592 + //line go.y:653 { yyVAL.list = nil } case 64: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:596 + //line go.y:657 { yyVAL.list = list(yyDollar[1].list, yyDollar[2].node) } case 65: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:602 + //line go.y:663 { markdcl() } case 66: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:606 + //line go.y:667 { yyVAL.list = yyDollar[3].list popdcl() } case 67: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:613 + //line go.y:674 { yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node) yyVAL.node.List = yyDollar[1].list @@ -1730,7 +1762,7 @@ yydefault: } case 68: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:619 + //line go.y:680 { yyVAL.node = Nod(ORANGE, nil, yyDollar[4].node) yyVAL.node.List = yyDollar[1].list @@ -1739,14 +1771,14 @@ yydefault: } case 69: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:626 + //line go.y:687 { yyVAL.node = Nod(ORANGE, nil, yyDollar[2].node) yyVAL.node.Etype = 0 // := flag } case 70: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:633 + //line go.y:694 { // init ; test ; incr if yyDollar[5].node != nil && yyDollar[5].node.Colas { @@ -1761,7 +1793,7 @@ yydefault: } case 71: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:646 + //line go.y:707 { // normal test yyVAL.node = Nod(OFOR, nil, nil) @@ -1769,27 +1801,27 @@ yydefault: } case 73: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:655 + //line go.y:716 { yyVAL.node = yyDollar[1].node yyVAL.node.Nbody = concat(yyVAL.node.Nbody, yyDollar[2].list) } case 74: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:662 + //line go.y:723 { markdcl() } case 75: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:666 + //line go.y:727 { yyVAL.node = yyDollar[3].node popdcl() } case 76: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:673 + //line go.y:734 { // test yyVAL.node = Nod(OIF, nil, nil) @@ -1797,7 +1829,7 @@ yydefault: } case 77: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:679 + //line go.y:740 { // init ; test yyVAL.node = Nod(OIF, nil, nil) @@ -1808,13 +1840,13 @@ yydefault: } case 78: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:691 + //line go.y:752 { markdcl() } case 79: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:695 + //line go.y:756 { if yyDollar[3].node.Ntest == nil { Yyerror("missing condition in if statement") @@ -1822,13 +1854,13 @@ yydefault: } case 80: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:701 + //line go.y:762 { yyDollar[3].node.Nbody = yyDollar[5].list } case 81: yyDollar = yyS[yypt-8 : yypt+1] - //line go.y:705 + //line go.y:766 { var n *Node var nn *NodeList @@ -1846,13 +1878,13 @@ yydefault: } case 82: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:723 + //line go.y:784 { markdcl() } case 83: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:727 + //line go.y:788 { if yyDollar[4].node.Ntest == nil { Yyerror("missing condition in if statement") @@ -1862,25 +1894,25 @@ yydefault: } case 84: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:736 + //line go.y:797 { yyVAL.list = nil } case 85: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:740 + //line go.y:801 { yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list) } case 86: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:745 + //line go.y:806 { yyVAL.list = nil } case 87: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:749 + //line go.y:810 { l := &NodeList{N: yyDollar[2].node} l.End = l @@ -1888,13 +1920,13 @@ yydefault: } case 88: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:757 + //line go.y:818 { markdcl() } case 89: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:761 + //line go.y:822 { var n *Node n = yyDollar[3].node.Ntest @@ -1905,7 +1937,7 @@ yydefault: } case 90: yyDollar = yyS[yypt-7 : yypt+1] - //line go.y:770 + //line go.y:831 { yyVAL.node = yyDollar[3].node yyVAL.node.Op = OSWITCH @@ -1915,13 +1947,13 @@ yydefault: } case 91: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:780 + //line go.y:841 { typesw = Nod(OXXX, typesw, nil) } case 92: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:784 + //line go.y:845 { yyVAL.node = Nod(OSELECT, nil, nil) yyVAL.node.Lineno = typesw.Lineno @@ -1930,133 +1962,133 @@ yydefault: } case 94: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:797 + //line go.y:858 { yyVAL.node = Nod(OOROR, yyDollar[1].node, yyDollar[3].node) } case 95: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:801 + //line go.y:862 { yyVAL.node = Nod(OANDAND, yyDollar[1].node, yyDollar[3].node) } case 96: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:805 + //line go.y:866 { yyVAL.node = Nod(OEQ, yyDollar[1].node, yyDollar[3].node) } case 97: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:809 + //line go.y:870 { yyVAL.node = Nod(ONE, yyDollar[1].node, yyDollar[3].node) } case 98: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:813 + //line go.y:874 { yyVAL.node = Nod(OLT, yyDollar[1].node, yyDollar[3].node) } case 99: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:817 + //line go.y:878 { yyVAL.node = Nod(OLE, yyDollar[1].node, yyDollar[3].node) } case 100: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:821 + //line go.y:882 { yyVAL.node = Nod(OGE, yyDollar[1].node, yyDollar[3].node) } case 101: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:825 + //line go.y:886 { yyVAL.node = Nod(OGT, yyDollar[1].node, yyDollar[3].node) } case 102: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:829 + //line go.y:890 { yyVAL.node = Nod(OADD, yyDollar[1].node, yyDollar[3].node) } case 103: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:833 + //line go.y:894 { yyVAL.node = Nod(OSUB, yyDollar[1].node, yyDollar[3].node) } case 104: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:837 + //line go.y:898 { yyVAL.node = Nod(OOR, yyDollar[1].node, yyDollar[3].node) } case 105: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:841 + //line go.y:902 { yyVAL.node = Nod(OXOR, yyDollar[1].node, yyDollar[3].node) } case 106: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:845 + //line go.y:906 { yyVAL.node = Nod(OMUL, yyDollar[1].node, yyDollar[3].node) } case 107: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:849 + //line go.y:910 { yyVAL.node = Nod(ODIV, yyDollar[1].node, yyDollar[3].node) } case 108: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:853 + //line go.y:914 { yyVAL.node = Nod(OMOD, yyDollar[1].node, yyDollar[3].node) } case 109: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:857 + //line go.y:918 { yyVAL.node = Nod(OAND, yyDollar[1].node, yyDollar[3].node) } case 110: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:861 + //line go.y:922 { yyVAL.node = Nod(OANDNOT, yyDollar[1].node, yyDollar[3].node) } case 111: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:865 + //line go.y:926 { yyVAL.node = Nod(OLSH, yyDollar[1].node, yyDollar[3].node) } case 112: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:869 + //line go.y:930 { yyVAL.node = Nod(ORSH, yyDollar[1].node, yyDollar[3].node) } case 113: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:874 + //line go.y:935 { yyVAL.node = Nod(OSEND, yyDollar[1].node, yyDollar[3].node) } case 115: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:881 + //line go.y:942 { yyVAL.node = Nod(OIND, yyDollar[2].node, nil) } case 116: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:885 + //line go.y:946 { if yyDollar[2].node.Op == OCOMPLIT { // Special case for &T{...}: turn into (*T){...}. @@ -2069,57 +2101,57 @@ yydefault: } case 117: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:896 + //line go.y:957 { yyVAL.node = Nod(OPLUS, yyDollar[2].node, nil) } case 118: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:900 + //line go.y:961 { yyVAL.node = Nod(OMINUS, yyDollar[2].node, nil) } case 119: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:904 + //line go.y:965 { yyVAL.node = Nod(ONOT, yyDollar[2].node, nil) } case 120: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:908 + //line go.y:969 { Yyerror("the bitwise complement operator is ^") yyVAL.node = Nod(OCOM, yyDollar[2].node, nil) } case 121: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:913 + //line go.y:974 { yyVAL.node = Nod(OCOM, yyDollar[2].node, nil) } case 122: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:917 + //line go.y:978 { yyVAL.node = Nod(ORECV, yyDollar[2].node, nil) } case 123: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:927 + //line go.y:988 { yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) } case 124: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:931 + //line go.y:992 { yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) yyVAL.node.List = yyDollar[3].list } case 125: yyDollar = yyS[yypt-6 : yypt+1] - //line go.y:936 + //line go.y:997 { yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) yyVAL.node.List = yyDollar[3].list @@ -2127,13 +2159,13 @@ yydefault: } case 126: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:944 + //line go.y:1005 { yyVAL.node = nodlit(yyDollar[1].val) } case 128: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:949 + //line go.y:1010 { if yyDollar[1].node.Op == OPACK { var s *Sym @@ -2146,31 +2178,31 @@ yydefault: } case 129: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:960 + //line go.y:1021 { yyVAL.node = Nod(ODOTTYPE, yyDollar[1].node, yyDollar[4].node) } case 130: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:964 + //line go.y:1025 { yyVAL.node = Nod(OTYPESW, nil, yyDollar[1].node) } case 131: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:968 + //line go.y:1029 { yyVAL.node = Nod(OINDEX, yyDollar[1].node, yyDollar[3].node) } case 132: yyDollar = yyS[yypt-6 : yypt+1] - //line go.y:972 + //line go.y:1033 { yyVAL.node = Nod(OSLICE, yyDollar[1].node, Nod(OKEY, yyDollar[3].node, yyDollar[5].node)) } case 133: yyDollar = yyS[yypt-8 : yypt+1] - //line go.y:976 + //line go.y:1037 { if yyDollar[5].node == nil { Yyerror("middle index required in 3-index slice") @@ -2182,7 +2214,7 @@ yydefault: } case 135: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:987 + //line go.y:1048 { // conversion yyVAL.node = Nod(OCALL, yyDollar[1].node, nil) @@ -2190,7 +2222,7 @@ yydefault: } case 136: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:993 + //line go.y:1054 { yyVAL.node = yyDollar[3].node yyVAL.node.Right = yyDollar[1].node @@ -2199,7 +2231,7 @@ yydefault: } case 137: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1000 + //line go.y:1061 { yyVAL.node = yyDollar[3].node yyVAL.node.Right = yyDollar[1].node @@ -2207,7 +2239,7 @@ yydefault: } case 138: yyDollar = yyS[yypt-7 : yypt+1] - //line go.y:1006 + //line go.y:1067 { Yyerror("cannot parenthesize type in composite literal") yyVAL.node = yyDollar[5].node @@ -2216,7 +2248,7 @@ yydefault: } case 140: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1015 + //line go.y:1076 { // composite expression. // make node early so we get the right line number. @@ -2224,13 +2256,13 @@ yydefault: } case 141: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1023 + //line go.y:1084 { yyVAL.node = Nod(OKEY, yyDollar[1].node, yyDollar[3].node) } case 142: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1029 + //line go.y:1090 { // These nodes do not carry line numbers. // Since a composite literal commonly spans several lines, @@ -2245,21 +2277,21 @@ yydefault: } case 143: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1042 + //line go.y:1103 { yyVAL.node = yyDollar[2].node yyVAL.node.List = yyDollar[3].list } case 145: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1050 + //line go.y:1111 { yyVAL.node = yyDollar[2].node yyVAL.node.List = yyDollar[3].list } case 147: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1058 + //line go.y:1119 { yyVAL.node = yyDollar[2].node @@ -2273,19 +2305,19 @@ yydefault: } case 151: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1079 + //line go.y:1140 { yyVAL.i = LBODY } case 152: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1083 + //line go.y:1144 { yyVAL.i = '{' } case 153: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1094 + //line go.y:1155 { if yyDollar[1].sym == nil { yyVAL.node = nil @@ -2295,19 +2327,19 @@ yydefault: } case 154: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1104 + //line go.y:1165 { yyVAL.node = dclname(yyDollar[1].sym) } case 155: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1109 + //line go.y:1170 { yyVAL.node = nil } case 157: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1116 + //line go.y:1177 { yyVAL.sym = yyDollar[1].sym // during imports, unqualified non-exported identifiers are from builtinpkg @@ -2317,13 +2349,13 @@ yydefault: } case 159: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1125 + //line go.y:1186 { yyVAL.sym = nil } case 160: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1131 + //line go.y:1192 { var p *Pkg @@ -2339,7 +2371,7 @@ yydefault: } case 161: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1145 + //line go.y:1206 { var p *Pkg @@ -2355,7 +2387,7 @@ yydefault: } case 162: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1161 + //line go.y:1222 { yyVAL.node = oldname(yyDollar[1].sym) if yyVAL.node.Pack != nil { @@ -2364,38 +2396,38 @@ yydefault: } case 164: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1182 + //line go.y:1243 { Yyerror("final argument in variadic function missing type") yyVAL.node = Nod(ODDD, typenod(typ(TINTER)), nil) } case 165: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1187 + //line go.y:1248 { yyVAL.node = Nod(ODDD, yyDollar[2].node, nil) } case 171: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1198 + //line go.y:1259 { yyVAL.node = yyDollar[2].node } case 175: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1207 + //line go.y:1268 { yyVAL.node = Nod(OIND, yyDollar[2].node, nil) } case 180: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1217 + //line go.y:1278 { yyVAL.node = yyDollar[2].node } case 190: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1238 + //line go.y:1299 { if yyDollar[1].node.Op == OPACK { var s *Sym @@ -2408,53 +2440,53 @@ yydefault: } case 191: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1251 + //line go.y:1312 { yyVAL.node = Nod(OTARRAY, yyDollar[2].node, yyDollar[4].node) } case 192: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1255 + //line go.y:1316 { // array literal of nelem yyVAL.node = Nod(OTARRAY, Nod(ODDD, nil, nil), yyDollar[4].node) } case 193: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1260 + //line go.y:1321 { yyVAL.node = Nod(OTCHAN, yyDollar[2].node, nil) yyVAL.node.Etype = Cboth } case 194: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1265 + //line go.y:1326 { yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil) yyVAL.node.Etype = Csend } case 195: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1270 + //line go.y:1331 { yyVAL.node = Nod(OTMAP, yyDollar[3].node, yyDollar[5].node) } case 198: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1278 + //line go.y:1339 { yyVAL.node = Nod(OIND, yyDollar[2].node, nil) } case 199: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1284 + //line go.y:1345 { yyVAL.node = Nod(OTCHAN, yyDollar[3].node, nil) yyVAL.node.Etype = Crecv } case 200: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1291 + //line go.y:1352 { yyVAL.node = Nod(OTSTRUCT, nil, nil) yyVAL.node.List = yyDollar[3].list @@ -2462,14 +2494,14 @@ yydefault: } case 201: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1297 + //line go.y:1358 { yyVAL.node = Nod(OTSTRUCT, nil, nil) fixlbrace(yyDollar[2].i) } case 202: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1304 + //line go.y:1365 { yyVAL.node = Nod(OTINTER, nil, nil) yyVAL.node.List = yyDollar[3].list @@ -2477,14 +2509,14 @@ yydefault: } case 203: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1310 + //line go.y:1371 { yyVAL.node = Nod(OTINTER, nil, nil) fixlbrace(yyDollar[2].i) } case 204: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1321 + //line go.y:1382 { yyVAL.node = yyDollar[2].node if yyVAL.node == nil { @@ -2502,7 +2534,7 @@ yydefault: } case 205: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1339 + //line go.y:1400 { var t *Node @@ -2535,7 +2567,7 @@ yydefault: } case 206: yyDollar = yyS[yypt-8 : yypt+1] - //line go.y:1370 + //line go.y:1431 { var rcvr, t *Node @@ -2573,7 +2605,7 @@ yydefault: } case 207: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1408 + //line go.y:1469 { var s *Sym var t *Type @@ -2600,7 +2632,7 @@ yydefault: } case 208: yyDollar = yyS[yypt-8 : yypt+1] - //line go.y:1433 + //line go.y:1494 { yyVAL.node = methodname1(newname(yyDollar[4].sym), yyDollar[2].list.N.Right) yyVAL.node.Type = functype(yyDollar[2].list.N, yyDollar[6].list, yyDollar[8].list) @@ -2618,7 +2650,7 @@ yydefault: } case 209: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1451 + //line go.y:1512 { yyDollar[3].list = checkarglist(yyDollar[3].list, 1) yyVAL.node = Nod(OTFUNC, nil, nil) @@ -2627,13 +2659,13 @@ yydefault: } case 210: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1459 + //line go.y:1520 { yyVAL.list = nil } case 211: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1463 + //line go.y:1524 { yyVAL.list = yyDollar[2].list if yyVAL.list == nil { @@ -2642,51 +2674,51 @@ yydefault: } case 212: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1472 + //line go.y:1533 { yyVAL.list = nil } case 213: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1476 + //line go.y:1537 { yyVAL.list = list1(Nod(ODCLFIELD, nil, yyDollar[1].node)) } case 214: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1480 + //line go.y:1541 { yyDollar[2].list = checkarglist(yyDollar[2].list, 0) yyVAL.list = yyDollar[2].list } case 215: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1487 + //line go.y:1548 { closurehdr(yyDollar[1].node) } case 216: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1493 + //line go.y:1554 { yyVAL.node = closurebody(yyDollar[3].list) fixlbrace(yyDollar[2].i) } case 217: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1498 + //line go.y:1559 { yyVAL.node = closurebody(nil) } case 218: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1509 + //line go.y:1570 { yyVAL.list = nil } case 219: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1513 + //line go.y:1574 { yyVAL.list = concat(yyDollar[1].list, yyDollar[2].list) if nsyntaxerrors == 0 { @@ -2699,49 +2731,49 @@ yydefault: } case 221: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1527 + //line go.y:1588 { yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list) } case 223: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1534 + //line go.y:1595 { yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list) } case 224: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1540 + //line go.y:1601 { yyVAL.list = list1(yyDollar[1].node) } case 225: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1544 + //line go.y:1605 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 227: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1551 + //line go.y:1612 { yyVAL.list = concat(yyDollar[1].list, yyDollar[3].list) } case 228: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1557 + //line go.y:1618 { yyVAL.list = list1(yyDollar[1].node) } case 229: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1561 + //line go.y:1622 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 230: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1567 + //line go.y:1628 { var l *NodeList @@ -2767,14 +2799,14 @@ yydefault: } case 231: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1591 + //line go.y:1652 { yyDollar[1].node.Val = yyDollar[2].val yyVAL.list = list1(yyDollar[1].node) } case 232: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1596 + //line go.y:1657 { yyDollar[2].node.Val = yyDollar[4].val yyVAL.list = list1(yyDollar[2].node) @@ -2782,7 +2814,7 @@ yydefault: } case 233: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1602 + //line go.y:1663 { yyDollar[2].node.Right = Nod(OIND, yyDollar[2].node.Right, nil) yyDollar[2].node.Val = yyDollar[3].val @@ -2790,7 +2822,7 @@ yydefault: } case 234: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1608 + //line go.y:1669 { yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil) yyDollar[3].node.Val = yyDollar[5].val @@ -2799,7 +2831,7 @@ yydefault: } case 235: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1615 + //line go.y:1676 { yyDollar[3].node.Right = Nod(OIND, yyDollar[3].node.Right, nil) yyDollar[3].node.Val = yyDollar[5].val @@ -2808,7 +2840,7 @@ yydefault: } case 236: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1624 + //line go.y:1685 { var n *Node @@ -2820,7 +2852,7 @@ yydefault: } case 237: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1634 + //line go.y:1695 { var pkg *Pkg @@ -2835,33 +2867,33 @@ yydefault: } case 238: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1649 + //line go.y:1710 { yyVAL.node = embedded(yyDollar[1].sym, localpkg) } case 239: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1655 + //line go.y:1716 { yyVAL.node = Nod(ODCLFIELD, yyDollar[1].node, yyDollar[2].node) ifacedcl(yyVAL.node) } case 240: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1660 + //line go.y:1721 { yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[1].sym)) } case 241: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1664 + //line go.y:1725 { yyVAL.node = Nod(ODCLFIELD, nil, oldname(yyDollar[2].sym)) Yyerror("cannot parenthesize embedded type") } case 242: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1671 + //line go.y:1732 { // without func keyword yyDollar[2].list = checkarglist(yyDollar[2].list, 1) @@ -2871,7 +2903,7 @@ yydefault: } case 244: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1685 + //line go.y:1746 { yyVAL.node = Nod(ONONAME, nil, nil) yyVAL.node.Sym = yyDollar[1].sym @@ -2879,7 +2911,7 @@ yydefault: } case 245: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1691 + //line go.y:1752 { yyVAL.node = Nod(ONONAME, nil, nil) yyVAL.node.Sym = yyDollar[1].sym @@ -2887,56 +2919,56 @@ yydefault: } case 247: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1700 + //line go.y:1761 { yyVAL.list = list1(yyDollar[1].node) } case 248: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1704 + //line go.y:1765 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 249: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1709 + //line go.y:1770 { yyVAL.list = nil } case 250: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1713 + //line go.y:1774 { yyVAL.list = yyDollar[1].list } case 251: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1721 + //line go.y:1782 { yyVAL.node = nil } case 253: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1726 + //line go.y:1787 { yyVAL.node = liststmt(yyDollar[1].list) } case 255: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1731 + //line go.y:1792 { yyVAL.node = nil } case 261: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1742 + //line go.y:1803 { yyDollar[1].node = Nod(OLABEL, yyDollar[1].node, nil) yyDollar[1].node.Sym = dclstack // context, for goto restrictions } case 262: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1747 + //line go.y:1808 { var l *NodeList @@ -2949,7 +2981,7 @@ yydefault: } case 263: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1758 + //line go.y:1819 { // will be converted to OFALL yyVAL.node = Nod(OXFALL, nil, nil) @@ -2957,38 +2989,38 @@ yydefault: } case 264: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1764 + //line go.y:1825 { yyVAL.node = Nod(OBREAK, yyDollar[2].node, nil) } case 265: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1768 + //line go.y:1829 { yyVAL.node = Nod(OCONTINUE, yyDollar[2].node, nil) } case 266: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1772 + //line go.y:1833 { yyVAL.node = Nod(OPROC, yyDollar[2].node, nil) } case 267: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1776 + //line go.y:1837 { yyVAL.node = Nod(ODEFER, yyDollar[2].node, nil) } case 268: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1780 + //line go.y:1841 { yyVAL.node = Nod(OGOTO, yyDollar[2].node, nil) yyVAL.node.Sym = dclstack // context, for goto restrictions } case 269: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1785 + //line go.y:1846 { yyVAL.node = Nod(ORETURN, nil, nil) yyVAL.node.List = yyDollar[2].list @@ -3010,7 +3042,7 @@ yydefault: } case 270: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1807 + //line go.y:1868 { yyVAL.list = nil if yyDollar[1].node != nil { @@ -3019,7 +3051,7 @@ yydefault: } case 271: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1814 + //line go.y:1875 { yyVAL.list = yyDollar[1].list if yyDollar[3].node != nil { @@ -3028,163 +3060,163 @@ yydefault: } case 272: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1823 + //line go.y:1884 { yyVAL.list = list1(yyDollar[1].node) } case 273: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1827 + //line go.y:1888 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 274: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1833 + //line go.y:1894 { yyVAL.list = list1(yyDollar[1].node) } case 275: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1837 + //line go.y:1898 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 276: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1843 + //line go.y:1904 { yyVAL.list = list1(yyDollar[1].node) } case 277: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1847 + //line go.y:1908 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 278: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1853 + //line go.y:1914 { yyVAL.list = list1(yyDollar[1].node) } case 279: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1857 + //line go.y:1918 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 280: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1866 + //line go.y:1927 { yyVAL.list = list1(yyDollar[1].node) } case 281: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1870 + //line go.y:1931 { yyVAL.list = list1(yyDollar[1].node) } case 282: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1874 + //line go.y:1935 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 283: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:1878 + //line go.y:1939 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 284: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1883 + //line go.y:1944 { yyVAL.list = nil } case 285: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:1887 + //line go.y:1948 { yyVAL.list = yyDollar[1].list } case 290: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1901 + //line go.y:1962 { yyVAL.node = nil } case 292: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1907 + //line go.y:1968 { yyVAL.list = nil } case 294: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1913 + //line go.y:1974 { yyVAL.node = nil } case 296: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1919 + //line go.y:1980 { yyVAL.list = nil } case 298: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1925 + //line go.y:1986 { yyVAL.list = nil } case 300: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1931 + //line go.y:1992 { yyVAL.list = nil } case 302: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:1937 + //line go.y:1998 { yyVAL.val.Ctype = CTxxx } case 304: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1947 + //line go.y:2008 { importimport(yyDollar[2].sym, yyDollar[3].val.U.(string)) } case 305: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1951 + //line go.y:2012 { importvar(yyDollar[2].sym, yyDollar[3].typ) } case 306: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:1955 + //line go.y:2016 { importconst(yyDollar[2].sym, Types[TIDEAL], yyDollar[4].node) } case 307: yyDollar = yyS[yypt-6 : yypt+1] - //line go.y:1959 + //line go.y:2020 { importconst(yyDollar[2].sym, yyDollar[3].typ, yyDollar[5].node) } case 308: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1963 + //line go.y:2024 { importtype(yyDollar[2].typ, yyDollar[3].typ) } case 309: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:1967 + //line go.y:2028 { if yyDollar[2].node == nil { dclcontext = PEXTERN // since we skip the funcbody below @@ -3205,27 +3237,27 @@ yydefault: } case 310: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1988 + //line go.y:2049 { yyVAL.sym = yyDollar[1].sym structpkg = yyVAL.sym.Pkg } case 311: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:1995 + //line go.y:2056 { yyVAL.typ = pkgtype(yyDollar[1].sym) importsym(yyDollar[1].sym, OTYPE) } case 317: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2015 + //line go.y:2076 { yyVAL.typ = pkgtype(yyDollar[1].sym) } case 318: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2019 + //line go.y:2080 { // predefined name like uint8 yyDollar[1].sym = Pkglookup(yyDollar[1].sym.Name, builtinpkg) @@ -3238,43 +3270,43 @@ yydefault: } case 319: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2030 + //line go.y:2091 { yyVAL.typ = aindex(nil, yyDollar[3].typ) } case 320: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:2034 + //line go.y:2095 { yyVAL.typ = aindex(nodlit(yyDollar[2].val), yyDollar[4].typ) } case 321: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:2038 + //line go.y:2099 { yyVAL.typ = maptype(yyDollar[3].typ, yyDollar[5].typ) } case 322: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:2042 + //line go.y:2103 { yyVAL.typ = tostruct(yyDollar[3].list) } case 323: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:2046 + //line go.y:2107 { yyVAL.typ = tointerface(yyDollar[3].list) } case 324: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:2050 + //line go.y:2111 { yyVAL.typ = Ptrto(yyDollar[2].typ) } case 325: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:2054 + //line go.y:2115 { yyVAL.typ = typ(TCHAN) yyVAL.typ.Type = yyDollar[2].typ @@ -3282,7 +3314,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:2060 + //line go.y:2121 { yyVAL.typ = typ(TCHAN) yyVAL.typ.Type = yyDollar[3].typ @@ -3290,7 +3322,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2066 + //line go.y:2127 { yyVAL.typ = typ(TCHAN) yyVAL.typ.Type = yyDollar[3].typ @@ -3298,7 +3330,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2074 + //line go.y:2135 { yyVAL.typ = typ(TCHAN) yyVAL.typ.Type = yyDollar[3].typ @@ -3306,13 +3338,13 @@ yydefault: } case 329: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:2082 + //line go.y:2143 { yyVAL.typ = functype(nil, yyDollar[3].list, yyDollar[5].list) } case 330: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2088 + //line go.y:2149 { yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[2].typ)) if yyDollar[1].sym != nil { @@ -3322,7 +3354,7 @@ yydefault: } case 331: yyDollar = yyS[yypt-4 : yypt+1] - //line go.y:2096 + //line go.y:2157 { var t *Type @@ -3339,7 +3371,7 @@ yydefault: } case 332: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2113 + //line go.y:2174 { var s *Sym var p *Pkg @@ -3363,43 +3395,43 @@ yydefault: } case 333: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:2137 + //line go.y:2198 { yyVAL.node = Nod(ODCLFIELD, newname(yyDollar[1].sym), typenod(functype(fakethis(), yyDollar[3].list, yyDollar[5].list))) } case 334: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2141 + //line go.y:2202 { yyVAL.node = Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ)) } case 335: yyDollar = yyS[yypt-0 : yypt+1] - //line go.y:2146 + //line go.y:2207 { yyVAL.list = nil } case 337: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2153 + //line go.y:2214 { yyVAL.list = yyDollar[2].list } case 338: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2157 + //line go.y:2218 { yyVAL.list = list1(Nod(ODCLFIELD, nil, typenod(yyDollar[1].typ))) } case 339: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2167 + //line go.y:2228 { yyVAL.node = nodlit(yyDollar[1].val) } case 340: yyDollar = yyS[yypt-2 : yypt+1] - //line go.y:2171 + //line go.y:2232 { yyVAL.node = nodlit(yyDollar[2].val) switch yyVAL.node.Val.Ctype { @@ -3419,7 +3451,7 @@ yydefault: } case 341: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2189 + //line go.y:2250 { yyVAL.node = oldname(Pkglookup(yyDollar[1].sym.Name, builtinpkg)) if yyVAL.node.Op != OLITERAL { @@ -3428,7 +3460,7 @@ yydefault: } case 343: yyDollar = yyS[yypt-5 : yypt+1] - //line go.y:2199 + //line go.y:2260 { if yyDollar[2].node.Val.Ctype == CTRUNE && yyDollar[4].node.Val.Ctype == CTINT { yyVAL.node = yyDollar[2].node @@ -3441,37 +3473,37 @@ yydefault: } case 346: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2215 + //line go.y:2276 { yyVAL.list = list1(yyDollar[1].node) } case 347: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2219 + //line go.y:2280 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 348: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2225 + //line go.y:2286 { yyVAL.list = list1(yyDollar[1].node) } case 349: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2229 + //line go.y:2290 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } case 350: yyDollar = yyS[yypt-1 : yypt+1] - //line go.y:2235 + //line go.y:2296 { yyVAL.list = list1(yyDollar[1].node) } case 351: yyDollar = yyS[yypt-3 : yypt+1] - //line go.y:2239 + //line go.y:2300 { yyVAL.list = list(yyDollar[1].list, yyDollar[3].node) } diff --git a/src/cmd/internal/gc/y.output b/src/cmd/internal/gc/y.output index f105838a7f..2821702aea 100644 --- a/src/cmd/internal/gc/y.output +++ b/src/cmd/internal/gc/y.output @@ -3,7 +3,7 @@ state 0 $accept: .file $end $$4: . (4) - . reduce 4 (src line 149) + . reduce 4 (src line 210) file goto 1 loadsys goto 2 @@ -21,7 +21,7 @@ state 2 package: . (2) LPACKAGE shift 5 - . reduce 2 (src line 132) + . reduce 2 (src line 193) package goto 4 @@ -37,7 +37,7 @@ state 4 file: loadsys package.imports xdcl_list imports: . (6) - . reduce 6 (src line 166) + . reduce 6 (src line 227) imports goto 8 @@ -56,7 +56,7 @@ state 6 loadsys: $$4 import_package.import_there $$21: . (21) - . reduce 21 (src line 273) + . reduce 21 (src line 334) import_there goto 14 $$21 goto 15 @@ -74,7 +74,7 @@ state 8 xdcl_list: . (218) LIMPORT shift 19 - . reduce 218 (src line 1508) + . reduce 218 (src line 1569) xdcl_list goto 17 import goto 18 @@ -89,19 +89,19 @@ state 9 state 10 sym: LNAME. (157) - . reduce 157 (src line 1114) + . reduce 157 (src line 1175) state 11 sym: hidden_importsym. (158) - . reduce 158 (src line 1123) + . reduce 158 (src line 1184) state 12 sym: '?'. (159) - . reduce 159 (src line 1124) + . reduce 159 (src line 1185) state 13 @@ -115,14 +115,14 @@ state 13 state 14 loadsys: $$4 import_package import_there. (5) - . reduce 5 (src line 160) + . reduce 5 (src line 221) state 15 import_there: $$21.hidden_import_list '$' '$' hidden_import_list: . (344) - . reduce 344 (src line 2210) + . reduce 344 (src line 2271) hidden_import_list goto 22 @@ -131,7 +131,7 @@ state 16 import_safety: . (19) LNAME shift 24 - . reduce 19 (src line 265) + . reduce 19 (src line 326) import_safety goto 23 @@ -140,7 +140,7 @@ state 17 xdcl_list: xdcl_list.xdcl ';' xdcl: . (23) - $end reduce 1 (src line 123) + $end reduce 1 (src line 184) error shift 29 LLITERAL shift 68 LBREAK shift 41 @@ -170,7 +170,7 @@ state 17 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 23 (src line 286) + ';' reduce 23 (src line 347) '!' shift 62 '~' shift 63 '[' shift 77 @@ -236,7 +236,7 @@ state 19 state 20 package: LPACKAGE sym ';'. (3) - . reduce 3 (src line 139) + . reduce 3 (src line 200) state 21 @@ -271,7 +271,7 @@ state 23 state 24 import_safety: LNAME. (20) - . reduce 20 (src line 266) + . reduce 20 (src line 327) state 25 @@ -284,25 +284,25 @@ state 25 state 26 xdcl: common_dcl. (24) - . reduce 24 (src line 291) + . reduce 24 (src line 352) state 27 xdcl: xfndcl. (25) - . reduce 25 (src line 292) + . reduce 25 (src line 353) state 28 xdcl: non_dcl_stmt. (26) - . reduce 26 (src line 296) + . reduce 26 (src line 357) state 29 xdcl: error. (27) - . reduce 27 (src line 301) + . reduce 27 (src line 362) state 30 @@ -373,31 +373,31 @@ state 33 state 34 non_dcl_stmt: simple_stmt. (256) - . reduce 256 (src line 1735) + . reduce 256 (src line 1796) state 35 non_dcl_stmt: for_stmt. (257) - . reduce 257 (src line 1737) + . reduce 257 (src line 1798) state 36 non_dcl_stmt: switch_stmt. (258) - . reduce 258 (src line 1738) + . reduce 258 (src line 1799) state 37 non_dcl_stmt: select_stmt. (259) - . reduce 259 (src line 1739) + . reduce 259 (src line 1800) state 38 non_dcl_stmt: if_stmt. (260) - . reduce 260 (src line 1740) + . reduce 260 (src line 1801) state 39 @@ -410,7 +410,7 @@ state 39 state 40 non_dcl_stmt: LFALL. (263) - . reduce 263 (src line 1757) + . reduce 263 (src line 1818) state 41 @@ -420,7 +420,7 @@ state 41 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 155 (src line 1108) + . reduce 155 (src line 1169) sym goto 119 new_name goto 118 @@ -434,7 +434,7 @@ state 42 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 155 (src line 1108) + . reduce 155 (src line 1169) sym goto 119 new_name goto 118 @@ -538,7 +538,7 @@ state 46 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 292 (src line 1906) + . reduce 292 (src line 1967) sym goto 123 expr goto 129 @@ -562,7 +562,7 @@ state 46 state 47 lconst: LCONST. (38) - . reduce 38 (src line 355) + . reduce 38 (src line 416) state 48 @@ -593,7 +593,7 @@ state 48 expr_list: expr. (276) LASOP shift 130 - LCOLAS reduce 276 (src line 1841) + LCOLAS reduce 276 (src line 1902) LANDAND shift 134 LANDNOT shift 149 LCOMM shift 152 @@ -616,9 +616,9 @@ state 48 '/' shift 146 '%' shift 147 '&' shift 148 - '=' reduce 276 (src line 1841) - ',' reduce 276 (src line 1841) - . reduce 49 (src line 411) + '=' reduce 276 (src line 1902) + ',' reduce 276 (src line 1902) + . reduce 49 (src line 472) state 49 @@ -636,7 +636,7 @@ state 50 for_stmt: LFOR.$$74 for_body $$74: . (74) - . reduce 74 (src line 660) + . reduce 74 (src line 721) $$74 goto 156 @@ -644,7 +644,7 @@ state 51 switch_stmt: LSWITCH.$$88 if_header $$89 LBODY caseblock_list '}' $$88: . (88) - . reduce 88 (src line 755) + . reduce 88 (src line 816) $$88 goto 157 @@ -652,7 +652,7 @@ state 52 select_stmt: LSELECT.$$91 LBODY caseblock_list '}' $$91: . (91) - . reduce 91 (src line 778) + . reduce 91 (src line 839) $$91 goto 158 @@ -660,28 +660,28 @@ state 53 if_stmt: LIF.$$78 if_header $$79 loop_body $$80 elseif_list else $$78: . (78) - . reduce 78 (src line 689) + . reduce 78 (src line 750) $$78 goto 159 state 54 labelname: new_name. (163) - . reduce 163 (src line 1168) + . reduce 163 (src line 1229) state 55 expr: uexpr. (93) - . reduce 93 (src line 794) + . reduce 93 (src line 855) state 56 new_name: sym. (153) name: sym. (162) - ':' reduce 153 (src line 1092) - . reduce 162 (src line 1159) + ':' reduce 153 (src line 1153) + . reduce 162 (src line 1220) state 57 @@ -699,7 +699,7 @@ state 57 '(' shift 160 '.' shift 161 '[' shift 162 - . reduce 114 (src line 878) + . reduce 114 (src line 939) state 58 @@ -1027,7 +1027,7 @@ state 66 pexpr: pexpr_no_paren. (146) '{' shift 171 - . reduce 146 (src line 1055) + . reduce 146 (src line 1116) state 67 @@ -1078,19 +1078,19 @@ state 67 state 68 pexpr_no_paren: LLITERAL. (126) - . reduce 126 (src line 942) + . reduce 126 (src line 1003) state 69 pexpr_no_paren: name. (127) - . reduce 127 (src line 947) + . reduce 127 (src line 1008) state 70 pexpr_no_paren: pseudocall. (134) - . reduce 134 (src line 985) + . reduce 134 (src line 1046) state 71 @@ -1112,23 +1112,23 @@ state 72 state 73 pexpr_no_paren: fnliteral. (139) - . reduce 139 (src line 1012) + . reduce 139 (src line 1073) state 74 convtype: fntype. (181) fnlitdcl: fntype. (215) - '(' reduce 181 (src line 1221) - . reduce 215 (src line 1485) + '(' reduce 181 (src line 1282) + . reduce 215 (src line 1546) state 75 convtype: othertype. (182) comptype: othertype. (183) - '(' reduce 182 (src line 1223) - . reduce 183 (src line 1225) + '(' reduce 182 (src line 1284) + . reduce 183 (src line 1286) state 76 @@ -1167,7 +1167,7 @@ state 77 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 290 (src line 1900) + . reduce 290 (src line 1961) sym goto 123 expr goto 188 @@ -1226,13 +1226,13 @@ state 79 state 80 othertype: structtype. (196) - . reduce 196 (src line 1273) + . reduce 196 (src line 1334) state 81 othertype: interfacetype. (197) - . reduce 197 (src line 1274) + . reduce 197 (src line 1335) state 82 @@ -1258,13 +1258,13 @@ state 83 state 84 imports: imports import ';'. (7) - . reduce 7 (src line 167) + . reduce 7 (src line 228) state 85 import: LIMPORT import_stmt. (8) - . reduce 8 (src line 169) + . reduce 8 (src line 230) state 86 @@ -1291,7 +1291,7 @@ state 87 $$21: . (21) LPACKAGE shift 7 - . reduce 21 (src line 273) + . reduce 21 (src line 334) import_package goto 204 import_there goto 205 @@ -1300,7 +1300,7 @@ state 87 state 88 import_here: LLITERAL. (15) - . reduce 15 (src line 225) + . reduce 15 (src line 286) state 89 @@ -1336,7 +1336,7 @@ state 92 state 93 hidden_import_list: hidden_import_list hidden_import. (345) - . reduce 345 (src line 2211) + . reduce 345 (src line 2272) state 94 @@ -1389,19 +1389,19 @@ state 98 state 99 import_package: LPACKAGE LNAME import_safety ';'. (18) - . reduce 18 (src line 248) + . reduce 18 (src line 309) state 100 xdcl_list: xdcl_list xdcl ';'. (219) - . reduce 219 (src line 1512) + . reduce 219 (src line 1573) state 101 common_dcl: LVAR vardcl. (28) - . reduce 28 (src line 306) + . reduce 28 (src line 367) state 102 @@ -1458,19 +1458,19 @@ state 103 state 104 dcl_name_list: dcl_name. (274) - . reduce 274 (src line 1831) + . reduce 274 (src line 1892) state 105 dcl_name: sym. (154) - . reduce 154 (src line 1102) + . reduce 154 (src line 1163) state 106 common_dcl: lconst constdcl. (31) - . reduce 31 (src line 319) + . reduce 31 (src line 380) state 107 @@ -1526,7 +1526,7 @@ state 108 state 109 common_dcl: LTYPE typedcl. (35) - . reduce 35 (src line 342) + . reduce 35 (src line 403) state 110 @@ -1577,7 +1577,7 @@ state 111 state 112 typedclname: sym. (47) - . reduce 47 (src line 396) + . reduce 47 (src line 457) state 113 @@ -1585,7 +1585,7 @@ state 113 fnbody: . (210) '{' shift 242 - . reduce 210 (src line 1458) + . reduce 210 (src line 1519) fnbody goto 241 @@ -1607,7 +1607,7 @@ state 114 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 249 (src line 1708) + . reduce 249 (src line 1769) sym goto 247 ntype goto 249 @@ -1637,43 +1637,43 @@ state 116 non_dcl_stmt: labelname ':'.$$261 stmt $$261: . (261) - . reduce 261 (src line 1741) + . reduce 261 (src line 1802) $$261 goto 252 state 117 non_dcl_stmt: LBREAK onew_name. (264) - . reduce 264 (src line 1763) + . reduce 264 (src line 1824) state 118 onew_name: new_name. (156) - . reduce 156 (src line 1112) + . reduce 156 (src line 1173) state 119 new_name: sym. (153) - . reduce 153 (src line 1092) + . reduce 153 (src line 1153) state 120 non_dcl_stmt: LCONTINUE onew_name. (265) - . reduce 265 (src line 1767) + . reduce 265 (src line 1828) state 121 pexpr_no_paren: pseudocall. (134) non_dcl_stmt: LGO pseudocall. (266) - '(' reduce 134 (src line 985) - '.' reduce 134 (src line 985) - '{' reduce 134 (src line 985) - '[' reduce 134 (src line 985) - . reduce 266 (src line 1771) + '(' reduce 134 (src line 1046) + '.' reduce 134 (src line 1046) + '{' reduce 134 (src line 1046) + '[' reduce 134 (src line 1046) + . reduce 266 (src line 1832) state 122 @@ -1696,7 +1696,7 @@ state 122 state 123 name: sym. (162) - . reduce 162 (src line 1159) + . reduce 162 (src line 1220) state 124 @@ -1710,23 +1710,23 @@ state 125 pexpr_no_paren: pseudocall. (134) non_dcl_stmt: LDEFER pseudocall. (267) - '(' reduce 134 (src line 985) - '.' reduce 134 (src line 985) - '{' reduce 134 (src line 985) - '[' reduce 134 (src line 985) - . reduce 267 (src line 1775) + '(' reduce 134 (src line 1046) + '.' reduce 134 (src line 1046) + '{' reduce 134 (src line 1046) + '[' reduce 134 (src line 1046) + . reduce 267 (src line 1836) state 126 non_dcl_stmt: LGOTO new_name. (268) - . reduce 268 (src line 1779) + . reduce 268 (src line 1840) state 127 non_dcl_stmt: LRETURN oexpr_list. (269) - . reduce 269 (src line 1784) + . reduce 269 (src line 1845) state 128 @@ -1734,7 +1734,7 @@ state 128 oexpr_list: expr_list. (293) ',' shift 155 - . reduce 293 (src line 1910) + . reduce 293 (src line 1971) state 129 @@ -1780,7 +1780,7 @@ state 129 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 276 (src line 1841) + . reduce 276 (src line 1902) state 130 @@ -1827,13 +1827,13 @@ state 130 state 131 simple_stmt: expr LINC. (53) - . reduce 53 (src line 461) + . reduce 53 (src line 522) state 132 simple_stmt: expr LDEC. (54) - . reduce 54 (src line 467) + . reduce 54 (src line 528) state 133 @@ -2805,7 +2805,7 @@ state 156 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 294 (src line 1912) + . reduce 294 (src line 1973) sym goto 123 expr goto 48 @@ -2853,7 +2853,7 @@ state 157 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 294 (src line 1912) + . reduce 294 (src line 1973) sym goto 123 expr goto 48 @@ -2906,7 +2906,7 @@ state 159 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 294 (src line 1912) + . reduce 294 (src line 1973) sym goto 123 expr goto 48 @@ -3016,7 +3016,7 @@ state 162 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 290 (src line 1900) + . reduce 290 (src line 1961) sym goto 123 expr goto 294 @@ -3039,56 +3039,56 @@ state 162 state 163 uexpr: '*' uexpr. (115) - . reduce 115 (src line 880) + . reduce 115 (src line 941) state 164 uexpr: '&' uexpr. (116) - . reduce 116 (src line 884) + . reduce 116 (src line 945) state 165 uexpr: '+' uexpr. (117) - . reduce 117 (src line 895) + . reduce 117 (src line 956) state 166 uexpr: '-' uexpr. (118) - . reduce 118 (src line 899) + . reduce 118 (src line 960) state 167 uexpr: '!' uexpr. (119) - . reduce 119 (src line 903) + . reduce 119 (src line 964) state 168 uexpr: '~' uexpr. (120) - . reduce 120 (src line 907) + . reduce 120 (src line 968) state 169 uexpr: '^' uexpr. (121) - . reduce 121 (src line 912) + . reduce 121 (src line 973) state 170 uexpr: LCOMM uexpr. (122) - . reduce 122 (src line 916) + . reduce 122 (src line 977) state 171 pexpr_no_paren: pexpr_no_paren '{'.start_complit braced_keyval_list '}' start_complit: . (140) - . reduce 140 (src line 1014) + . reduce 140 (src line 1075) start_complit goto 296 @@ -3143,19 +3143,19 @@ state 173 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 148 (src line 1070) + . reduce 148 (src line 1131) state 174 expr_or_type: non_expr_type. (149) - . reduce 149 (src line 1072) + . reduce 149 (src line 1133) state 175 non_expr_type: recvchantype. (172) - . reduce 172 (src line 1202) + . reduce 172 (src line 1263) state 176 @@ -3163,11 +3163,11 @@ state 176 convtype: fntype. (181) fnlitdcl: fntype. (215) - error reduce 215 (src line 1485) - LBODY reduce 215 (src line 1485) - '(' reduce 181 (src line 1221) - '{' reduce 215 (src line 1485) - . reduce 173 (src line 1204) + error reduce 215 (src line 1546) + LBODY reduce 215 (src line 1546) + '(' reduce 181 (src line 1282) + '{' reduce 215 (src line 1546) + . reduce 173 (src line 1265) state 177 @@ -3175,10 +3175,10 @@ state 177 convtype: othertype. (182) comptype: othertype. (183) - LBODY reduce 183 (src line 1225) - '(' reduce 182 (src line 1223) - '{' reduce 183 (src line 1225) - . reduce 174 (src line 1205) + LBODY reduce 183 (src line 1286) + '(' reduce 182 (src line 1284) + '{' reduce 183 (src line 1286) + . reduce 174 (src line 1266) state 178 @@ -3310,20 +3310,20 @@ state 181 pexpr_no_paren: comptype lbrace.start_complit braced_keyval_list '}' start_complit: . (140) - . reduce 140 (src line 1014) + . reduce 140 (src line 1075) start_complit goto 301 state 182 lbrace: LBODY. (151) - . reduce 151 (src line 1077) + . reduce 151 (src line 1138) state 183 lbrace: '{'. (152) - . reduce 152 (src line 1082) + . reduce 152 (src line 1143) state 184 @@ -3359,9 +3359,9 @@ state 184 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 251 (src line 1720) + ';' reduce 251 (src line 1781) '{' shift 308 - '}' reduce 251 (src line 1720) + '}' reduce 251 (src line 1781) '!' shift 62 '~' shift 63 '[' shift 77 @@ -3403,7 +3403,7 @@ state 184 state 185 fnliteral: fnlitdcl error. (217) - . reduce 217 (src line 1497) + . reduce 217 (src line 1558) state 186 @@ -3463,13 +3463,13 @@ state 188 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 291 (src line 1904) + . reduce 291 (src line 1965) state 189 othertype: LCHAN non_recvchantype. (193) - . reduce 193 (src line 1259) + . reduce 193 (src line 1320) state 190 @@ -3504,25 +3504,25 @@ state 190 state 191 non_recvchantype: fntype. (176) - . reduce 176 (src line 1211) + . reduce 176 (src line 1272) state 192 non_recvchantype: othertype. (177) - . reduce 177 (src line 1213) + . reduce 177 (src line 1274) state 193 non_recvchantype: ptrtype. (178) - . reduce 178 (src line 1214) + . reduce 178 (src line 1275) state 194 non_recvchantype: dotname. (179) - . reduce 179 (src line 1215) + . reduce 179 (src line 1276) state 195 @@ -3588,7 +3588,7 @@ state 197 dotname: name.'.' sym '.' shift 314 - . reduce 189 (src line 1235) + . reduce 189 (src line 1296) state 198 @@ -3665,27 +3665,27 @@ state 201 osemi: . (286) ';' shift 333 - . reduce 286 (src line 1894) + . reduce 286 (src line 1955) osemi goto 332 state 202 import: LIMPORT '(' ')'. (10) - . reduce 10 (src line 172) + . reduce 10 (src line 233) state 203 import_stmt_list: import_stmt. (13) - . reduce 13 (src line 221) + . reduce 13 (src line 282) state 204 import_stmt: import_here import_package.import_there $$21: . (21) - . reduce 21 (src line 273) + . reduce 21 (src line 334) import_there goto 334 $$21 goto 15 @@ -3693,37 +3693,37 @@ state 204 state 205 import_stmt: import_here import_there. (12) - . reduce 12 (src line 210) + . reduce 12 (src line 271) state 206 import_here: sym LLITERAL. (16) - . reduce 16 (src line 233) + . reduce 16 (src line 294) state 207 import_here: '.' LLITERAL. (17) - . reduce 17 (src line 240) + . reduce 17 (src line 301) state 208 hidden_importsym: '@' LLITERAL '.' LNAME. (160) - . reduce 160 (src line 1129) + . reduce 160 (src line 1190) state 209 hidden_importsym: '@' LLITERAL '.' '?'. (161) - . reduce 161 (src line 1144) + . reduce 161 (src line 1205) state 210 import_there: $$21 hidden_import_list '$' '$'. (22) - . reduce 22 (src line 277) + . reduce 22 (src line 338) state 211 @@ -3757,7 +3757,7 @@ state 212 state 213 hidden_pkg_importsym: hidden_importsym. (310) - . reduce 310 (src line 1986) + . reduce 310 (src line 2047) state 214 @@ -3807,7 +3807,7 @@ state 215 state 216 hidden_pkgtype: hidden_pkg_importsym. (311) - . reduce 311 (src line 1993) + . reduce 311 (src line 2054) state 217 @@ -3815,7 +3815,7 @@ state 217 fnbody: . (210) '{' shift 242 - . reduce 210 (src line 1458) + . reduce 210 (src line 1519) fnbody goto 353 @@ -3845,20 +3845,20 @@ state 220 osemi: . (286) ';' shift 359 - . reduce 286 (src line 1894) + . reduce 286 (src line 1955) osemi goto 358 state 221 common_dcl: LVAR '(' ')'. (30) - . reduce 30 (src line 315) + . reduce 30 (src line 376) state 222 vardcl_list: vardcl. (220) - . reduce 220 (src line 1524) + . reduce 220 (src line 1585) state 223 @@ -3866,7 +3866,7 @@ state 223 vardcl: dcl_name_list ntype.'=' expr_list '=' shift 360 - . reduce 39 (src line 361) + . reduce 39 (src line 422) state 224 @@ -3926,31 +3926,31 @@ state 225 state 226 ntype: recvchantype. (166) - . reduce 166 (src line 1191) + . reduce 166 (src line 1252) state 227 ntype: fntype. (167) - . reduce 167 (src line 1193) + . reduce 167 (src line 1254) state 228 ntype: othertype. (168) - . reduce 168 (src line 1194) + . reduce 168 (src line 1255) state 229 ntype: ptrtype. (169) - . reduce 169 (src line 1195) + . reduce 169 (src line 1256) state 230 ntype: dotname. (170) - . reduce 170 (src line 1196) + . reduce 170 (src line 1257) state 231 @@ -3995,14 +3995,14 @@ state 233 osemi: . (286) ';' shift 366 - . reduce 286 (src line 1894) + . reduce 286 (src line 1955) osemi goto 365 state 234 common_dcl: lconst '(' ')'. (34) - . reduce 34 (src line 337) + . reduce 34 (src line 398) state 235 @@ -4060,32 +4060,32 @@ state 237 osemi: . (286) ';' shift 370 - . reduce 286 (src line 1894) + . reduce 286 (src line 1955) osemi goto 369 state 238 common_dcl: LTYPE '(' ')'. (37) - . reduce 37 (src line 350) + . reduce 37 (src line 411) state 239 typedcl_list: typedcl. (224) - . reduce 224 (src line 1538) + . reduce 224 (src line 1599) state 240 typedcl: typedclname ntype. (48) - . reduce 48 (src line 405) + . reduce 48 (src line 466) state 241 xfndcl: LFUNC fndcl fnbody. (204) - . reduce 204 (src line 1319) + . reduce 204 (src line 1380) state 242 @@ -4121,9 +4121,9 @@ state 242 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 251 (src line 1720) + ';' reduce 251 (src line 1781) '{' shift 308 - '}' reduce 251 (src line 1720) + '}' reduce 251 (src line 1781) '!' shift 62 '~' shift 63 '[' shift 77 @@ -4176,20 +4176,20 @@ state 244 ocomma: . (288) ',' shift 373 - . reduce 288 (src line 1897) + . reduce 288 (src line 1958) ocomma goto 374 state 245 arg_type_list: arg_type. (247) - . reduce 247 (src line 1698) + . reduce 247 (src line 1759) state 246 arg_type: name_or_type. (243) - . reduce 243 (src line 1682) + . reduce 243 (src line 1743) state 247 @@ -4210,7 +4210,7 @@ state 247 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 162 (src line 1159) + . reduce 162 (src line 1220) sym goto 123 ntype goto 249 @@ -4229,13 +4229,13 @@ state 247 state 248 arg_type: dotdotdot. (246) - . reduce 246 (src line 1696) + . reduce 246 (src line 1757) state 249 name_or_type: ntype. (150) - . reduce 150 (src line 1074) + . reduce 150 (src line 1135) state 250 @@ -4254,7 +4254,7 @@ state 250 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 164 (src line 1180) + . reduce 164 (src line 1241) sym goto 123 ntype goto 377 @@ -4285,7 +4285,7 @@ state 251 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 249 (src line 1708) + . reduce 249 (src line 1769) sym goto 247 ntype goto 249 @@ -4311,11 +4311,11 @@ state 252 error shift 307 LLITERAL shift 68 LBREAK shift 41 - LCASE reduce 251 (src line 1720) + LCASE reduce 251 (src line 1781) LCHAN shift 78 LCONST shift 47 LCONTINUE shift 42 - LDEFAULT reduce 251 (src line 1720) + LDEFAULT reduce 251 (src line 1781) LDEFER shift 44 LFALL shift 40 LFOR shift 50 @@ -4339,9 +4339,9 @@ state 252 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 251 (src line 1720) + ';' reduce 251 (src line 1781) '{' shift 308 - '}' reduce 251 (src line 1720) + '}' reduce 251 (src line 1781) '!' shift 62 '~' shift 63 '[' shift 77 @@ -4396,7 +4396,7 @@ state 253 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 249 (src line 1708) + . reduce 249 (src line 1769) sym goto 247 ntype goto 249 @@ -4458,7 +4458,7 @@ state 254 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 50 (src line 426) + . reduce 50 (src line 487) state 255 @@ -4502,7 +4502,7 @@ state 255 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 94 (src line 796) + . reduce 94 (src line 857) state 256 @@ -4545,7 +4545,7 @@ state 256 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 95 (src line 800) + . reduce 95 (src line 861) state 257 @@ -4582,7 +4582,7 @@ state 257 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 96 (src line 804) + . reduce 96 (src line 865) state 258 @@ -4619,7 +4619,7 @@ state 258 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 97 (src line 808) + . reduce 97 (src line 869) state 259 @@ -4656,7 +4656,7 @@ state 259 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 98 (src line 812) + . reduce 98 (src line 873) state 260 @@ -4693,7 +4693,7 @@ state 260 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 99 (src line 816) + . reduce 99 (src line 877) state 261 @@ -4730,7 +4730,7 @@ state 261 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 100 (src line 820) + . reduce 100 (src line 881) state 262 @@ -4767,7 +4767,7 @@ state 262 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 101 (src line 824) + . reduce 101 (src line 885) state 263 @@ -4800,7 +4800,7 @@ state 263 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 102 (src line 828) + . reduce 102 (src line 889) state 264 @@ -4833,7 +4833,7 @@ state 264 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 103 (src line 832) + . reduce 103 (src line 893) state 265 @@ -4866,7 +4866,7 @@ state 265 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 104 (src line 836) + . reduce 104 (src line 897) state 266 @@ -4899,7 +4899,7 @@ state 266 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 105 (src line 840) + . reduce 105 (src line 901) state 267 @@ -4925,7 +4925,7 @@ state 267 expr: expr.LRSH expr expr: expr.LCOMM expr - . reduce 106 (src line 844) + . reduce 106 (src line 905) state 268 @@ -4951,7 +4951,7 @@ state 268 expr: expr.LRSH expr expr: expr.LCOMM expr - . reduce 107 (src line 848) + . reduce 107 (src line 909) state 269 @@ -4977,7 +4977,7 @@ state 269 expr: expr.LRSH expr expr: expr.LCOMM expr - . reduce 108 (src line 852) + . reduce 108 (src line 913) state 270 @@ -5003,7 +5003,7 @@ state 270 expr: expr.LRSH expr expr: expr.LCOMM expr - . reduce 109 (src line 856) + . reduce 109 (src line 917) state 271 @@ -5029,7 +5029,7 @@ state 271 expr: expr.LRSH expr expr: expr.LCOMM expr - . reduce 110 (src line 860) + . reduce 110 (src line 921) state 272 @@ -5055,7 +5055,7 @@ state 272 expr: expr.LRSH expr expr: expr.LCOMM expr - . reduce 111 (src line 864) + . reduce 111 (src line 925) state 273 @@ -5081,7 +5081,7 @@ state 273 expr: expr LRSH expr. (112) expr: expr.LCOMM expr - . reduce 112 (src line 868) + . reduce 112 (src line 929) state 274 @@ -5126,7 +5126,7 @@ state 274 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 113 (src line 873) + . reduce 113 (src line 934) state 275 @@ -5134,7 +5134,7 @@ state 275 expr_list: expr_list.',' expr ',' shift 155 - . reduce 51 (src line 431) + . reduce 51 (src line 492) state 276 @@ -5142,7 +5142,7 @@ state 276 expr_list: expr_list.',' expr ',' shift 155 - . reduce 52 (src line 443) + . reduce 52 (src line 504) state 277 @@ -5188,13 +5188,13 @@ state 277 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 277 (src line 1846) + . reduce 277 (src line 1907) state 278 for_stmt: LFOR $$74 for_body. (75) - . reduce 75 (src line 665) + . reduce 75 (src line 726) state 279 @@ -5210,19 +5210,19 @@ state 280 for_header: osimple_stmt. (71) ';' shift 383 - . reduce 71 (src line 645) + . reduce 71 (src line 706) state 281 for_header: range_stmt. (72) - . reduce 72 (src line 651) + . reduce 72 (src line 712) state 282 osimple_stmt: simple_stmt. (295) - . reduce 295 (src line 1916) + . reduce 295 (src line 1977) state 283 @@ -5283,7 +5283,7 @@ state 285 switch_stmt: LSWITCH $$88 if_header.$$89 LBODY caseblock_list '}' $$89: . (89) - . reduce 89 (src line 760) + . reduce 89 (src line 821) $$89 goto 387 @@ -5292,14 +5292,14 @@ state 286 if_header: osimple_stmt.';' osimple_stmt ';' shift 388 - . reduce 76 (src line 671) + . reduce 76 (src line 732) state 287 select_stmt: LSELECT $$91 LBODY.caseblock_list '}' caseblock_list: . (63) - . reduce 63 (src line 591) + . reduce 63 (src line 652) caseblock_list goto 389 @@ -5307,14 +5307,14 @@ state 288 if_stmt: LIF $$78 if_header.$$79 loop_body $$80 elseif_list else $$79: . (79) - . reduce 79 (src line 694) + . reduce 79 (src line 755) $$79 goto 390 state 289 pseudocall: pexpr '(' ')'. (123) - . reduce 123 (src line 925) + . reduce 123 (src line 986) state 290 @@ -5325,20 +5325,20 @@ state 290 LDDD shift 392 ',' shift 393 - . reduce 288 (src line 1897) + . reduce 288 (src line 1958) ocomma goto 391 state 291 expr_or_type_list: expr_or_type. (278) - . reduce 278 (src line 1851) + . reduce 278 (src line 1912) state 292 pexpr_no_paren: pexpr '.' sym. (128) - . reduce 128 (src line 948) + . reduce 128 (src line 1009) state 293 @@ -5432,7 +5432,7 @@ state 294 '%' shift 147 '&' shift 148 ']' shift 396 - . reduce 291 (src line 1904) + . reduce 291 (src line 1965) state 295 @@ -5467,7 +5467,7 @@ state 296 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 284 (src line 1882) + . reduce 284 (src line 1943) sym goto 123 expr goto 402 @@ -5495,13 +5495,13 @@ state 297 pexpr: '(' expr_or_type ')'. (147) '{' shift 404 - . reduce 147 (src line 1057) + . reduce 147 (src line 1118) state 298 non_expr_type: '*' non_expr_type. (175) - . reduce 175 (src line 1206) + . reduce 175 (src line 1267) state 299 @@ -5581,7 +5581,7 @@ state 300 '%' shift 147 '&' shift 148 ',' shift 413 - . reduce 288 (src line 1897) + . reduce 288 (src line 1958) ocomma goto 412 @@ -5609,7 +5609,7 @@ state 301 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 284 (src line 1882) + . reduce 284 (src line 1943) sym goto 123 expr goto 402 @@ -5644,38 +5644,38 @@ state 302 state 303 stmt_list: stmt. (270) - . reduce 270 (src line 1805) + . reduce 270 (src line 1866) state 304 stmt: compound_stmt. (252) - . reduce 252 (src line 1724) + . reduce 252 (src line 1785) state 305 stmt: common_dcl. (253) - . reduce 253 (src line 1725) + . reduce 253 (src line 1786) state 306 stmt: non_dcl_stmt. (254) - . reduce 254 (src line 1729) + . reduce 254 (src line 1790) state 307 stmt: error. (255) - . reduce 255 (src line 1730) + . reduce 255 (src line 1791) state 308 compound_stmt: '{'.$$59 stmt_list '}' $$59: . (59) - . reduce 59 (src line 545) + . reduce 59 (src line 606) $$59 goto 417 @@ -5740,7 +5740,7 @@ state 310 state 311 othertype: LCHAN LCOMM ntype. (194) - . reduce 194 (src line 1264) + . reduce 194 (src line 1325) state 312 @@ -5753,7 +5753,7 @@ state 312 state 313 ptrtype: '*' ntype. (198) - . reduce 198 (src line 1276) + . reduce 198 (src line 1337) state 314 @@ -5780,20 +5780,20 @@ state 316 osemi: . (286) ';' shift 424 - . reduce 286 (src line 1894) + . reduce 286 (src line 1955) osemi goto 423 state 317 structtype: LSTRUCT lbrace '}'. (201) - . reduce 201 (src line 1296) + . reduce 201 (src line 1357) state 318 structdcl_list: structdcl. (226) - . reduce 226 (src line 1548) + . reduce 226 (src line 1609) state 319 @@ -5832,7 +5832,7 @@ state 320 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 427 @@ -5861,13 +5861,13 @@ state 322 state 323 new_name_list: new_name. (272) - . reduce 272 (src line 1821) + . reduce 272 (src line 1882) state 324 embed: packname. (238) - . reduce 238 (src line 1647) + . reduce 238 (src line 1708) state 325 @@ -5875,11 +5875,11 @@ state 325 packname: LNAME. (236) packname: LNAME.'.' sym - LLITERAL reduce 236 (src line 1622) - ';' reduce 236 (src line 1622) + LLITERAL reduce 236 (src line 1683) + ';' reduce 236 (src line 1683) '.' shift 434 - '}' reduce 236 (src line 1622) - . reduce 157 (src line 1114) + '}' reduce 236 (src line 1683) + . reduce 157 (src line 1175) state 326 @@ -5888,20 +5888,20 @@ state 326 osemi: . (286) ';' shift 436 - . reduce 286 (src line 1894) + . reduce 286 (src line 1955) osemi goto 435 state 327 interfacetype: LINTERFACE lbrace '}'. (203) - . reduce 203 (src line 1309) + . reduce 203 (src line 1370) state 328 interfacedcl_list: interfacedcl. (228) - . reduce 228 (src line 1555) + . reduce 228 (src line 1616) state 329 @@ -5915,7 +5915,7 @@ state 329 state 330 interfacedcl: packname. (240) - . reduce 240 (src line 1659) + . reduce 240 (src line 1720) state 331 @@ -5942,7 +5942,7 @@ state 333 '.' shift 90 '?' shift 12 '@' shift 13 - . reduce 287 (src line 1895) + . reduce 287 (src line 1956) import_here goto 87 sym goto 89 @@ -5952,7 +5952,7 @@ state 333 state 334 import_stmt: import_here import_package import_there. (11) - . reduce 11 (src line 174) + . reduce 11 (src line 235) state 335 @@ -5972,31 +5972,31 @@ state 336 state 337 hidden_type: hidden_type_misc. (312) - . reduce 312 (src line 2004) + . reduce 312 (src line 2065) state 338 hidden_type: hidden_type_recv_chan. (313) - . reduce 313 (src line 2006) + . reduce 313 (src line 2067) state 339 hidden_type: hidden_type_func. (314) - . reduce 314 (src line 2007) + . reduce 314 (src line 2068) state 340 hidden_type_misc: hidden_importsym. (317) - . reduce 317 (src line 2013) + . reduce 317 (src line 2074) state 341 hidden_type_misc: LNAME. (318) - . reduce 318 (src line 2018) + . reduce 318 (src line 2079) state 342 @@ -6131,7 +6131,7 @@ state 354 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 296 (src line 1918) + . reduce 296 (src line 1979) sym goto 357 hidden_importsym goto 11 @@ -6151,7 +6151,7 @@ state 355 state 356 hidden_funarg_list: hidden_funarg. (346) - . reduce 346 (src line 2213) + . reduce 346 (src line 2274) state 357 @@ -6191,7 +6191,7 @@ state 359 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 287 (src line 1895) + . reduce 287 (src line 1956) sym goto 105 dcl_name goto 104 @@ -6246,13 +6246,13 @@ state 361 expr_list: expr_list.',' expr ',' shift 155 - . reduce 41 (src line 370) + . reduce 41 (src line 431) state 362 dcl_name_list: dcl_name_list ',' dcl_name. (275) - . reduce 275 (src line 1836) + . reduce 275 (src line 1897) state 363 @@ -6305,7 +6305,7 @@ state 366 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 287 (src line 1895) + . reduce 287 (src line 1956) sym goto 105 dcl_name goto 104 @@ -6362,7 +6362,7 @@ state 368 expr_list: expr_list.',' expr ',' shift 155 - . reduce 43 (src line 380) + . reduce 43 (src line 441) state 369 @@ -6379,7 +6379,7 @@ state 370 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 287 (src line 1895) + . reduce 287 (src line 1956) sym goto 112 typedclname goto 111 @@ -6412,7 +6412,7 @@ state 372 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 212 (src line 1470) + . reduce 212 (src line 1531) sym goto 485 dotname goto 493 @@ -6444,7 +6444,7 @@ state 373 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 289 (src line 1898) + . reduce 289 (src line 1959) sym goto 247 ntype goto 249 @@ -6464,25 +6464,25 @@ state 373 state 374 oarg_type_list_ocomma: arg_type_list ocomma. (250) - . reduce 250 (src line 1712) + . reduce 250 (src line 1773) state 375 arg_type: sym name_or_type. (244) - . reduce 244 (src line 1684) + . reduce 244 (src line 1745) state 376 arg_type: sym dotdotdot. (245) - . reduce 245 (src line 1690) + . reduce 245 (src line 1751) state 377 dotdotdot: LDDD ntype. (165) - . reduce 165 (src line 1186) + . reduce 165 (src line 1247) state 378 @@ -6495,7 +6495,7 @@ state 378 state 379 non_dcl_stmt: labelname ':' $$261 stmt. (262) - . reduce 262 (src line 1746) + . reduce 262 (src line 1807) state 380 @@ -6508,14 +6508,14 @@ state 380 state 381 for_body: for_header loop_body. (73) - . reduce 73 (src line 653) + . reduce 73 (src line 714) state 382 loop_body: LBODY.$$65 stmt_list '}' $$65: . (65) - . reduce 65 (src line 600) + . reduce 65 (src line 661) $$65 goto 497 @@ -6542,7 +6542,7 @@ state 383 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 294 (src line 1912) + . reduce 294 (src line 1973) sym goto 123 expr goto 48 @@ -6695,7 +6695,7 @@ state 386 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 69 (src line 625) + . reduce 69 (src line 686) state 387 @@ -6728,7 +6728,7 @@ state 388 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 294 (src line 1912) + . reduce 294 (src line 1973) sym goto 123 expr goto 48 @@ -6782,7 +6782,7 @@ state 392 ocomma: . (288) ',' shift 413 - . reduce 288 (src line 1897) + . reduce 288 (src line 1958) ocomma goto 510 @@ -6809,7 +6809,7 @@ state 393 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 289 (src line 1898) + . reduce 289 (src line 1959) sym goto 123 expr goto 173 @@ -6848,7 +6848,7 @@ state 395 state 396 pexpr_no_paren: pexpr '[' expr ']'. (131) - . reduce 131 (src line 967) + . reduce 131 (src line 1028) state 397 @@ -6875,7 +6875,7 @@ state 397 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 290 (src line 1900) + . reduce 290 (src line 1961) sym goto 123 expr goto 188 @@ -6909,20 +6909,20 @@ state 399 ocomma: . (288) ',' shift 516 - . reduce 288 (src line 1897) + . reduce 288 (src line 1958) ocomma goto 517 state 400 keyval_list: keyval. (280) - . reduce 280 (src line 1864) + . reduce 280 (src line 1925) state 401 keyval_list: bare_complitexpr. (281) - . reduce 281 (src line 1869) + . reduce 281 (src line 1930) state 402 @@ -6970,14 +6970,14 @@ state 402 '%' shift 147 '&' shift 148 ':' shift 518 - . reduce 142 (src line 1027) + . reduce 142 (src line 1088) state 403 bare_complitexpr: '{'.start_complit braced_keyval_list '}' start_complit: . (140) - . reduce 140 (src line 1014) + . reduce 140 (src line 1075) start_complit goto 519 @@ -6985,7 +6985,7 @@ state 404 pexpr_no_paren: '(' expr_or_type ')' '{'.start_complit braced_keyval_list '}' start_complit: . (140) - . reduce 140 (src line 1014) + . reduce 140 (src line 1075) start_complit goto 520 @@ -7022,47 +7022,47 @@ state 405 state 406 recvchantype: LCOMM LCHAN ntype. (199) - . reduce 199 (src line 1282) + . reduce 199 (src line 1343) state 407 ntype: fntype. (167) non_recvchantype: fntype. (176) - LBODY reduce 176 (src line 1211) - '(' reduce 176 (src line 1211) - '{' reduce 176 (src line 1211) - . reduce 167 (src line 1193) + LBODY reduce 176 (src line 1272) + '(' reduce 176 (src line 1272) + '{' reduce 176 (src line 1272) + . reduce 167 (src line 1254) state 408 ntype: othertype. (168) non_recvchantype: othertype. (177) - LBODY reduce 177 (src line 1213) - '(' reduce 177 (src line 1213) - '{' reduce 177 (src line 1213) - . reduce 168 (src line 1194) + LBODY reduce 177 (src line 1274) + '(' reduce 177 (src line 1274) + '{' reduce 177 (src line 1274) + . reduce 168 (src line 1255) state 409 ntype: ptrtype. (169) non_recvchantype: ptrtype. (178) - LBODY reduce 178 (src line 1214) - '(' reduce 178 (src line 1214) - '{' reduce 178 (src line 1214) - . reduce 169 (src line 1195) + LBODY reduce 178 (src line 1275) + '(' reduce 178 (src line 1275) + '{' reduce 178 (src line 1275) + . reduce 169 (src line 1256) state 410 ntype: dotname. (170) non_recvchantype: dotname. (179) - LBODY reduce 179 (src line 1215) - '(' reduce 179 (src line 1215) - '{' reduce 179 (src line 1215) - . reduce 170 (src line 1196) + LBODY reduce 179 (src line 1276) + '(' reduce 179 (src line 1276) + '{' reduce 179 (src line 1276) + . reduce 170 (src line 1257) state 411 @@ -7105,7 +7105,7 @@ state 412 state 413 ocomma: ','. (289) - . reduce 289 (src line 1898) + . reduce 289 (src line 1959) state 414 @@ -7118,7 +7118,7 @@ state 414 state 415 fnliteral: fnlitdcl lbrace stmt_list '}'. (216) - . reduce 216 (src line 1491) + . reduce 216 (src line 1552) state 416 @@ -7128,11 +7128,11 @@ state 416 error shift 307 LLITERAL shift 68 LBREAK shift 41 - LCASE reduce 251 (src line 1720) + LCASE reduce 251 (src line 1781) LCHAN shift 78 LCONST shift 47 LCONTINUE shift 42 - LDEFAULT reduce 251 (src line 1720) + LDEFAULT reduce 251 (src line 1781) LDEFER shift 44 LFALL shift 40 LFOR shift 50 @@ -7156,9 +7156,9 @@ state 416 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 251 (src line 1720) + ';' reduce 251 (src line 1781) '{' shift 308 - '}' reduce 251 (src line 1720) + '}' reduce 251 (src line 1781) '!' shift 62 '~' shift 63 '[' shift 77 @@ -7229,9 +7229,9 @@ state 417 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 251 (src line 1720) + ';' reduce 251 (src line 1781) '{' shift 308 - '}' reduce 251 (src line 1720) + '}' reduce 251 (src line 1781) '!' shift 62 '~' shift 63 '[' shift 77 @@ -7273,25 +7273,25 @@ state 417 state 418 othertype: '[' oexpr ']' ntype. (191) - . reduce 191 (src line 1249) + . reduce 191 (src line 1310) state 419 othertype: '[' LDDD ']' ntype. (192) - . reduce 192 (src line 1254) + . reduce 192 (src line 1315) state 420 non_recvchantype: '(' ntype ')'. (180) - . reduce 180 (src line 1216) + . reduce 180 (src line 1277) state 421 dotname: name '.' sym. (190) - . reduce 190 (src line 1237) + . reduce 190 (src line 1298) state 422 @@ -7339,7 +7339,7 @@ state 424 '(' shift 321 '?' shift 12 '@' shift 13 - . reduce 287 (src line 1895) + . reduce 287 (src line 1956) sym goto 119 packname goto 324 @@ -7354,7 +7354,7 @@ state 425 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 529 @@ -7373,13 +7373,13 @@ state 426 state 427 structdcl: embed oliteral. (231) - . reduce 231 (src line 1590) + . reduce 231 (src line 1651) state 428 oliteral: LLITERAL. (303) - . reduce 303 (src line 1940) + . reduce 303 (src line 2001) state 429 @@ -7403,7 +7403,7 @@ state 431 packname: LNAME.'.' sym '.' shift 434 - . reduce 236 (src line 1622) + . reduce 236 (src line 1683) state 432 @@ -7411,7 +7411,7 @@ state 432 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 533 @@ -7450,7 +7450,7 @@ state 436 '(' shift 331 '?' shift 12 '@' shift 13 - . reduce 287 (src line 1895) + . reduce 287 (src line 1956) sym goto 119 packname goto 330 @@ -7461,7 +7461,7 @@ state 436 state 437 interfacedcl: new_name indcl. (239) - . reduce 239 (src line 1653) + . reduce 239 (src line 1714) state 438 @@ -7481,7 +7481,7 @@ state 438 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 249 (src line 1708) + . reduce 249 (src line 1769) sym goto 247 ntype goto 249 @@ -7510,25 +7510,25 @@ state 439 state 440 import: LIMPORT '(' import_stmt_list osemi ')'. (9) - . reduce 9 (src line 171) + . reduce 9 (src line 232) state 441 import_stmt_list: import_stmt_list ';' import_stmt. (14) - . reduce 14 (src line 223) + . reduce 14 (src line 284) state 442 hidden_import: LIMPORT LNAME LLITERAL ';'. (304) - . reduce 304 (src line 1945) + . reduce 304 (src line 2006) state 443 hidden_import: LVAR hidden_pkg_importsym hidden_type ';'. (305) - . reduce 305 (src line 1950) + . reduce 305 (src line 2011) state 444 @@ -7587,7 +7587,7 @@ state 447 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 298 (src line 1924) + . reduce 298 (src line 1985) sym goto 546 hidden_importsym goto 11 @@ -7610,7 +7610,7 @@ state 448 '[' shift 342 '?' shift 12 '@' shift 13 - . reduce 300 (src line 1930) + . reduce 300 (src line 1991) sym goto 550 hidden_importsym goto 553 @@ -7625,13 +7625,13 @@ state 448 state 449 hidden_type_misc: '*' hidden_type. (324) - . reduce 324 (src line 2049) + . reduce 324 (src line 2110) state 450 hidden_type_misc: LCHAN hidden_type_non_recv_chan. (325) - . reduce 325 (src line 2053) + . reduce 325 (src line 2114) state 451 @@ -7666,13 +7666,13 @@ state 452 state 453 hidden_type_non_recv_chan: hidden_type_misc. (315) - . reduce 315 (src line 2009) + . reduce 315 (src line 2070) state 454 hidden_type_non_recv_chan: hidden_type_func. (316) - . reduce 316 (src line 2011) + . reduce 316 (src line 2072) state 455 @@ -7703,7 +7703,7 @@ state 456 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 296 (src line 1918) + . reduce 296 (src line 1979) sym goto 357 hidden_importsym goto 11 @@ -7721,7 +7721,7 @@ state 457 state 458 hidden_constant: hidden_literal. (342) - . reduce 342 (src line 2196) + . reduce 342 (src line 2257) state 459 @@ -7741,7 +7741,7 @@ state 459 state 460 hidden_literal: LLITERAL. (339) - . reduce 339 (src line 2165) + . reduce 339 (src line 2226) state 461 @@ -7754,7 +7754,7 @@ state 461 state 462 hidden_literal: sym. (341) - . reduce 341 (src line 2188) + . reduce 341 (src line 2249) state 463 @@ -7776,13 +7776,13 @@ state 463 state 464 hidden_import: LTYPE hidden_pkgtype hidden_type ';'. (308) - . reduce 308 (src line 1962) + . reduce 308 (src line 2023) state 465 hidden_import: LFUNC hidden_fndcl fnbody ';'. (309) - . reduce 309 (src line 1966) + . reduce 309 (src line 2027) state 466 @@ -7797,7 +7797,7 @@ state 467 hidden_funarg_list: hidden_funarg_list.',' hidden_funarg ',' shift 469 - . reduce 297 (src line 1922) + . reduce 297 (src line 1983) state 468 @@ -7828,7 +7828,7 @@ state 470 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 565 @@ -7856,13 +7856,13 @@ state 471 state 472 common_dcl: LVAR '(' vardcl_list osemi ')'. (29) - . reduce 29 (src line 311) + . reduce 29 (src line 372) state 473 vardcl_list: vardcl_list ';' vardcl. (221) - . reduce 221 (src line 1526) + . reduce 221 (src line 1587) state 474 @@ -7870,19 +7870,19 @@ state 474 expr_list: expr_list.',' expr ',' shift 155 - . reduce 40 (src line 366) + . reduce 40 (src line 427) state 475 ntype: '(' ntype ')'. (171) - . reduce 171 (src line 1197) + . reduce 171 (src line 1258) state 476 common_dcl: lconst '(' constdcl osemi ')'. (32) - . reduce 32 (src line 325) + . reduce 32 (src line 386) state 477 @@ -7891,20 +7891,20 @@ state 477 osemi: . (286) ';' shift 568 - . reduce 286 (src line 1894) + . reduce 286 (src line 1955) osemi goto 567 state 478 constdcl_list: constdcl1. (222) - . reduce 222 (src line 1531) + . reduce 222 (src line 1592) state 479 constdcl1: constdcl. (44) - . reduce 44 (src line 385) + . reduce 44 (src line 446) state 480 @@ -7928,7 +7928,7 @@ state 480 '?' shift 12 '@' shift 13 ',' shift 225 - . reduce 46 (src line 391) + . reduce 46 (src line 452) sym goto 123 ntype goto 569 @@ -7947,25 +7947,25 @@ state 481 expr_list: expr_list.',' expr ',' shift 155 - . reduce 42 (src line 375) + . reduce 42 (src line 436) state 482 common_dcl: LTYPE '(' typedcl_list osemi ')'. (36) - . reduce 36 (src line 346) + . reduce 36 (src line 407) state 483 typedcl_list: typedcl_list ';' typedcl. (225) - . reduce 225 (src line 1543) + . reduce 225 (src line 1604) state 484 fnbody: '{' stmt_list '}'. (211) - . reduce 211 (src line 1462) + . reduce 211 (src line 1523) state 485 @@ -7973,19 +7973,19 @@ state 485 fndcl: '(' oarg_type_list_ocomma ')' sym.'(' oarg_type_list_ocomma ')' fnres '(' shift 570 - . reduce 162 (src line 1159) + . reduce 162 (src line 1220) state 486 fntype: LFUNC '(' oarg_type_list_ocomma ')' fnres. (209) - . reduce 209 (src line 1449) + . reduce 209 (src line 1510) state 487 fnres: fnret_type. (213) - . reduce 213 (src line 1475) + . reduce 213 (src line 1536) state 488 @@ -8005,7 +8005,7 @@ state 488 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 249 (src line 1708) + . reduce 249 (src line 1769) sym goto 247 ntype goto 249 @@ -8027,37 +8027,37 @@ state 488 state 489 fnret_type: recvchantype. (184) - . reduce 184 (src line 1228) + . reduce 184 (src line 1289) state 490 fnret_type: fntype. (185) - . reduce 185 (src line 1230) + . reduce 185 (src line 1291) state 491 fnret_type: othertype. (186) - . reduce 186 (src line 1231) + . reduce 186 (src line 1292) state 492 fnret_type: ptrtype. (187) - . reduce 187 (src line 1232) + . reduce 187 (src line 1293) state 493 fnret_type: dotname. (188) - . reduce 188 (src line 1233) + . reduce 188 (src line 1294) state 494 arg_type_list: arg_type_list ',' arg_type. (248) - . reduce 248 (src line 1703) + . reduce 248 (src line 1764) state 495 @@ -8076,7 +8076,7 @@ state 495 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 212 (src line 1470) + . reduce 212 (src line 1531) sym goto 123 dotname goto 493 @@ -8107,7 +8107,7 @@ state 496 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 212 (src line 1470) + . reduce 212 (src line 1531) sym goto 123 dotname goto 493 @@ -8155,9 +8155,9 @@ state 497 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 251 (src line 1720) + ';' reduce 251 (src line 1781) '{' shift 308 - '}' reduce 251 (src line 1720) + '}' reduce 251 (src line 1781) '!' shift 62 '~' shift 63 '[' shift 77 @@ -8289,33 +8289,33 @@ state 501 switch_stmt: LSWITCH $$88 if_header $$89 LBODY.caseblock_list '}' caseblock_list: . (63) - . reduce 63 (src line 591) + . reduce 63 (src line 652) caseblock_list goto 577 state 502 if_header: osimple_stmt ';' osimple_stmt. (77) - . reduce 77 (src line 678) + . reduce 77 (src line 739) state 503 caseblock_list: caseblock_list caseblock. (64) - . reduce 64 (src line 595) + . reduce 64 (src line 656) state 504 select_stmt: LSELECT $$91 LBODY caseblock_list '}'. (92) - . reduce 92 (src line 783) + . reduce 92 (src line 844) state 505 caseblock: case.$$61 stmt_list $$61: . (61) - . reduce 61 (src line 560) + . reduce 61 (src line 621) $$61 goto 578 @@ -8377,14 +8377,14 @@ state 508 if_stmt: LIF $$78 if_header $$79 loop_body.$$80 elseif_list else $$80: . (80) - . reduce 80 (src line 700) + . reduce 80 (src line 761) $$80 goto 581 state 509 pseudocall: pexpr '(' expr_or_type_list ocomma ')'. (124) - . reduce 124 (src line 930) + . reduce 124 (src line 991) state 510 @@ -8397,19 +8397,19 @@ state 510 state 511 expr_or_type_list: expr_or_type_list ',' expr_or_type. (279) - . reduce 279 (src line 1856) + . reduce 279 (src line 1917) state 512 pexpr_no_paren: pexpr '.' '(' expr_or_type ')'. (129) - . reduce 129 (src line 959) + . reduce 129 (src line 1020) state 513 pexpr_no_paren: pexpr '.' '(' LTYPE ')'. (130) - . reduce 130 (src line 963) + . reduce 130 (src line 1024) state 514 @@ -8424,7 +8424,7 @@ state 514 state 515 pexpr_no_paren: pexpr_no_paren '{' start_complit braced_keyval_list '}'. (137) - . reduce 137 (src line 999) + . reduce 137 (src line 1060) state 516 @@ -8452,7 +8452,7 @@ state 516 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 289 (src line 1898) + . reduce 289 (src line 1959) sym goto 123 expr goto 402 @@ -8476,7 +8476,7 @@ state 516 state 517 braced_keyval_list: keyval_list ocomma. (285) - . reduce 285 (src line 1886) + . reduce 285 (src line 1947) state 518 @@ -8546,7 +8546,7 @@ state 519 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 284 (src line 1882) + . reduce 284 (src line 1943) sym goto 123 expr goto 402 @@ -8593,7 +8593,7 @@ state 520 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 284 (src line 1882) + . reduce 284 (src line 1943) sym goto 123 expr goto 402 @@ -8627,19 +8627,19 @@ state 521 state 522 pexpr_no_paren: convtype '(' expr ocomma ')'. (135) - . reduce 135 (src line 986) + . reduce 135 (src line 1047) state 523 pexpr_no_paren: comptype lbrace start_complit braced_keyval_list '}'. (136) - . reduce 136 (src line 992) + . reduce 136 (src line 1053) state 524 stmt_list: stmt_list ';' stmt. (271) - . reduce 271 (src line 1813) + . reduce 271 (src line 1874) state 525 @@ -8654,31 +8654,31 @@ state 525 state 526 othertype: LMAP '[' ntype ']' ntype. (195) - . reduce 195 (src line 1269) + . reduce 195 (src line 1330) state 527 structtype: LSTRUCT lbrace structdcl_list osemi '}'. (200) - . reduce 200 (src line 1289) + . reduce 200 (src line 1350) state 528 structdcl_list: structdcl_list ';' structdcl. (227) - . reduce 227 (src line 1550) + . reduce 227 (src line 1611) state 529 structdcl: new_name_list ntype oliteral. (230) - . reduce 230 (src line 1565) + . reduce 230 (src line 1626) state 530 new_name_list: new_name_list ',' new_name. (273) - . reduce 273 (src line 1826) + . reduce 273 (src line 1887) state 531 @@ -8686,7 +8686,7 @@ state 531 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 594 @@ -8700,7 +8700,7 @@ state 532 state 533 structdcl: '*' embed oliteral. (233) - . reduce 233 (src line 1601) + . reduce 233 (src line 1662) state 534 @@ -8713,19 +8713,19 @@ state 534 state 535 packname: LNAME '.' sym. (237) - . reduce 237 (src line 1633) + . reduce 237 (src line 1694) state 536 interfacetype: LINTERFACE lbrace interfacedcl_list osemi '}'. (202) - . reduce 202 (src line 1302) + . reduce 202 (src line 1363) state 537 interfacedcl_list: interfacedcl_list ';' interfacedcl. (229) - . reduce 229 (src line 1560) + . reduce 229 (src line 1621) state 538 @@ -8738,13 +8738,13 @@ state 538 state 539 interfacedcl: '(' packname ')'. (241) - . reduce 241 (src line 1663) + . reduce 241 (src line 1724) state 540 hidden_type_misc: '[' ']' hidden_type. (319) - . reduce 319 (src line 2029) + . reduce 319 (src line 2090) state 541 @@ -8787,13 +8787,13 @@ state 544 hidden_structdcl_list: hidden_structdcl_list.';' hidden_structdcl ';' shift 601 - . reduce 299 (src line 1928) + . reduce 299 (src line 1989) state 545 hidden_structdcl_list: hidden_structdcl. (348) - . reduce 348 (src line 2223) + . reduce 348 (src line 2284) state 546 @@ -8829,13 +8829,13 @@ state 548 hidden_interfacedcl_list: hidden_interfacedcl_list.';' hidden_interfacedcl ';' shift 604 - . reduce 301 (src line 1934) + . reduce 301 (src line 1995) state 549 hidden_interfacedcl_list: hidden_interfacedcl. (350) - . reduce 350 (src line 2233) + . reduce 350 (src line 2294) state 550 @@ -8848,23 +8848,23 @@ state 550 state 551 hidden_interfacedcl: hidden_type. (334) - . reduce 334 (src line 2140) + . reduce 334 (src line 2201) state 552 sym: LNAME. (157) hidden_type_misc: LNAME. (318) - '(' reduce 157 (src line 1114) - . reduce 318 (src line 2018) + '(' reduce 157 (src line 1175) + . reduce 318 (src line 2079) state 553 sym: hidden_importsym. (158) hidden_type_misc: hidden_importsym. (317) - '(' reduce 158 (src line 1123) - . reduce 317 (src line 2013) + '(' reduce 158 (src line 1184) + . reduce 317 (src line 2074) state 554 @@ -8877,13 +8877,13 @@ state 554 state 555 hidden_type_misc: LCHAN LCOMM hidden_type. (327) - . reduce 327 (src line 2065) + . reduce 327 (src line 2126) state 556 hidden_type_recv_chan: LCOMM LCHAN hidden_type. (328) - . reduce 328 (src line 2072) + . reduce 328 (src line 2133) state 557 @@ -8896,7 +8896,7 @@ state 557 state 558 hidden_import: LCONST hidden_pkg_importsym '=' hidden_constant ';'. (306) - . reduce 306 (src line 1954) + . reduce 306 (src line 2015) state 559 @@ -8909,7 +8909,7 @@ state 559 state 560 hidden_literal: '-' LLITERAL. (340) - . reduce 340 (src line 2170) + . reduce 340 (src line 2231) state 561 @@ -8934,7 +8934,7 @@ state 562 '(' shift 612 '[' shift 342 '@' shift 13 - . reduce 335 (src line 2145) + . reduce 335 (src line 2206) hidden_importsym goto 340 hidden_funres goto 611 @@ -8954,13 +8954,13 @@ state 563 state 564 hidden_funarg_list: hidden_funarg_list ',' hidden_funarg. (347) - . reduce 347 (src line 2218) + . reduce 347 (src line 2279) state 565 hidden_funarg: sym hidden_type oliteral. (330) - . reduce 330 (src line 2086) + . reduce 330 (src line 2147) state 566 @@ -8968,7 +8968,7 @@ state 566 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 615 @@ -8986,7 +8986,7 @@ state 568 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 287 (src line 1895) + . reduce 287 (src line 1956) sym goto 105 dcl_name goto 104 @@ -9000,7 +9000,7 @@ state 569 constdcl1: dcl_name_list ntype. (45) '=' shift 367 - . reduce 45 (src line 387) + . reduce 45 (src line 448) state 570 @@ -9020,7 +9020,7 @@ state 570 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 249 (src line 1708) + . reduce 249 (src line 1769) sym goto 247 ntype goto 249 @@ -9049,7 +9049,7 @@ state 571 state 572 fndcl: sym '(' oarg_type_list_ocomma ')' fnres. (205) - . reduce 205 (src line 1337) + . reduce 205 (src line 1398) state 573 @@ -9084,7 +9084,7 @@ state 574 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 294 (src line 1912) + . reduce 294 (src line 1973) sym goto 123 expr goto 48 @@ -9149,7 +9149,7 @@ state 575 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 67 (src line 611) + . reduce 67 (src line 672) state 576 @@ -9195,7 +9195,7 @@ state 576 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 68 (src line 618) + . reduce 68 (src line 679) state 577 @@ -9217,11 +9217,11 @@ state 578 error shift 307 LLITERAL shift 68 LBREAK shift 41 - LCASE reduce 251 (src line 1720) + LCASE reduce 251 (src line 1781) LCHAN shift 78 LCONST shift 47 LCONTINUE shift 42 - LDEFAULT reduce 251 (src line 1720) + LDEFAULT reduce 251 (src line 1781) LDEFER shift 44 LFALL shift 40 LFOR shift 50 @@ -9245,9 +9245,9 @@ state 578 '*' shift 58 '&' shift 59 '(' shift 67 - ';' reduce 251 (src line 1720) + ';' reduce 251 (src line 1781) '{' shift 308 - '}' reduce 251 (src line 1720) + '}' reduce 251 (src line 1781) '!' shift 62 '~' shift 63 '[' shift 77 @@ -9302,27 +9302,27 @@ state 579 state 580 case: LDEFAULT ':'. (58) - . reduce 58 (src line 525) + . reduce 58 (src line 586) state 581 if_stmt: LIF $$78 if_header $$79 loop_body $$80.elseif_list else elseif_list: . (84) - . reduce 84 (src line 735) + . reduce 84 (src line 796) elseif_list goto 628 state 582 pseudocall: pexpr '(' expr_or_type_list LDDD ocomma ')'. (125) - . reduce 125 (src line 935) + . reduce 125 (src line 996) state 583 pexpr_no_paren: pexpr '[' oexpr ':' oexpr ']'. (132) - . reduce 132 (src line 971) + . reduce 132 (src line 1032) state 584 @@ -9348,7 +9348,7 @@ state 584 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 290 (src line 1900) + . reduce 290 (src line 1961) sym goto 123 expr goto 188 @@ -9371,19 +9371,19 @@ state 584 state 585 keyval_list: keyval_list ',' keyval. (282) - . reduce 282 (src line 1873) + . reduce 282 (src line 1934) state 586 keyval_list: keyval_list ',' bare_complitexpr. (283) - . reduce 283 (src line 1877) + . reduce 283 (src line 1938) state 587 keyval: expr ':' complitexpr. (141) - . reduce 141 (src line 1021) + . reduce 141 (src line 1082) state 588 @@ -9429,14 +9429,14 @@ state 588 '/' shift 146 '%' shift 147 '&' shift 148 - . reduce 144 (src line 1047) + . reduce 144 (src line 1108) state 589 complitexpr: '{'.start_complit braced_keyval_list '}' start_complit: . (140) - . reduce 140 (src line 1014) + . reduce 140 (src line 1075) start_complit goto 630 @@ -9458,22 +9458,22 @@ state 592 ntype: '(' ntype ')'. (171) non_recvchantype: '(' ntype ')'. (180) - LBODY reduce 180 (src line 1216) - '(' reduce 180 (src line 1216) - '{' reduce 180 (src line 1216) - . reduce 171 (src line 1197) + LBODY reduce 180 (src line 1277) + '(' reduce 180 (src line 1277) + '{' reduce 180 (src line 1277) + . reduce 171 (src line 1258) state 593 compound_stmt: '{' $$59 stmt_list '}'. (60) - . reduce 60 (src line 550) + . reduce 60 (src line 611) state 594 structdcl: '(' embed ')' oliteral. (232) - . reduce 232 (src line 1595) + . reduce 232 (src line 1656) state 595 @@ -9481,7 +9481,7 @@ state 595 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 633 @@ -9490,7 +9490,7 @@ state 596 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 634 @@ -9510,7 +9510,7 @@ state 597 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 212 (src line 1470) + . reduce 212 (src line 1531) sym goto 123 dotname goto 493 @@ -9528,7 +9528,7 @@ state 597 state 598 hidden_type_misc: '[' LLITERAL ']' hidden_type. (320) - . reduce 320 (src line 2033) + . reduce 320 (src line 2094) state 599 @@ -9555,7 +9555,7 @@ state 599 state 600 hidden_type_misc: LSTRUCT '{' ohidden_structdcl_list '}'. (322) - . reduce 322 (src line 2041) + . reduce 322 (src line 2102) state 601 @@ -9575,14 +9575,14 @@ state 602 oliteral: . (302) LLITERAL shift 428 - . reduce 302 (src line 1936) + . reduce 302 (src line 1997) oliteral goto 638 state 603 hidden_type_misc: LINTERFACE '{' ohidden_interfacedcl_list '}'. (323) - . reduce 323 (src line 2045) + . reduce 323 (src line 2106) state 604 @@ -9616,7 +9616,7 @@ state 605 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 296 (src line 1918) + . reduce 296 (src line 1979) sym goto 357 hidden_importsym goto 11 @@ -9627,7 +9627,7 @@ state 605 state 606 hidden_type_misc: LCHAN '(' hidden_type_recv_chan ')'. (326) - . reduce 326 (src line 2059) + . reduce 326 (src line 2120) state 607 @@ -9645,7 +9645,7 @@ state 607 '(' shift 612 '[' shift 342 '@' shift 13 - . reduce 335 (src line 2145) + . reduce 335 (src line 2206) hidden_importsym goto 340 hidden_funres goto 611 @@ -9672,19 +9672,19 @@ state 608 state 609 hidden_import: LCONST hidden_pkg_importsym hidden_type '=' hidden_constant ';'. (307) - . reduce 307 (src line 1958) + . reduce 307 (src line 2019) state 610 hidden_fndcl: hidden_pkg_importsym '(' ohidden_funarg_list ')' ohidden_funres. (207) - . reduce 207 (src line 1406) + . reduce 207 (src line 1467) state 611 ohidden_funres: hidden_funres. (336) - . reduce 336 (src line 2149) + . reduce 336 (src line 2210) state 612 @@ -9694,7 +9694,7 @@ state 612 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 296 (src line 1918) + . reduce 296 (src line 1979) sym goto 357 hidden_importsym goto 11 @@ -9705,7 +9705,7 @@ state 612 state 613 hidden_funres: hidden_type. (338) - . reduce 338 (src line 2156) + . reduce 338 (src line 2217) state 614 @@ -9715,7 +9715,7 @@ state 614 LNAME shift 10 '?' shift 12 '@' shift 13 - . reduce 296 (src line 1918) + . reduce 296 (src line 1979) sym goto 357 hidden_importsym goto 11 @@ -9726,19 +9726,19 @@ state 614 state 615 hidden_funarg: sym LDDD hidden_type oliteral. (331) - . reduce 331 (src line 2095) + . reduce 331 (src line 2156) state 616 common_dcl: lconst '(' constdcl ';' constdcl_list osemi ')'. (33) - . reduce 33 (src line 331) + . reduce 33 (src line 392) state 617 constdcl_list: constdcl_list ';' constdcl1. (223) - . reduce 223 (src line 1533) + . reduce 223 (src line 1594) state 618 @@ -9751,25 +9751,25 @@ state 618 state 619 fnres: '(' oarg_type_list_ocomma ')'. (214) - . reduce 214 (src line 1479) + . reduce 214 (src line 1540) state 620 loop_body: LBODY $$65 stmt_list '}'. (66) - . reduce 66 (src line 605) + . reduce 66 (src line 666) state 621 for_header: osimple_stmt ';' osimple_stmt ';' osimple_stmt. (70) - . reduce 70 (src line 631) + . reduce 70 (src line 692) state 622 switch_stmt: LSWITCH $$88 if_header $$89 LBODY caseblock_list '}'. (90) - . reduce 90 (src line 769) + . reduce 90 (src line 830) state 623 @@ -9777,13 +9777,13 @@ state 623 stmt_list: stmt_list.';' stmt ';' shift 416 - . reduce 62 (src line 572) + . reduce 62 (src line 633) state 624 case: LCASE expr_or_type_list ':'. (55) - . reduce 55 (src line 474) + . reduce 55 (src line 535) state 625 @@ -9918,7 +9918,7 @@ state 628 else: . (86) LELSE shift 650 - . reduce 86 (src line 744) + . reduce 86 (src line 805) elseif goto 649 else goto 648 @@ -9954,7 +9954,7 @@ state 630 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 284 (src line 1882) + . reduce 284 (src line 1943) sym goto 123 expr goto 402 @@ -9980,55 +9980,55 @@ state 630 state 631 bare_complitexpr: '{' start_complit braced_keyval_list '}'. (143) - . reduce 143 (src line 1041) + . reduce 143 (src line 1102) state 632 pexpr_no_paren: '(' expr_or_type ')' '{' start_complit braced_keyval_list '}'. (138) - . reduce 138 (src line 1005) + . reduce 138 (src line 1066) state 633 structdcl: '(' '*' embed ')' oliteral. (234) - . reduce 234 (src line 1607) + . reduce 234 (src line 1668) state 634 structdcl: '*' '(' embed ')' oliteral. (235) - . reduce 235 (src line 1614) + . reduce 235 (src line 1675) state 635 indcl: '(' oarg_type_list_ocomma ')' fnres. (242) - . reduce 242 (src line 1669) + . reduce 242 (src line 1730) state 636 hidden_type_misc: LMAP '[' hidden_type ']' hidden_type. (321) - . reduce 321 (src line 2037) + . reduce 321 (src line 2098) state 637 hidden_structdcl_list: hidden_structdcl_list ';' hidden_structdcl. (349) - . reduce 349 (src line 2228) + . reduce 349 (src line 2289) state 638 hidden_structdcl: sym hidden_type oliteral. (332) - . reduce 332 (src line 2111) + . reduce 332 (src line 2172) state 639 hidden_interfacedcl_list: hidden_interfacedcl_list ';' hidden_interfacedcl. (351) - . reduce 351 (src line 2238) + . reduce 351 (src line 2299) state 640 @@ -10041,7 +10041,7 @@ state 640 state 641 hidden_type_func: LFUNC '(' ohidden_funarg_list ')' ohidden_funres. (329) - . reduce 329 (src line 2080) + . reduce 329 (src line 2141) state 642 @@ -10081,7 +10081,7 @@ state 645 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 212 (src line 1470) + . reduce 212 (src line 1531) sym goto 123 dotname goto 493 @@ -10193,13 +10193,13 @@ state 647 state 648 if_stmt: LIF $$78 if_header $$79 loop_body $$80 elseif_list else. (81) - . reduce 81 (src line 704) + . reduce 81 (src line 765) state 649 elseif_list: elseif_list elseif. (85) - . reduce 85 (src line 739) + . reduce 85 (src line 800) state 650 @@ -10215,7 +10215,7 @@ state 650 state 651 pexpr_no_paren: pexpr '[' oexpr ':' oexpr ':' oexpr ']'. (133) - . reduce 133 (src line 975) + . reduce 133 (src line 1036) state 652 @@ -10240,7 +10240,7 @@ state 653 '(' shift 612 '[' shift 342 '@' shift 13 - . reduce 335 (src line 2145) + . reduce 335 (src line 2206) hidden_importsym goto 340 hidden_funres goto 611 @@ -10253,13 +10253,13 @@ state 653 state 654 hidden_constant: '(' hidden_literal '+' hidden_literal ')'. (343) - . reduce 343 (src line 2198) + . reduce 343 (src line 2259) state 655 hidden_funres: '(' ohidden_funarg_list ')'. (337) - . reduce 337 (src line 2151) + . reduce 337 (src line 2212) state 656 @@ -10277,7 +10277,7 @@ state 656 '(' shift 612 '[' shift 342 '@' shift 13 - . reduce 335 (src line 2145) + . reduce 335 (src line 2206) hidden_importsym goto 340 hidden_funres goto 611 @@ -10290,51 +10290,51 @@ state 656 state 657 fndcl: '(' oarg_type_list_ocomma ')' sym '(' oarg_type_list_ocomma ')' fnres. (206) - . reduce 206 (src line 1369) + . reduce 206 (src line 1430) state 658 case: LCASE expr_or_type_list '=' expr ':'. (56) - . reduce 56 (src line 498) + . reduce 56 (src line 559) state 659 case: LCASE expr_or_type_list LCOLAS expr ':'. (57) - . reduce 57 (src line 516) + . reduce 57 (src line 577) state 660 elseif: LELSE LIF.$$82 if_header loop_body $$82: . (82) - . reduce 82 (src line 721) + . reduce 82 (src line 782) $$82 goto 665 state 661 else: LELSE compound_stmt. (87) - . reduce 87 (src line 748) + . reduce 87 (src line 809) state 662 complitexpr: '{' start_complit braced_keyval_list '}'. (145) - . reduce 145 (src line 1049) + . reduce 145 (src line 1110) state 663 hidden_interfacedcl: sym '(' ohidden_funarg_list ')' ohidden_funres. (333) - . reduce 333 (src line 2135) + . reduce 333 (src line 2196) state 664 hidden_fndcl: '(' hidden_funarg_list ')' sym '(' ohidden_funarg_list ')' ohidden_funres. (208) - . reduce 208 (src line 1432) + . reduce 208 (src line 1493) state 665 @@ -10360,7 +10360,7 @@ state 665 '[' shift 77 '?' shift 12 '@' shift 13 - . reduce 294 (src line 1912) + . reduce 294 (src line 1973) sym goto 123 expr goto 48 @@ -10394,7 +10394,7 @@ state 666 state 667 elseif: LELSE LIF $$82 if_header loop_body. (83) - . reduce 83 (src line 726) + . reduce 83 (src line 787) 76 terminals, 142 nonterminals diff --git a/src/cmd/internal/gc/yaccerrors.go b/src/cmd/internal/gc/yaccerrors.go deleted file mode 100644 index 9dc54d9c8c..0000000000 --- a/src/cmd/internal/gc/yaccerrors.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build ignore - -// This program implements the core idea from -// -// Clinton L. Jeffery, Generating LR syntax error messages from examples, -// ACM TOPLAS 25(5) (September 2003). http://doi.acm.org/10.1145/937563.937566 -// -// It reads Bison's summary of a grammar followed by a file -// like go.errors, replacing lines beginning with % by the -// yystate and yychar that will be active when an error happens -// while parsing that line. -// -// Unlike the system described in the paper, the lines in go.errors -// give grammar symbol name lists, not actual program fragments. -// This is a little less programmer-friendly but doesn't require being -// able to run the text through lex.c. - -package main - -import ( - "bufio" - "fmt" - "io" - "log" - "os" - "strconv" - "strings" -) - -func xatoi(s string) int { - n, err := strconv.Atoi(s) - if err != nil { - log.Fatal(err) - } - return n -} - -func trimParen(s string) string { - s = strings.TrimPrefix(s, "(") - s = strings.TrimSuffix(s, ")") - return s -} - -type action struct { - token string - n int -} - -var shift = map[int][]action{} -var reduce = map[int][]action{} - -type rule struct { - lhs string - size int -} - -var rules = map[int]rule{} - -func readYaccOutput() { - r, err := os.Open("y.output") - if err != nil { - log.Fatal(err) - } - defer r.Close() - - var state int - - scanner := bufio.NewScanner(r) - for scanner.Scan() { - f := strings.Fields(scanner.Text()) - nf := len(f) - - if nf >= 4 && f[1] == "terminals," && f[3] == "nonterminals" { - // We're done. - break - } - - if nf >= 2 && f[0] == "state" { - state = xatoi(f[1]) - continue - } - if nf >= 3 && (f[1] == "shift" || f[1] == "goto") { - shift[state] = append(shift[state], action{f[0], xatoi(f[2])}) - continue - } - if nf >= 3 && f[1] == "reduce" { - reduce[state] = append(reduce[state], action{f[0], xatoi(f[2])}) - continue - } - if nf >= 3 && strings.HasSuffix(f[0], ":") && strings.HasPrefix(f[nf-1], "(") && strings.HasSuffix(f[nf-1], ")") { - n := xatoi(trimParen(f[nf-1])) - - size := nf - 2 - if size == 1 && f[1] == "." { - size = 0 - } - - rules[n] = rule{strings.TrimSuffix(f[0], ":"), size} - continue - } - } -} - -func runMachine(w io.Writer, s string) { - f := strings.Fields(s) - - // Run it through the LR machine and print the induced "yystate, yychar," - // at the point where the error happens. - - var stack []int - state := 0 - i := 1 - tok := "" - -Loop: - if tok == "" && i < len(f) { - tok = f[i] - i++ - } - - for _, a := range shift[state] { - if a.token == tok { - if false { - fmt.Println("SHIFT ", tok, " ", state, " -> ", a) - } - stack = append(stack, state) - state = a.n - tok = "" - goto Loop - } - } - - for _, a := range reduce[state] { - if a.token == tok || a.token == "." { - stack = append(stack, state) - rule, ok := rules[a.n] - if !ok { - log.Fatal("missing rule") - } - stack = stack[:len(stack)-rule.size] - state = stack[len(stack)-1] - stack = stack[:len(stack)-1] - if tok != "" { - i-- - } - tok = rule.lhs - if false { - fmt.Println("REDUCE ", stack, " ", state, " ", tok, " rule ", rule) - } - goto Loop - } - } - - // No shift or reduce applied - found the error. - fmt.Fprintf(w, "\t{%d, %s,\n", state, tok) -} - -func processGoErrors() { - r, err := os.Open("go.errors") - if err != nil { - log.Fatal(err) - } - defer r.Close() - - w, err := os.Create("yymsg.go") - if err != nil { - log.Fatal(err) - } - defer w.Close() - - fmt.Fprintf(w, "// DO NOT EDIT - generated with go generate\n\n") - - scanner := bufio.NewScanner(r) - for scanner.Scan() { - s := scanner.Text() - - // Treat % as first field on line as introducing a pattern (token sequence). - if strings.HasPrefix(strings.TrimSpace(s), "%") { - runMachine(w, s) - continue - } - - fmt.Fprintln(w, s) - } -} - -func main() { - readYaccOutput() - processGoErrors() -} diff --git a/src/cmd/internal/gc/yymsg.go b/src/cmd/internal/gc/yymsg.go deleted file mode 100644 index cb45cb8d1b..0000000000 --- a/src/cmd/internal/gc/yymsg.go +++ /dev/null @@ -1,83 +0,0 @@ -// DO NOT EDIT - generated with go generate - -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Example-based syntax error messages. -// See yaccerrors.go. - -package gc - -var yymsg = []struct { - yystate int - yychar int - msg string -}{ - // Each line of the form % token list - // is converted by yaccerrors.go into the yystate and yychar caused - // by that token list. - - {332, ',', - "unexpected comma during import block"}, - - {89, ';', - "missing import path; require quoted string"}, - - {390, ';', - "missing { after if clause"}, - - {387, ';', - "missing { after switch clause"}, - - {279, ';', - "missing { after for clause"}, - - {498, LBODY, - "missing { after for clause"}, - - {17, '{', - "unexpected semicolon or newline before {"}, - - {111, ';', - "unexpected semicolon or newline in type declaration"}, - - {78, '}', - "unexpected } in channel type"}, - - {78, ')', - "unexpected ) in channel type"}, - - {78, ',', - "unexpected comma in channel type"}, - - {416, LELSE, - "unexpected semicolon or newline before else"}, - - {329, ',', - "name list not allowed in interface type"}, - - {279, LVAR, - "var declaration not allowed in for initializer"}, - - {25, '{', - "unexpected { at end of statement"}, - - {371, '{', - "unexpected { at end of statement"}, - - {122, ';', - "argument to go/defer must be function call"}, - - {398, ';', - "need trailing comma before newline in composite literal"}, - - {414, ';', - "need trailing comma before newline in composite literal"}, - - {124, LNAME, - "nested func not allowed"}, - - {650, ';', - "else must be followed by if or statement block"}, -} diff --git a/src/cmd/yacc/yacc.go b/src/cmd/yacc/yacc.go index 5c7b0b71b1..53c0fab174 100644 --- a/src/cmd/yacc/yacc.go +++ b/src/cmd/yacc/yacc.go @@ -128,6 +128,7 @@ const ( TYPEDEF TYPENAME UNION + ERROR ) const ENDFILE = 0 @@ -325,8 +326,24 @@ var resrv = []Resrv{ {"type", TYPEDEF}, {"union", UNION}, {"struct", UNION}, + {"error", ERROR}, } +type Error struct { + lineno int + tokens []string + msg string +} + +var errors []Error + +type Row struct { + actions []int + defaultAction int +} + +var stateTable []Row + var zznewstate = 0 const EOF = -1 @@ -402,6 +419,27 @@ outer: } start = chfind(1, tokname) + case ERROR: + lno := lineno + var tokens []string + for { + t := gettok() + if t == ':' { + break + } + if t != IDENTIFIER && t != IDENTCOLON { + errorf("bad syntax in %%error") + } + tokens = append(tokens, tokname) + if t == IDENTCOLON { + break + } + } + if gettok() != IDENTIFIER { + errorf("bad syntax in %%error") + } + errors = append(errors, Error{lno, tokens, tokname}) + case TYPEDEF: t = gettok() if t != TYPENAME { @@ -2155,6 +2193,10 @@ func output() { } fmt.Fprintf(ftable, "\nvar %sExca = [...]int{\n", prefix) + if len(errors) > 0 { + stateTable = make([]Row, nstate) + } + noset := mkset() // output the stuff for state i @@ -2368,6 +2410,15 @@ func wrstate(i int) { var j0, j1, u int var pp, qq int + if len(errors) > 0 { + actions := append([]int(nil), temp1...) + defaultAction := ERRCODE + if lastred != 0 { + defaultAction = -lastred + } + stateTable[i] = Row{actions, defaultAction} + } + if foutput == nil { return } @@ -2914,6 +2965,20 @@ func others() { } fmt.Fprintf(ftable, "%d,\n}\n", 0) + // Custom error messages. + fmt.Fprintf(ftable, "\n") + fmt.Fprintf(ftable, "var %sErrorMessages = [...]struct {\n", prefix) + fmt.Fprintf(ftable, "\tstate int\n") + fmt.Fprintf(ftable, "\ttoken int\n") + fmt.Fprintf(ftable, "\tmsg string\n") + fmt.Fprintf(ftable, "}{\n") + for _, error := range errors { + lineno = error.lineno + state, token := runMachine(error.tokens) + fmt.Fprintf(ftable, "\t{%v, %v, %s},\n", state, token, error.msg) + } + fmt.Fprintf(ftable, "}\n") + // copy parser text ch := getrune(finput) for ch != EOF { @@ -2932,6 +2997,59 @@ func others() { fmt.Fprintf(ftable, "%v", parts[1]) } +func runMachine(tokens []string) (state, token int) { + var stack []int + i := 0 + token = -1 + +Loop: + if token < 0 { + token = chfind(2, tokens[i]) + i++ + } + + row := stateTable[state] + + c := token + if token >= NTBASE { + c = token - NTBASE + ntokens + } + action := row.actions[c] + if action == 0 { + action = row.defaultAction + } + + switch { + case action == ACCEPTCODE: + errorf("tokens are accepted") + return + case action == ERRCODE: + if token >= NTBASE { + errorf("error at non-terminal token %s", symnam(token)) + } + return + case action > 0: + // Shift to state action. + stack = append(stack, state) + state = action + token = -1 + goto Loop + default: + // Reduce by production -action. + prod := prdptr[-action] + if rhsLen := len(prod) - 2; rhsLen > 0 { + n := len(stack) - rhsLen + state = stack[n] + stack = stack[:n] + } + if token >= 0 { + i-- + } + token = prod[0] + goto Loop + } +} + func arout(s string, v []int, n int) { s = prefix + s fmt.Fprintf(ftable, "var %v = [...]int{\n", s) @@ -3212,7 +3330,6 @@ type $$Parser interface { type $$ParserImpl struct { lookahead func() int - state func() int } func (p *$$ParserImpl) Lookahead() int { @@ -3222,7 +3339,6 @@ func (p *$$ParserImpl) Lookahead() int { func $$NewParser() $$Parser { p := &$$ParserImpl{ lookahead: func() int { return -1 }, - state: func() int { return -1 }, } return p } @@ -3253,6 +3369,13 @@ func $$ErrorMessage(state, lookAhead int) string { if !$$ErrorVerbose { return "syntax error" } + + for _, e := range $$ErrorMessages { + if e.state == state && e.token == lookAhead { + return "syntax error: " + e.msg + } + } + res := "syntax error: unexpected " + $$Tokname(lookAhead) // To match Bison, suggest at most four expected tokens. @@ -3355,7 +3478,6 @@ func ($$rcvr *$$ParserImpl) Parse($$lex $$Lexer) int { $$state := 0 $$char := -1 $$token := -1 // $$char translated into internal numbering - $$rcvr.state = func() int { return $$state } $$rcvr.lookahead = func() int { return $$char } defer func() { // Make sure we report no lookahead when not parsing.