diff --git a/ast/file.go b/ast/file.go index 14b0d525..52e16962 100644 --- a/ast/file.go +++ b/ast/file.go @@ -181,10 +181,12 @@ func NewSyntaxNode(keyword *KeywordNode, equals *RuneNode, syntax StringValueNod if syntax == nil { panic("syntax is nil") } + var children []Node if semicolon == nil { - panic("semicolon is nil") + children = []Node{keyword, equals, syntax} + } else { + children = []Node{keyword, equals, syntax, semicolon} } - children := []Node{keyword, equals, syntax, semicolon} return &SyntaxNode{ compositeNode: compositeNode{ children: children, diff --git a/ast/options.go b/ast/options.go index 5127e951..1257f568 100644 --- a/ast/options.go +++ b/ast/options.go @@ -71,10 +71,13 @@ func NewOptionNode(keyword *KeywordNode, name *OptionNameNode, equals *RuneNode, if val == nil { panic("val is nil") } + var children []Node if semicolon == nil { - panic("semicolon is nil") + children = []Node{keyword, name, equals, val} + } else { + children = []Node{keyword, name, equals, val, semicolon} } - children := []Node{keyword, name, equals, val, semicolon} + return &OptionNode{ compositeNode: compositeNode{ children: children, diff --git a/ast/service.go b/ast/service.go index 99987b24..ca3e1ebb 100644 --- a/ast/service.go +++ b/ast/service.go @@ -141,10 +141,12 @@ func NewRPCNode(keyword *KeywordNode, name *IdentNode, input *RPCTypeNode, retur if output == nil { panic("output is nil") } + var children []Node if semicolon == nil { - panic("semicolon is nil") + children = []Node{keyword, name, input, returns, output} + } else { + children = []Node{keyword, name, input, returns, output, semicolon} } - children := []Node{keyword, name, input, returns, output, semicolon} return &RPCNode{ compositeNode: compositeNode{ children: children, diff --git a/parser/ast.go b/parser/ast.go index ea2ad966..644a6f0e 100644 --- a/parser/ast.go +++ b/parser/ast.go @@ -90,3 +90,41 @@ func (list *messageFieldList) toNodes() ([]*ast.MessageFieldNode, []*ast.RuneNod } return fields, delimiters } + +func newEmptyDeclNodes(semicolons []*ast.RuneNode) []*ast.EmptyDeclNode { + emptyDecls := make([]*ast.EmptyDeclNode, len(semicolons)) + for i, semicolon := range semicolons { + emptyDecls[i] = ast.NewEmptyDeclNode(semicolon) + } + return emptyDecls +} + +func newServiceElements(semicolons []*ast.RuneNode, elements []ast.ServiceElement) []ast.ServiceElement { + elems := make([]ast.ServiceElement, 0, len(semicolons)+len(elements)) + for _, semicolon := range semicolons { + elems = append(elems, ast.NewEmptyDeclNode(semicolon)) + } + elems = append(elems, elements...) + return elems +} + +type nodeWithEmptyDecls[T ast.Node] struct { + Node T + EmptyDecls []*ast.EmptyDeclNode +} + +func newNodeWithEmptyDecls[T ast.Node](node T, extraSemicolons []*ast.RuneNode) nodeWithEmptyDecls[T] { + return nodeWithEmptyDecls[T]{ + Node: node, + EmptyDecls: newEmptyDeclNodes(extraSemicolons), + } +} + +func toServiceElements[T ast.ServiceElement](nodes nodeWithEmptyDecls[T]) []ast.ServiceElement { + serviceElements := make([]ast.ServiceElement, 1+len(nodes.EmptyDecls)) + serviceElements[0] = nodes.Node + for i, emptyDecl := range nodes.EmptyDecls { + serviceElements[i+1] = emptyDecl + } + return serviceElements +} diff --git a/parser/lexer.go b/parser/lexer.go index 7cdd37bd..a98b0cd8 100644 --- a/parser/lexer.go +++ b/parser/lexer.go @@ -761,3 +761,11 @@ func (l *protoLex) errWithCurrentPos(err error, offset int) reporter.ErrorWithPo pos := l.info.SourcePos(l.input.offset() + offset) return reporter.Error(ast.NewSourceSpan(pos, pos), err) } + +func (l *protoLex) requireSemicolon(semicolons []*ast.RuneNode) (*ast.RuneNode, []*ast.RuneNode) { + if len(semicolons) == 0 { + l.Error("expected ';'") + return nil, nil + } + return semicolons[0], semicolons[1:] +} diff --git a/parser/parser_test.go b/parser/parser_test.go index f06f575c..a2657345 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -82,6 +82,51 @@ func TestJunkParse(t *testing.T) { } } +func TestLenientParse_SemicolonLess(t *testing.T) { + t.Parallel() + inputs := map[string]struct { + Error string + NoError string + }{ + "method": { + Error: `syntax = "proto3"; + service Foo { + ; + rpc Bar (Baz) returns (Qux) + rpc Qux (Baz) returns (Qux);; + }`, + NoError: `syntax = "proto3"; + service Foo { + ; + rpc Bar (Baz) returns (Qux); + rpc Qux (Baz) returns (Qux);; + }`, + }, + "service-options": { + Error: `syntax = "proto3"; + service Foo { + option (foo) = { bar: 1 } + }`, + NoError: `syntax = "proto3"; + service Foo { + option (foo) = { bar: 1 }; + }`, + }, + } + for name, input := range inputs { + name, input := name, input + t.Run(name, func(t *testing.T) { + t.Parallel() + errHandler := reporter.NewHandler(nil) + protoName := fmt.Sprintf("%s.proto", name) + _, err := Parse(protoName, strings.NewReader(input.NoError), errHandler) + require.NoError(t, err) + _, err = Parse(protoName, strings.NewReader(input.Error), errHandler) + require.ErrorContains(t, err, "expected ';'") + }) + } +} + func TestSimpleParse(t *testing.T) { t.Parallel() protos := map[string]Result{} diff --git a/parser/proto.y b/parser/proto.y index dd1d6bb6..5361e330 100644 --- a/parser/proto.y +++ b/parser/proto.y @@ -43,11 +43,12 @@ import ( svc *ast.ServiceNode svcElement ast.ServiceElement svcElements []ast.ServiceElement - mtd *ast.RPCNode + mtd nodeWithEmptyDecls[*ast.RPCNode] mtdMsgType *ast.RPCTypeNode mtdElement ast.RPCElement mtdElements []ast.RPCElement opt *ast.OptionNode + optN nodeWithEmptyDecls[*ast.OptionNode] opts *compactOptionSlices ref *ast.FieldReferenceNode optNms *fieldRefSlices @@ -68,6 +69,7 @@ import ( f *ast.FloatLiteralNode id *ast.IdentNode b *ast.RuneNode + bs []*ast.RuneNode err error } @@ -81,6 +83,7 @@ import ( %type importDecl %type packageDecl %type optionDecl compactOption +%type optionDeclWithEmptyDecls %type compactOptionDecls %type extensionName messageLiteralFieldName %type optionName @@ -117,12 +120,12 @@ import ( %type extensionElements extensionBody %type stringLit %type serviceDecl -%type serviceElement -%type serviceElements serviceBody +%type serviceElement serviceElements serviceBody %type methodDecl %type methodElement %type methodElements methodBody %type methodMessageType +%type semicolons semicolonList // same for terminals %token _STRING_LIT @@ -214,6 +217,20 @@ fileElement : importDecl { $$ = nil } +semicolonList : ';' { + $$ = []*ast.RuneNode{$1} + } + | semicolonList ';' { + $$ = append($1, $2) + } + +semicolons : semicolonList { + $$ = $1 + } + | { + $$ = nil + } + syntaxDecl : _SYNTAX '=' stringLit ';' { $$ = ast.NewSyntaxNode($1.ToKeyword(), $2, toStringValueNode($3), $4) } @@ -299,6 +316,12 @@ optionDecl : _OPTION optionName '=' optionValue ';' { $$ = ast.NewOptionNode($1.ToKeyword(), optName, $3, $4, $5) } +optionDeclWithEmptyDecls : _OPTION optionName '=' optionValue semicolons { + optName := ast.NewOptionNameNode($2.refs, $2.dots) + semi, extra := protolex.(*protoLex).requireSemicolon($5) + $$ = newNodeWithEmptyDecls(ast.NewOptionNode($1.ToKeyword(), optName, $3, $4, semi), extra) + } + optionName : identifier { fieldReferenceNode := ast.NewFieldReferenceNode($1) $$ = &fieldRefSlices{refs: []*ast.FieldReferenceNode{fieldReferenceNode}} @@ -937,47 +960,39 @@ serviceDecl : _SERVICE identifier '{' serviceBody '}' { $$ = ast.NewServiceNode($1.ToKeyword(), $2, $3, $4, $5) } -serviceBody : { - $$ = nil +serviceBody : semicolons { + $$ = newServiceElements($1, nil) + } + | semicolons serviceElements { + $$ = newServiceElements($1, $2) } - | serviceElements serviceElements : serviceElements serviceElement { - if $2 != nil { - $$ = append($1, $2) - } else { - $$ = $1 - } + $$ = append($1, $2...) } | serviceElement { - if $1 != nil { - $$ = []ast.ServiceElement{$1} - } else { - $$ = nil - } + $$ = $1 } // NB: doc suggests support for "stream" declaration, separate from "rpc", but // it does not appear to be supported in protoc (doc is likely from grammar for // Google-internal version of protoc, with support for streaming stubby) -serviceElement : optionDecl { - $$ = $1 +serviceElement : optionDeclWithEmptyDecls { + $$ = toServiceElements($1) } | methodDecl { - $$ = $1 - } - | ';' { - $$ = ast.NewEmptyDeclNode($1) + $$ = toServiceElements($1) } | error { $$ = nil } -methodDecl : _RPC identifier methodMessageType _RETURNS methodMessageType ';' { - $$ = ast.NewRPCNode($1.ToKeyword(), $2, $3, $4.ToKeyword(), $5, $6) +methodDecl : _RPC identifier methodMessageType _RETURNS methodMessageType semicolons { + semi, extra := protolex.(*protoLex).requireSemicolon($6) + $$ = newNodeWithEmptyDecls(ast.NewRPCNode($1.ToKeyword(), $2, $3, $4.ToKeyword(), $5, semi), extra) } - | _RPC identifier methodMessageType _RETURNS methodMessageType '{' methodBody '}' { - $$ = ast.NewRPCNodeWithBody($1.ToKeyword(), $2, $3, $4.ToKeyword(), $5, $6, $7, $8) + | _RPC identifier methodMessageType _RETURNS methodMessageType '{' methodBody '}' semicolons { + $$ = newNodeWithEmptyDecls(ast.NewRPCNodeWithBody($1.ToKeyword(), $2, $3, $4.ToKeyword(), $5, $6, $7, $8), $9) } methodMessageType : '(' _STREAM typeName ')' { diff --git a/parser/proto.y.go b/parser/proto.y.go index 63db19c9..6d45619a 100644 --- a/parser/proto.y.go +++ b/parser/proto.y.go @@ -56,11 +56,12 @@ type protoSymType struct { svc *ast.ServiceNode svcElement ast.ServiceElement svcElements []ast.ServiceElement - mtd *ast.RPCNode + mtd nodeWithEmptyDecls[*ast.RPCNode] mtdMsgType *ast.RPCTypeNode mtdElement ast.RPCElement mtdElements []ast.RPCElement opt *ast.OptionNode + optN nodeWithEmptyDecls[*ast.OptionNode] opts *compactOptionSlices ref *ast.FieldReferenceNode optNms *fieldRefSlices @@ -81,6 +82,7 @@ type protoSymType struct { f *ast.FloatLiteralNode id *ast.IdentNode b *ast.RuneNode + bs []*ast.RuneNode err error } @@ -244,400 +246,403 @@ var protoExca = [...]int16{ 1, 5, -2, 0, -1, 100, - 56, 182, + 56, 187, -2, 0, -1, 101, - 56, 170, + 56, 175, -2, 0, -1, 102, - 56, 203, - -2, 0, - -1, 104, - 56, 216, + 56, 208, -2, 0, -1, 125, - 56, 183, + 56, 188, -2, 0, -1, 186, - 56, 171, + 56, 176, -2, 0, -1, 239, - 56, 204, + 56, 209, -2, 0, -1, 290, - 56, 217, + 56, 221, + -2, 0, + -1, 297, + 56, 65, + 62, 65, -2, 0, - -1, 301, - 56, 60, - 62, 60, + -1, 389, + 56, 222, -2, 0, - -1, 421, - 56, 117, + -1, 423, + 56, 122, -2, 0, - -1, 479, - 56, 118, + -1, 482, + 56, 123, -2, 0, - -1, 631, - 56, 182, + -1, 633, + 56, 187, -2, 0, - -1, 647, - 56, 228, + -1, 656, + 56, 187, -2, 0, - -1, 652, - 56, 182, + -1, 662, + 56, 232, -2, 0, - -1, 658, - 56, 229, + -1, 669, + 56, 187, -2, 0, - -1, 667, - 56, 182, + -1, 672, + 56, 233, -2, 0, - -1, 674, - 56, 182, + -1, 680, + 56, 187, -2, 0, } const protoPrivate = 57344 -const protoLast = 1683 +const protoLast = 1706 var protoAct = [...]int16{ - 10, 124, 13, 12, 659, 11, 417, 110, 454, 406, - 85, 111, 592, 34, 450, 474, 480, 382, 381, 365, - 86, 298, 113, 452, 300, 291, 316, 240, 187, 132, - 139, 364, 145, 80, 83, 84, 126, 88, 81, 33, - 29, 465, 628, 96, 598, 466, 402, 116, 96, 665, - 89, 90, 464, 93, 94, 407, 462, 630, 627, 605, - 408, 597, 416, 667, 419, 643, 626, 604, 633, 596, - 418, 631, 619, 614, 602, 533, 419, 419, 648, 383, - 419, 623, 383, 419, 419, 123, 116, 419, 419, 419, - 419, 451, 376, 99, 407, 642, 595, 532, 96, 624, - 612, 133, 188, 130, 128, 292, 129, 112, 103, 116, - 109, 115, 121, 400, 401, 95, 537, 407, 413, 444, - 672, 399, 96, 461, 390, 374, 133, 443, 130, 128, - 305, 129, 242, 244, 195, 426, 677, 122, 16, 384, - 424, 675, 384, 427, 5, 6, 17, 423, 425, 18, - 19, 398, 606, 97, 363, 418, 367, 368, 373, 397, - 98, 98, 314, 671, 669, 663, 646, 372, 647, 92, - 607, 375, 395, 392, 295, 385, 369, 377, 313, 674, - 21, 20, 22, 23, 16, 662, 19, 188, 652, 15, - 421, 92, 17, 104, 102, 18, 19, 19, 101, 100, - 92, 92, 92, 656, 653, 645, 641, 635, 373, 617, - 609, 471, 387, 297, 639, 378, 638, 372, 108, 195, - 296, 538, 468, 467, 540, 294, 21, 20, 22, 23, - 448, 422, 415, 379, 445, 15, 661, 28, 27, 7, - 107, 420, 475, 655, 26, 312, 310, 476, 654, 106, - 105, 91, 618, 657, 309, 307, 601, 311, 600, 389, - 539, 529, 79, 366, 26, 26, 308, 386, 391, 242, - 244, 388, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 477, 32, 4, 470, 446, 24, - 25, 292, 30, 31, 92, 32, 658, 293, 289, 290, - 14, 238, 239, 189, 185, 186, 131, 380, 190, 136, - 394, 371, 370, 404, 478, 305, 393, 479, 125, 143, - 135, 483, 134, 241, 482, 127, 396, 409, 302, 411, - 412, 301, 460, 589, 542, 485, 245, 140, 591, 414, - 32, 120, 117, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 543, 428, 317, - 487, 116, 246, 149, 193, 545, 319, 442, 489, 407, - 119, 118, 447, 248, 449, 590, 152, 429, 403, 405, - 455, 114, 304, 453, 453, 115, 115, 463, 473, 9, - 8, 305, 481, 3, 2, 1, 457, 469, 0, 458, - 0, 0, 0, 80, 0, 0, 0, 0, 472, 0, - 0, 531, 0, 0, 0, 0, 0, 0, 530, 534, + 10, 34, 13, 673, 12, 11, 290, 457, 124, 86, + 111, 549, 544, 85, 477, 483, 408, 110, 378, 113, + 419, 80, 83, 84, 361, 88, 377, 294, 33, 455, + 390, 296, 478, 312, 132, 139, 240, 29, 145, 187, + 360, 126, 81, 630, 468, 629, 96, 89, 90, 96, + 93, 94, 79, 628, 465, 467, 404, 116, 632, 562, + 554, 418, 669, 667, 645, 409, 635, 561, 553, 420, + 410, 633, 576, 571, 559, 421, 421, 536, 421, 421, + 292, 421, 663, 555, 421, 651, 469, 421, 421, 421, + 379, 545, 421, 123, 379, 372, 99, 103, 109, 115, + 121, 133, 188, 130, 116, 128, 129, 116, 402, 403, + 644, 446, 409, 552, 112, 409, 401, 428, 301, 445, + 535, 464, 95, 96, 426, 429, 133, 540, 130, 96, + 128, 129, 427, 652, 569, 425, 415, 242, 244, 400, + 195, 122, 359, 420, 363, 364, 369, 399, 563, 543, + 380, 97, 386, 370, 380, 680, 98, 98, 686, 98, + 371, 683, 16, 681, 368, 677, 665, 310, 5, 6, + 17, 564, 397, 18, 19, 292, 388, 662, 16, 381, + 373, 309, 676, 656, 423, 365, 17, 188, 104, 18, + 19, 102, 101, 100, 19, 92, 369, 92, 678, 92, + 92, 92, 660, 657, 21, 20, 22, 23, 647, 643, + 637, 574, 566, 15, 368, 474, 396, 383, 293, 641, + 21, 20, 22, 23, 640, 195, 374, 541, 659, 15, + 471, 470, 658, 675, 450, 424, 417, 375, 28, 27, + 579, 393, 479, 447, 108, 422, 107, 385, 106, 105, + 91, 575, 558, 394, 557, 542, 532, 387, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 308, 306, 7, 362, 242, 244, 382, 26, 384, 480, + 305, 303, 307, 32, 291, 473, 448, 395, 92, 32, + 30, 31, 304, 671, 672, 392, 289, 26, 26, 301, + 4, 389, 14, 24, 25, 238, 239, 189, 406, 185, + 186, 131, 411, 413, 414, 376, 190, 136, 367, 366, + 481, 482, 125, 143, 416, 135, 486, 134, 241, 398, + 485, 127, 298, 297, 463, 546, 581, 243, 488, 245, + 140, 582, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 148, 147, 146, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 430, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 449, 313, 451, 490, + 246, 149, 193, 584, 444, 247, 80, 454, 315, 492, + 248, 152, 431, 405, 407, 115, 115, 458, 114, 300, + 476, 301, 391, 9, 456, 456, 8, 472, 466, 3, + 452, 2, 1, 80, 484, 0, 0, 453, 0, 0, + 0, 534, 0, 0, 460, 0, 0, 461, 0, 0, + 0, 0, 0, 0, 0, 475, 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 535, 536, 0, 594, 0, 0, 593, 0, - 115, 0, 0, 0, 0, 0, 0, 603, 0, 0, - 481, 0, 0, 0, 0, 0, 599, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 0, 0, 610, - 611, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 115, 0, 0, 0, 537, 539, 551, 0, 0, + 550, 0, 538, 0, 0, 0, 0, 0, 556, 0, + 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, + 567, 568, 0, 0, 560, 0, 0, 0, 565, 0, + 0, 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, - 0, 0, 0, 616, 0, 0, 620, 0, 0, 0, - 0, 0, 622, 0, 0, 621, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 115, 0, 0, 0, 573, + 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, + 112, 578, 631, 577, 80, 115, 0, 0, 0, 0, + 0, 642, 0, 0, 0, 0, 0, 638, 634, 636, + 112, 639, 0, 0, 0, 648, 0, 0, 0, 0, + 0, 0, 649, 653, 650, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 629, 632, 634, 0, - 0, 0, 0, 0, 637, 0, 112, 0, 0, 80, - 115, 636, 0, 0, 0, 644, 640, 0, 0, 0, - 0, 0, 133, 651, 130, 128, 594, 129, 649, 593, - 650, 115, 0, 0, 0, 0, 0, 0, 660, 0, - 0, 0, 0, 133, 664, 130, 128, 0, 129, 660, - 0, 666, 668, 670, 0, 0, 0, 0, 133, 673, - 130, 128, 0, 129, 0, 133, 676, 130, 128, 0, - 129, 32, 120, 117, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 0, 0, - 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, - 407, 119, 118, 0, 0, 456, 32, 120, 117, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 0, 0, 0, 116, 0, 0, - 0, 0, 0, 0, 0, 407, 119, 118, 32, 120, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 115, 0, 0, 133, 0, 130, 551, 128, 129, + 550, 654, 655, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 664, 0, 661, 133, 0, 130, + 0, 128, 129, 674, 0, 666, 0, 0, 0, 0, + 133, 0, 130, 674, 128, 129, 682, 0, 679, 668, + 670, 133, 0, 130, 0, 128, 129, 0, 685, 684, + 548, 0, 32, 120, 117, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, + 0, 409, 119, 118, 0, 0, 0, 547, 32, 120, 117, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0, 0, 0, 116, - 0, 0, 0, 0, 0, 303, 0, 0, 119, 118, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 459, 0, 303, 0, 0, - 0, 306, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 0, 0, 0, - 0, 299, 0, 0, 0, 0, 0, 0, 0, 303, - 0, 0, 0, 306, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 32, 383, 306, 35, 36, 37, 38, + 0, 0, 0, 0, 0, 0, 0, 409, 119, 118, + 0, 0, 459, 32, 120, 117, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 384, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 138, 0, 0, 0, 82, 153, 154, 155, 156, 157, - 158, 159, 19, 160, 161, 162, 163, 148, 147, 146, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 0, 142, 151, 141, 179, - 180, 144, 21, 20, 22, 181, 182, 183, 184, 0, - 0, 137, 0, 0, 0, 0, 0, 0, 150, 35, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 409, 119, 118, 32, 120, 117, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 299, 0, 0, 119, 118, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 462, 0, 299, 0, 0, 0, 302, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, - 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, - 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 541, 588, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 544, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 315, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 0, 0, 0, 0, 0, 243, 0, 0, 0, - 318, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 148, 147, 146, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 0, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 0, 0, 0, 0, 0, - 484, 0, 0, 0, 247, 490, 491, 492, 493, 494, - 495, 496, 19, 497, 498, 499, 500, 0, 0, 0, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 486, 516, 517, 518, 519, - 520, 521, 522, 523, 524, 525, 526, 527, 528, 0, - 0, 0, 0, 0, 192, 0, 0, 0, 488, 196, - 197, 198, 199, 200, 201, 202, 19, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 194, 231, 232, 233, 234, - 235, 236, 237, 32, 366, 191, 35, 36, 37, 38, + 76, 77, 78, 0, 0, 0, 0, 0, 295, 0, + 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, + 302, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 379, 302, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 380, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, + 0, 82, 153, 154, 155, 156, 157, 158, 159, 19, + 160, 161, 162, 163, 148, 147, 146, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 0, 142, 151, 141, 179, 180, 144, 21, + 20, 22, 181, 182, 183, 184, 0, 0, 137, 0, + 0, 0, 0, 0, 0, 150, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 410, 0, 0, 0, 0, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 35, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 580, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 583, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 311, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 0, 0, + 0, 0, 0, 487, 0, 0, 0, 314, 493, 494, + 495, 496, 497, 498, 499, 19, 500, 501, 502, 503, + 0, 0, 0, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, 516, 517, 518, 489, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 0, 0, 0, 0, 0, 192, 0, 0, + 0, 491, 196, 197, 198, 199, 200, 201, 202, 19, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 194, 231, + 232, 233, 234, 235, 236, 237, 32, 362, 191, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, + 76, 77, 78, 412, 0, 0, 0, 0, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, } var protoPact = [...]int16{ - 136, -1000, 182, 182, 182, 186, 185, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 281, 1632, 1108, - 1632, 1632, 1222, 1632, 182, 182, -1000, 291, 291, 198, - 291, 291, -1000, 62, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 160, -1000, 176, 176, 176, 187, 186, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 279, 1655, 1185, + 1655, 1655, 1299, 1655, 176, 176, -1000, 285, 285, 197, + 285, 285, -1000, 69, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 101, - -1000, -1000, 1222, 144, 143, 139, 38, 1632, 138, 197, - 196, -1000, -1000, 187, 165, -1000, 1632, 804, 1108, 18, - 1168, 1492, 1384, 38, 172, -1000, -1000, -1000, -1000, -1000, - 160, -1000, -1000, 290, -1000, -1000, 925, -1000, 249, 240, - -1000, -1000, -1000, -1000, 122, 1168, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1330, - 1632, 258, 1632, 1632, 1539, -1000, -1000, -1000, -1000, 65, - 1632, 29, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 121, 1492, -1000, -1000, -1000, - -1000, -1000, -1000, 181, 1049, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 99, + -1000, -1000, 1299, 138, 137, 136, 63, 1655, 133, 196, + 195, -1000, -1000, 193, 191, -1000, 1655, 881, 1185, 26, + 1245, 1515, 335, 63, 27, -1000, -1000, -1000, -1000, -1000, + 165, -1000, -1000, 284, -1000, -1000, 1002, -1000, 275, 265, + -1000, -1000, -1000, -1000, 125, 1245, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1407, + 1655, 268, 1655, 1655, 1562, -1000, -1000, -1000, -1000, 93, + 1655, 32, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 124, 1515, -1000, -1000, -1000, + -1000, -1000, -1000, 185, 1126, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 119, 1384, - -1000, -1000, -1000, 159, 1330, 1632, 64, 1632, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 123, 335, + -1000, -1000, -1000, 164, 1407, 1655, 92, 1655, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 117, - 172, -1000, -1000, -1000, -1000, -1000, 1632, -1000, 116, -1000, - -1000, 987, 98, 60, -8, -1000, 1588, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1632, 1632, 58, 1632, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 120, + 239, 163, -1000, -1000, 116, -1000, -1000, 1064, 86, 55, + 2, -1000, 1611, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1655, 1655, 76, 1655, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 180, 9, -1000, 200, 135, 179, 94, - 87, 82, 290, -1000, 1632, 38, 248, -1000, -1000, 77, - 66, -1000, 193, -1000, 283, -1000, -1000, -1000, 1632, 178, - 1632, 38, -1000, -1000, 25, -1000, -1000, -1000, -1000, -1000, - -1000, 677, 677, -1000, -1000, -1000, -1000, 863, 54, -17, - -24, 171, 170, 1632, 38, 282, -1000, 158, 258, 1108, - 242, 1438, 256, -1000, -1000, 291, -1000, 1632, -1000, 36, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 22, 77, -1000, 74, -1000, 169, 255, -1000, - 174, 1276, -1000, -1000, -1000, -1000, 336, -1000, 34, -1000, - 0, -1000, -25, -1000, -1000, 1632, -1000, 253, 251, -1000, - 21, -1000, -1000, -2, -1000, 100, -1000, -1000, 114, 1438, - -1000, -1000, -1000, -1000, 157, 1632, 1632, 40, 1632, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 184, + 8, -1000, 204, 129, 183, 82, 71, 64, 284, -1000, + 1655, 63, 234, -1000, -1000, 89, 58, -1000, 202, -1000, + 281, -1000, -1000, -1000, 1655, 182, 1655, 63, -1000, 239, + -1000, -1000, -1000, -1000, 1185, 1655, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 754, 754, -1000, -1000, -1000, -1000, 940, + 52, -14, 17, 179, 178, 1655, 63, 280, -1000, 162, + 268, 1185, 237, 1461, 251, -1000, -1000, 285, -1000, 1655, + -1000, 59, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 24, 89, -1000, 85, -1000, 175, + 250, -1000, -1000, 97, 25, -1000, -1000, -1000, -1000, 688, + -1000, 51, -1000, -1, -1000, 14, -1000, -1000, 1655, -1000, + 249, 247, -1000, 21, -1000, -1000, -2, -1000, 96, -1000, + -1000, 115, 1461, -1000, -1000, -1000, -1000, 159, 1655, 1655, + 74, 1655, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 20, - 290, -1000, 1222, -1000, 156, -1000, -1000, -1000, 247, 19, - 25, 1222, 14, 39, 1632, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 20, 284, -1000, 1299, -1000, 158, -1000, -1000, + -1000, 246, 19, 881, 190, 1353, -16, -1000, -26, -1000, + -1000, -1000, -1000, -1000, 49, -1000, -11, 16, 13, -1000, + 157, -1000, 1185, 881, -1000, -1000, -1000, 172, 167, 1655, + 63, -1000, 156, 48, -1000, 11, -1000, 155, 27, 25, + 1299, 18, 73, 1655, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -3, - -1000, -27, -1000, -1000, -1000, -1000, -1000, 31, -1000, -12, - 16, 15, -1000, 154, -1000, 1108, 804, -1000, -1000, -1000, - 164, 162, 1632, 38, -1000, 153, 33, -1000, 12, -1000, - 152, 113, 11, -1000, 1632, 38, -1000, 742, -1000, -1000, - -1000, 1168, 133, -1000, 151, -1000, -1000, -1000, 243, 238, - -1000, -1000, -1000, -1000, 150, -1000, -1000, 183, -1000, -1000, - -1000, 109, 1168, -1000, -4, 8, -1000, 108, 183, -1000, - -1000, -1000, -1000, -1000, 107, -1000, 67, 1168, 124, -1000, - -1000, -1000, -1000, 85, 1168, -1000, 80, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 819, + -1000, -1000, -1000, 1245, 128, -1000, 150, -1000, -1000, -1000, + 227, 223, -1000, -1000, -1000, -1000, 149, -1000, -1000, 122, + 15, -1000, 1655, 63, -1000, 110, 1245, -1000, 10, 7, + -1000, -1000, 180, -1000, -1000, -1000, 109, -1000, 145, 1245, + 100, 107, 180, -1000, -1000, -1000, -1000, -1000, -1000, 105, + 1245, 27, -1000, -1000, 102, -1000, -1000, } var protoPgo = [...]int16{ - 0, 425, 424, 423, 239, 286, 420, 419, 0, 15, - 418, 38, 412, 242, 6, 23, 7, 11, 9, 8, - 411, 410, 12, 409, 408, 17, 13, 407, 406, 403, - 398, 396, 395, 394, 30, 20, 393, 392, 390, 389, - 387, 10, 337, 336, 335, 26, 334, 333, 332, 331, - 24, 21, 328, 325, 324, 323, 322, 29, 321, 320, - 319, 5, 36, 318, 1, 16, 317, 314, 312, 311, - 309, 308, 32, 19, 18, 31, 307, 306, 3, 28, - 305, 304, 303, 2, 27, 302, 301, 22, 300, 25, - 299, 298, 297, 4, 296, 253, 14, + 0, 422, 421, 419, 272, 300, 416, 413, 0, 14, + 412, 410, 42, 409, 32, 20, 29, 17, 10, 16, + 7, 408, 407, 11, 404, 403, 18, 1, 402, 401, + 400, 399, 398, 393, 392, 35, 9, 391, 390, 389, + 387, 341, 13, 340, 339, 338, 33, 336, 335, 334, + 333, 31, 27, 332, 331, 330, 328, 327, 34, 326, + 325, 323, 5, 41, 322, 8, 15, 321, 320, 319, + 318, 317, 316, 38, 24, 26, 40, 315, 311, 4, + 39, 310, 309, 307, 2, 36, 306, 305, 19, 302, + 30, 301, 296, 295, 3, 294, 293, 12, 6, 284, } var protoR1 = [...]int8{ 0, 1, 1, 1, 1, 1, 1, 5, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, - 6, 6, 6, 7, 35, 35, 36, 36, 37, 37, - 38, 38, 39, 39, 40, 40, 8, 13, 13, 13, - 13, 11, 16, 16, 17, 17, 17, 20, 20, 20, - 20, 20, 20, 20, 20, 87, 87, 18, 18, 51, - 50, 50, 49, 49, 49, 49, 49, 49, 52, 52, - 52, 12, 12, 12, 12, 15, 15, 15, 24, 24, - 19, 19, 19, 21, 21, 21, 47, 47, 22, 22, - 23, 23, 23, 48, 48, 41, 41, 42, 42, 43, - 43, 44, 44, 45, 45, 46, 46, 34, 34, 34, - 14, 10, 10, 9, 57, 57, 56, 67, 67, 66, - 66, 65, 65, 65, 65, 65, 54, 54, 58, 58, - 59, 59, 60, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 77, 77, 75, 75, 73, - 73, 73, 76, 76, 74, 74, 74, 25, 25, 70, - 70, 71, 71, 72, 72, 68, 68, 69, 69, 78, - 81, 81, 80, 80, 79, 79, 79, 79, 79, 82, - 82, 61, 64, 64, 63, 63, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 53, 53, - 53, 53, 83, 86, 86, 85, 85, 84, 84, 84, - 84, 55, 55, 55, 55, 88, 91, 91, 90, 90, - 89, 89, 89, 89, 92, 92, 96, 96, 95, 95, - 94, 94, 93, 93, 93, 28, 28, 28, 28, 28, + 4, 4, 4, 4, 4, 4, 4, 4, 99, 99, + 98, 98, 2, 3, 6, 6, 6, 7, 36, 36, + 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, + 8, 10, 14, 14, 14, 14, 12, 17, 17, 18, + 18, 18, 21, 21, 21, 21, 21, 21, 21, 21, + 88, 88, 19, 19, 52, 51, 51, 50, 50, 50, + 50, 50, 50, 53, 53, 53, 13, 13, 13, 13, + 16, 16, 16, 25, 25, 20, 20, 20, 22, 22, + 22, 48, 48, 23, 23, 24, 24, 24, 49, 49, + 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, + 47, 47, 35, 35, 35, 15, 11, 11, 9, 58, + 58, 57, 68, 68, 67, 67, 66, 66, 66, 66, + 66, 55, 55, 59, 59, 60, 60, 61, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, + 78, 78, 76, 76, 74, 74, 74, 77, 77, 75, + 75, 75, 26, 26, 71, 71, 72, 72, 73, 73, + 69, 69, 70, 70, 79, 82, 82, 81, 81, 80, + 80, 80, 80, 80, 83, 83, 62, 65, 65, 64, + 64, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 54, 54, 54, 54, 84, 87, 87, + 86, 86, 85, 85, 85, 85, 56, 56, 56, 56, + 89, 92, 92, 91, 91, 90, 90, 90, 93, 93, + 97, 97, 96, 96, 95, 95, 94, 94, 94, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, + 30, 30, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, + 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, + 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, } var protoR2 = [...]int8{ 0, 1, 1, 1, 2, 2, 0, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, - 3, 4, 4, 3, 1, 3, 1, 3, 1, 3, - 1, 3, 1, 3, 1, 3, 5, 1, 3, 1, - 3, 3, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 1, 2, 2, 1, 2, 3, 2, 1, - 1, 2, 1, 2, 2, 2, 2, 1, 3, 2, - 3, 1, 3, 5, 3, 1, 1, 1, 1, 1, - 1, 3, 2, 3, 2, 3, 1, 3, 1, 1, - 3, 2, 3, 1, 3, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, - 3, 1, 3, 3, 8, 9, 5, 0, 1, 2, - 1, 1, 1, 1, 2, 1, 5, 6, 7, 8, - 5, 6, 6, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 4, 1, 3, 1, - 3, 3, 1, 3, 1, 3, 3, 1, 2, 3, - 1, 3, 1, 3, 3, 1, 3, 1, 3, 5, - 0, 1, 2, 1, 1, 1, 1, 1, 1, 4, - 5, 5, 0, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 6, 7, - 5, 6, 5, 0, 1, 2, 1, 1, 1, 2, - 1, 6, 7, 5, 6, 5, 0, 1, 2, 1, - 1, 1, 1, 1, 6, 8, 4, 3, 0, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 0, 4, 4, 3, 4, 4, 3, 1, 3, + 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, + 5, 5, 1, 3, 1, 3, 3, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, + 1, 2, 3, 2, 1, 1, 2, 1, 2, 2, + 2, 2, 1, 3, 2, 3, 1, 3, 5, 3, + 1, 1, 1, 1, 1, 1, 3, 2, 3, 2, + 3, 1, 3, 1, 1, 3, 2, 3, 1, 3, + 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, + 1, 2, 1, 1, 1, 3, 1, 3, 3, 8, + 9, 5, 0, 1, 2, 1, 1, 1, 1, 2, + 1, 5, 6, 7, 8, 5, 6, 6, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 4, 1, 3, 1, 3, 3, 1, 3, 1, + 3, 3, 1, 2, 3, 1, 3, 1, 3, 3, + 1, 3, 1, 3, 5, 0, 1, 2, 1, 1, + 1, 1, 1, 1, 4, 5, 5, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 6, 7, 5, 6, 5, 0, 1, + 2, 1, 1, 1, 2, 1, 6, 7, 5, 6, + 5, 1, 2, 2, 1, 1, 1, 1, 6, 9, + 4, 3, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -664,149 +669,153 @@ var protoR2 = [...]int8{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, } var protoChk = [...]int16{ -1000, -1, -2, -3, -5, 8, 9, -4, -6, -7, - -8, -61, -78, -83, -88, 53, 2, 10, 13, 14, - 45, 44, 46, 47, -5, -5, -4, 52, 52, -87, - 11, 12, 4, -35, -26, 7, 8, 9, 10, 11, + -8, -62, -79, -84, -89, 53, 2, 10, 13, 14, + 45, 44, 46, 47, -5, -5, -4, 52, 52, -88, + 11, 12, 4, -36, -27, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, -13, - -26, -11, 66, -26, -26, -41, -35, 60, -26, -87, - -87, 53, 4, -87, -87, 53, 60, 52, 60, -41, - 55, 55, 55, -35, 55, 53, 53, 53, 53, -26, - -16, -17, -18, -87, -20, -26, 55, 6, 65, 64, - 5, -26, -11, 67, -64, -63, -62, -53, -78, -61, - -83, -77, -57, -8, -56, -59, -70, 53, 2, -34, - -42, 40, 38, -60, 43, -72, 21, 20, 19, -36, - 60, 39, -28, 7, 8, 9, 10, 11, 12, 13, + 42, 43, 44, 45, 46, 47, 48, 49, 50, -14, + -27, -12, 66, -27, -27, -42, -36, 60, -27, -88, + -88, 53, 4, -88, -88, 53, 60, 52, 60, -42, + 55, 55, 55, -36, 55, 53, 53, 53, 53, -27, + -17, -18, -19, -88, -21, -27, 55, 6, 65, 64, + 5, -27, -12, 67, -65, -64, -63, -54, -79, -62, + -84, -78, -58, -8, -57, -60, -71, 53, 2, -35, + -43, 40, 38, -61, 43, -73, 21, 20, 19, -37, + 60, 39, -29, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 41, - 42, 47, 48, 49, 50, -81, -80, -79, -8, -82, - -71, 53, 2, -33, 43, -72, 7, 8, 9, 10, + 42, 47, 48, 49, 50, -82, -81, -80, -8, -83, + -72, 53, 2, -34, 43, -73, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 44, 45, 46, 47, 48, 49, 50, -86, -85, - -84, -55, -57, 2, -34, -43, -37, 60, -29, 7, + 42, 44, 45, 46, 47, 48, 49, 50, -87, -86, + -85, -56, -58, 2, -35, -44, -38, 60, -30, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, -91, - -90, -89, -8, -92, 53, 2, 48, 53, -51, 56, - -50, -49, -52, 2, -12, -26, 68, 6, 17, 5, - 6, 17, 5, 56, -62, 37, -45, -39, 60, -31, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, -26, -75, -73, 5, -26, -26, -75, - -68, -69, -87, -26, 60, -35, 63, 56, -79, 52, - -76, -74, -25, 5, 65, 56, -84, 53, -45, -26, - 60, -35, 56, -89, -26, 56, -50, 61, 53, 61, - 53, 54, 54, -24, -19, -23, -18, 63, 68, -35, - 2, -26, -26, 60, -35, 52, 53, -14, 61, 68, - 41, 55, 52, 53, 53, 61, 53, 61, -26, -27, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, -25, 61, 53, 41, 5, -26, 52, -26, - -96, 66, -15, -17, -19, -21, 68, -15, -51, 62, - -48, 69, 2, -19, 69, 58, 69, 52, 52, -26, - 5, 53, -73, -10, -9, -13, 5, 42, -67, -66, - -65, -8, -54, -58, 2, -44, 37, -38, 60, -30, - 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, - 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 5, - -87, -26, 61, 53, -14, -74, -25, 42, 52, 5, - 50, 49, -46, -40, 60, -32, 7, 8, 9, 10, + 42, 43, 44, 45, 46, 47, 48, 49, 50, -92, + -98, -99, 53, 53, -52, 56, -51, -50, -53, 2, + -13, -27, 68, 6, 17, 5, 6, 17, 5, 56, + -63, 37, -46, -40, 60, -32, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 50, -47, - 69, 2, -22, -17, -19, 62, 69, 61, 69, -35, - 5, 5, 53, -14, 69, 61, 52, 56, -65, 53, - -26, -26, 60, -35, 53, -14, -41, 53, 5, 53, - -14, -96, -41, 67, 60, -35, 69, 61, 69, -19, - 69, 55, -14, 53, -14, 53, -9, -16, 52, 52, - -26, 53, 62, 53, -14, 53, 53, 55, 67, -26, - -22, -64, 55, 53, 5, 5, 53, -95, -94, -93, - -8, 53, 2, 56, -64, 53, -14, 55, -14, 56, - -93, 56, 53, -64, 55, 56, -64, 56, + 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, -27, + -76, -74, 5, -27, -27, -76, -69, -70, -88, -27, + 60, -36, 63, 56, -80, 52, -77, -75, -26, 5, + 65, 56, -85, 53, -46, -27, 60, -36, 56, -91, + -90, -10, -93, 2, 14, 48, 53, 56, -51, 61, + 53, 61, 53, 54, 54, -25, -20, -24, -19, 63, + 68, -36, 2, -27, -27, 60, -36, 52, 53, -15, + 61, 68, 41, 55, 52, 53, 53, 61, 53, 61, + -27, -28, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, -26, 61, 53, 41, 5, -27, + 52, -27, -90, -14, -27, -16, -18, -20, -22, 68, + -16, -52, 62, -49, 69, 2, -20, 69, 58, 69, + 52, 52, -27, 5, 53, -74, -11, -9, -14, 5, + 42, -68, -67, -66, -8, -55, -59, 2, -45, 37, + -39, 60, -31, 7, 8, 9, 10, 11, 12, 13, + 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 5, -88, -27, 61, 53, -15, -75, -26, + 42, 52, 5, 52, -97, 66, -48, 69, 2, -23, + -18, -20, 62, 69, 61, 69, -36, 5, 5, 53, + -15, 69, 61, 52, 56, -66, 53, -27, -27, 60, + -36, 53, -15, -42, 53, 5, 53, -15, -17, 50, + 49, -47, -41, 60, -33, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 50, 69, 61, + 69, -20, 69, 55, -15, 53, -15, 53, -9, -17, + 52, 52, -27, 53, 62, 53, -15, 53, -98, -97, + -42, 67, 60, -36, -23, -65, 55, 53, 5, 5, + 53, -98, 55, 67, -27, 56, -65, 53, -15, 55, + -15, -96, -95, -94, -8, 53, 2, 56, 53, -65, + 55, 56, -94, 56, -65, -98, 56, } var protoDef = [...]int16{ -2, -2, -2, -2, -2, 0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0, 0, 0, 0, 0, 0, 0, -2, -2, 7, 0, 0, 0, - 0, 0, 55, 0, 24, 475, 476, 477, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 516, 517, 518, 0, - 37, 39, 0, 0, 0, 0, 95, 0, 0, 0, - 0, 20, 56, 0, 0, 23, 0, 0, 0, 0, - -2, -2, -2, 96, -2, 18, 19, 21, 22, 25, - 0, 42, 43, 44, 45, 46, 0, 47, 0, 0, - 52, 38, 40, 41, 0, -2, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 0, - 0, 0, 0, 0, 0, 160, 107, 108, 109, 97, - 0, 261, 26, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 262, - 263, 264, 265, 266, 267, 0, -2, 173, 174, 175, - 176, 177, 178, 0, 0, 162, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 0, -2, - 206, 207, 208, 210, 0, 0, 99, 0, 28, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 0, - -2, 219, 220, 221, 222, 223, 0, 36, 0, 58, - 59, -2, 62, 67, 0, 71, 0, 48, 51, 54, - 49, 50, 53, 181, 184, 0, 0, 103, 0, 32, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 0, 0, 147, 149, 0, 0, 0, - 0, 0, 165, 167, 0, 98, 0, 169, 172, 0, - 0, 152, 154, 157, 0, 202, 205, 209, 0, 0, - 0, 100, 215, 218, 0, 57, 61, 63, 64, 65, - 66, 0, 0, 69, 78, 79, 80, 0, 0, 0, - 0, 0, 0, 0, 104, 0, 145, 0, 0, 0, - 0, -2, 0, 159, 163, 0, 164, 0, 27, 0, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 0, 0, 161, 0, 158, 0, 0, 29, - 0, 0, 70, 75, 76, 77, 0, 68, 0, 82, - 0, 91, 0, 93, 72, 0, 74, 0, 0, 33, - 0, 146, 148, 0, 111, 0, 150, 151, 0, -2, - 120, 121, 122, 123, 125, 0, 0, 101, 0, 30, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 388, 0, - 166, 168, 0, 179, 0, 153, 155, 156, 0, 0, - 0, 0, 0, 105, 0, 34, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 0, - 84, 0, 86, 88, 89, 81, 90, 0, 92, 0, - 0, 0, 200, 0, 110, 0, 0, 116, 119, 124, - 0, 0, 0, 102, 130, 0, 0, 180, 0, 213, - 0, 0, 0, 227, 0, 106, 83, 0, 85, 94, - 73, -2, 0, 198, 0, 201, 112, 113, 0, 0, - 31, 131, 132, 211, 0, 214, 224, -2, 226, 35, - 87, 0, -2, 199, 0, 0, 212, 0, -2, 231, - 232, 233, 234, 114, 0, 126, 0, -2, 0, 225, - 230, 115, 127, 0, -2, 128, 0, 129, + 0, 0, 60, 0, 28, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 0, + 42, 44, 0, 0, 0, 0, 100, 0, 0, 0, + 0, 24, 61, 0, 0, 27, 0, 0, 0, 0, + -2, -2, -2, 101, 21, 22, 23, 25, 26, 29, + 0, 47, 48, 49, 50, 51, 0, 52, 0, 0, + 57, 43, 45, 46, 0, -2, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 0, + 0, 0, 0, 0, 0, 165, 112, 113, 114, 102, + 0, 265, 30, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, + 267, 268, 269, 270, 271, 0, -2, 178, 179, 180, + 181, 182, 183, 0, 0, 167, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 0, -2, + 211, 212, 213, 215, 0, 0, 104, 0, 32, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 0, + -2, 20, 18, 40, 0, 63, 64, -2, 67, 72, + 0, 76, 0, 53, 56, 59, 54, 55, 58, 186, + 189, 0, 0, 108, 0, 36, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 0, + 0, 152, 154, 0, 0, 0, 0, 0, 170, 172, + 0, 103, 0, 174, 177, 0, 0, 157, 159, 162, + 0, 207, 210, 214, 0, 0, 0, 105, 220, -2, + 224, 225, 226, 227, 0, 0, 19, 62, 66, 68, + 69, 70, 71, 0, 0, 74, 83, 84, 85, 0, + 0, 0, 0, 0, 0, 0, 109, 0, 150, 0, + 0, 0, 0, -2, 0, 164, 168, 0, 169, 0, + 31, 0, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 0, 0, 166, 0, 163, 0, + 0, 33, 223, 0, 0, 75, 80, 81, 82, 0, + 73, 0, 87, 0, 96, 0, 98, 77, 0, 79, + 0, 0, 37, 0, 151, 153, 0, 116, 0, 155, + 156, 0, -2, 125, 126, 127, 128, 130, 0, 0, + 106, 0, 34, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 0, 171, 173, 0, 184, 0, 158, 160, + 161, 0, 0, 0, 0, 0, 0, 89, 0, 91, + 93, 94, 86, 95, 0, 97, 0, 0, 0, 205, + 0, 115, 0, 0, 121, 124, 129, 0, 0, 0, + 107, 135, 0, 0, 185, 0, 218, 0, 21, 0, + 0, 0, 110, 0, 38, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 88, 0, + 90, 99, 78, -2, 0, 203, 0, 206, 117, 118, + 0, 0, 35, 136, 137, 216, 0, 219, 41, 21, + 0, 231, 0, 111, 92, 0, -2, 204, 0, 0, + 217, 228, -2, 230, 39, 119, 0, 131, 0, -2, + 0, 0, -2, 235, 236, 237, 238, 120, 132, 0, + -2, 21, 234, 133, 0, 229, 134, } var protoTok1 = [...]int8{ @@ -1278,191 +1287,218 @@ protodefault: protoVAL.fileElement = nil } case 18: + protoDollar = protoS[protopt-1 : protopt+1] + { + protoVAL.bs = []*ast.RuneNode{protoDollar[1].b} + } + case 19: + protoDollar = protoS[protopt-2 : protopt+1] + { + protoVAL.bs = append(protoDollar[1].bs, protoDollar[2].b) + } + case 20: + protoDollar = protoS[protopt-1 : protopt+1] + { + protoVAL.bs = protoDollar[1].bs + } + case 21: + protoDollar = protoS[protopt-0 : protopt+1] + { + protoVAL.bs = nil + } + case 22: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.syn = ast.NewSyntaxNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, toStringValueNode(protoDollar[3].str), protoDollar[4].b) } - case 19: + case 23: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.ed = ast.NewEditionNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, toStringValueNode(protoDollar[3].str), protoDollar[4].b) } - case 20: + case 24: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, nil, toStringValueNode(protoDollar[2].str), protoDollar[3].b) } - case 21: + case 25: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), nil, protoDollar[2].id.ToKeyword(), toStringValueNode(protoDollar[3].str), protoDollar[4].b) } - case 22: + case 26: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.imprt = ast.NewImportNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), nil, toStringValueNode(protoDollar[3].str), protoDollar[4].b) } - case 23: + case 27: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.pkg = ast.NewPackageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b) } - case 24: + case 28: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.cid = &identSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 25: + case 29: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].cid.idents = append(protoDollar[1].cid.idents, protoDollar[3].id) protoDollar[1].cid.dots = append(protoDollar[1].cid.dots, protoDollar[2].b) protoVAL.cid = protoDollar[1].cid } - case 26: + case 30: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.cid = &identSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 27: + case 31: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].cid.idents = append(protoDollar[1].cid.idents, protoDollar[3].id) protoDollar[1].cid.dots = append(protoDollar[1].cid.dots, protoDollar[2].b) protoVAL.cid = protoDollar[1].cid } - case 28: + case 32: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.cid = &identSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 29: + case 33: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].cid.idents = append(protoDollar[1].cid.idents, protoDollar[3].id) protoDollar[1].cid.dots = append(protoDollar[1].cid.dots, protoDollar[2].b) protoVAL.cid = protoDollar[1].cid } - case 30: + case 34: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.cid = &identSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 31: + case 35: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].cid.idents = append(protoDollar[1].cid.idents, protoDollar[3].id) protoDollar[1].cid.dots = append(protoDollar[1].cid.dots, protoDollar[2].b) protoVAL.cid = protoDollar[1].cid } - case 32: + case 36: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.cid = &identSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 33: + case 37: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].cid.idents = append(protoDollar[1].cid.idents, protoDollar[3].id) protoDollar[1].cid.dots = append(protoDollar[1].cid.dots, protoDollar[2].b) protoVAL.cid = protoDollar[1].cid } - case 34: + case 38: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.cid = &identSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 35: + case 39: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].cid.idents = append(protoDollar[1].cid.idents, protoDollar[3].id) protoDollar[1].cid.dots = append(protoDollar[1].cid.dots, protoDollar[2].b) protoVAL.cid = protoDollar[1].cid } - case 36: + case 40: protoDollar = protoS[protopt-5 : protopt+1] { optName := ast.NewOptionNameNode(protoDollar[2].optNms.refs, protoDollar[2].optNms.dots) protoVAL.opt = ast.NewOptionNode(protoDollar[1].id.ToKeyword(), optName, protoDollar[3].b, protoDollar[4].v, protoDollar[5].b) } - case 37: + case 41: + protoDollar = protoS[protopt-5 : protopt+1] + { + optName := ast.NewOptionNameNode(protoDollar[2].optNms.refs, protoDollar[2].optNms.dots) + semi, extra := protolex.(*protoLex).requireSemicolon(protoDollar[5].bs) + protoVAL.optN = newNodeWithEmptyDecls(ast.NewOptionNode(protoDollar[1].id.ToKeyword(), optName, protoDollar[3].b, protoDollar[4].v, semi), extra) + } + case 42: protoDollar = protoS[protopt-1 : protopt+1] { fieldReferenceNode := ast.NewFieldReferenceNode(protoDollar[1].id) protoVAL.optNms = &fieldRefSlices{refs: []*ast.FieldReferenceNode{fieldReferenceNode}} } - case 38: + case 43: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].optNms.refs = append(protoDollar[1].optNms.refs, ast.NewFieldReferenceNode(protoDollar[3].id)) protoDollar[1].optNms.dots = append(protoDollar[1].optNms.dots, protoDollar[2].b) protoVAL.optNms = protoDollar[1].optNms } - case 39: + case 44: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.optNms = &fieldRefSlices{refs: []*ast.FieldReferenceNode{protoDollar[1].ref}} } - case 40: + case 45: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].optNms.refs = append(protoDollar[1].optNms.refs, protoDollar[3].ref) protoDollar[1].optNms.dots = append(protoDollar[1].optNms.dots, protoDollar[2].b) protoVAL.optNms = protoDollar[1].optNms } - case 41: + case 46: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].tid, protoDollar[3].b) } - case 44: + case 49: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.v = toStringValueNode(protoDollar[1].str) } - case 46: + case 51: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.v = protoDollar[1].id } - case 47: + case 52: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.v = protoDollar[1].f } - case 48: + case 53: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f) } - case 49: + case 54: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, protoDollar[2].f) } - case 50: + case 55: protoDollar = protoS[protopt-2 : protopt+1] { f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword()) protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f) } - case 51: + case 56: protoDollar = protoS[protopt-2 : protopt+1] { f := ast.NewSpecialFloatLiteralNode(protoDollar[2].id.ToKeyword()) protoVAL.v = ast.NewSignedFloatLiteralNode(protoDollar[1].b, f) } - case 52: + case 57: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.v = protoDollar[1].i } - case 53: + case 58: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.v = ast.NewPositiveUintLiteralNode(protoDollar[1].b, protoDollar[2].i) } - case 54: + case 59: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].i.Val > math.MaxInt64+1 { @@ -1472,17 +1508,17 @@ protodefault: protoVAL.v = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i) } } - case 55: + case 60: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.str = []*ast.StringLiteralNode{protoDollar[1].s} } - case 56: + case 61: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.str = append(protoDollar[1].str, protoDollar[2].s) } - case 57: + case 62: protoDollar = protoS[protopt-3 : protopt+1] { if protoDollar[2].msgLitFlds == nil { @@ -1492,12 +1528,12 @@ protodefault: protoVAL.v = ast.NewMessageLiteralNode(protoDollar[1].b, fields, delimiters, protoDollar[3].b) } } - case 58: + case 63: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.v = ast.NewMessageLiteralNode(protoDollar[1].b, nil, nil, protoDollar[2].b) } - case 61: + case 66: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[1].msgLitFlds != nil { @@ -1507,7 +1543,7 @@ protodefault: protoVAL.msgLitFlds = protoDollar[2].msgLitFlds } } - case 62: + case 67: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].msgLitFld != nil { @@ -1516,7 +1552,7 @@ protodefault: protoVAL.msgLitFlds = nil } } - case 63: + case 68: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[1].msgLitFld != nil { @@ -1525,7 +1561,7 @@ protodefault: protoVAL.msgLitFlds = nil } } - case 64: + case 69: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[1].msgLitFld != nil { @@ -1534,22 +1570,22 @@ protodefault: protoVAL.msgLitFlds = nil } } - case 65: + case 70: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.msgLitFlds = nil } - case 66: + case 71: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.msgLitFlds = nil } - case 67: + case 72: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgLitFlds = nil } - case 68: + case 73: protoDollar = protoS[protopt-3 : protopt+1] { if protoDollar[1].ref != nil && protoDollar[2].b != nil { @@ -1558,7 +1594,7 @@ protodefault: protoVAL.msgLitFld = nil } } - case 69: + case 74: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[1].ref != nil && protoDollar[2].v != nil { @@ -1567,32 +1603,32 @@ protodefault: protoVAL.msgLitFld = nil } } - case 70: + case 75: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.msgLitFld = nil } - case 71: + case 76: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.ref = ast.NewFieldReferenceNode(protoDollar[1].id) } - case 72: + case 77: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.ref = ast.NewExtensionFieldReferenceNode(protoDollar[1].b, protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b) } - case 73: + case 78: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.ref = ast.NewAnyTypeReferenceNode(protoDollar[1].b, protoDollar[2].cid.toIdentValueNode(nil), protoDollar[3].b, protoDollar[4].cid.toIdentValueNode(nil), protoDollar[5].b) } - case 74: + case 79: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.ref = nil } - case 81: + case 86: protoDollar = protoS[protopt-3 : protopt+1] { if protoDollar[2].msgLitFlds == nil { @@ -1602,12 +1638,12 @@ protodefault: protoVAL.v = ast.NewMessageLiteralNode(protoDollar[1].b, fields, delimiters, protoDollar[3].b) } } - case 82: + case 87: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.v = ast.NewMessageLiteralNode(protoDollar[1].b, nil, nil, protoDollar[2].b) } - case 83: + case 88: protoDollar = protoS[protopt-3 : protopt+1] { if protoDollar[2].sl == nil { @@ -1616,29 +1652,29 @@ protodefault: protoVAL.v = ast.NewArrayLiteralNode(protoDollar[1].b, protoDollar[2].sl.vals, protoDollar[2].sl.commas, protoDollar[3].b) } } - case 84: + case 89: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.v = ast.NewArrayLiteralNode(protoDollar[1].b, nil, nil, protoDollar[2].b) } - case 85: + case 90: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.v = ast.NewArrayLiteralNode(protoDollar[1].b, nil, nil, protoDollar[3].b) } - case 86: + case 91: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.sl = &valueSlices{vals: []ast.ValueNode{protoDollar[1].v}} } - case 87: + case 92: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].sl.vals = append(protoDollar[1].sl.vals, protoDollar[3].v) protoDollar[1].sl.commas = append(protoDollar[1].sl.commas, protoDollar[2].b) protoVAL.sl = protoDollar[1].sl } - case 90: + case 95: protoDollar = protoS[protopt-3 : protopt+1] { if protoDollar[2].sl == nil { @@ -1647,132 +1683,132 @@ protodefault: protoVAL.v = ast.NewArrayLiteralNode(protoDollar[1].b, protoDollar[2].sl.vals, protoDollar[2].sl.commas, protoDollar[3].b) } } - case 91: + case 96: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.v = ast.NewArrayLiteralNode(protoDollar[1].b, nil, nil, protoDollar[2].b) } - case 92: + case 97: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.v = ast.NewArrayLiteralNode(protoDollar[1].b, nil, nil, protoDollar[3].b) } - case 93: + case 98: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.sl = &valueSlices{vals: []ast.ValueNode{protoDollar[1].v}} } - case 94: + case 99: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].sl.vals = append(protoDollar[1].sl.vals, protoDollar[3].v) protoDollar[1].sl.commas = append(protoDollar[1].sl.commas, protoDollar[2].b) protoVAL.sl = protoDollar[1].sl } - case 95: + case 100: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil) } - case 96: + case 101: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b) } - case 97: + case 102: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil) } - case 98: + case 103: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b) } - case 99: + case 104: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil) } - case 100: + case 105: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b) } - case 101: + case 106: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil) } - case 102: + case 107: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b) } - case 103: + case 108: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil) } - case 104: + case 109: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b) } - case 105: + case 110: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.tid = protoDollar[1].cid.toIdentValueNode(nil) } - case 106: + case 111: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.tid = protoDollar[2].cid.toIdentValueNode(protoDollar[1].b) } - case 110: + case 115: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.cmpctOpts = ast.NewCompactOptionsNode(protoDollar[1].b, protoDollar[2].opts.options, protoDollar[2].opts.commas, protoDollar[3].b) } - case 111: + case 116: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.opts = &compactOptionSlices{options: []*ast.OptionNode{protoDollar[1].opt}} } - case 112: + case 117: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].opts.options = append(protoDollar[1].opts.options, protoDollar[3].opt) protoDollar[1].opts.commas = append(protoDollar[1].opts.commas, protoDollar[2].b) protoVAL.opts = protoDollar[1].opts } - case 113: + case 118: protoDollar = protoS[protopt-3 : protopt+1] { optName := ast.NewOptionNameNode(protoDollar[1].optNms.refs, protoDollar[1].optNms.dots) protoVAL.opt = ast.NewCompactOptionNode(optName, protoDollar[2].b, protoDollar[3].v) } - case 114: + case 119: protoDollar = protoS[protopt-8 : protopt+1] { protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b, protoDollar[7].msgElements, protoDollar[8].b) } - case 115: + case 120: protoDollar = protoS[protopt-9 : protopt+1] { protoVAL.grp = ast.NewGroupNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id.ToKeyword(), protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b, protoDollar[8].msgElements, protoDollar[9].b) } - case 116: + case 121: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.oo = ast.NewOneofNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].ooElements, protoDollar[5].b) } - case 117: + case 122: protoDollar = protoS[protopt-0 : protopt+1] { protoVAL.ooElements = nil } - case 119: + case 124: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].ooElement != nil { @@ -1781,7 +1817,7 @@ protodefault: protoVAL.ooElements = protoDollar[1].ooElements } } - case 120: + case 125: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].ooElement != nil { @@ -1790,195 +1826,195 @@ protodefault: protoVAL.ooElements = nil } } - case 121: + case 126: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.ooElement = protoDollar[1].opt } - case 122: + case 127: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.ooElement = protoDollar[1].fld } - case 123: + case 128: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.ooElement = protoDollar[1].grp } - case 124: + case 129: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.ooElement = nil } - case 125: + case 130: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.ooElement = nil } - case 126: + case 131: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b) } - case 127: + case 132: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b) } - case 128: + case 133: protoDollar = protoS[protopt-7 : protopt+1] { protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b, protoDollar[6].msgElements, protoDollar[7].b) } - case 129: + case 134: protoDollar = protoS[protopt-8 : protopt+1] { protoVAL.grp = ast.NewGroupNode(nil, protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b, protoDollar[7].msgElements, protoDollar[8].b) } - case 130: + case 135: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b) } - case 131: + case 136: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.mapFld = ast.NewMapFieldNode(protoDollar[1].mapType, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b) } - case 132: + case 137: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.mapType = ast.NewMapTypeNode(protoDollar[1].id.ToKeyword(), protoDollar[2].b, protoDollar[3].id, protoDollar[4].b, protoDollar[5].tid, protoDollar[6].b) } - case 145: + case 150: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), protoDollar[2].rngs.ranges, protoDollar[2].rngs.commas, nil, protoDollar[3].b) } - case 146: + case 151: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.ext = ast.NewExtensionRangeNode(protoDollar[1].id.ToKeyword(), protoDollar[2].rngs.ranges, protoDollar[2].rngs.commas, protoDollar[3].cmpctOpts, protoDollar[4].b) } - case 147: + case 152: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.rngs = &rangeSlices{ranges: []*ast.RangeNode{protoDollar[1].rng}} } - case 148: + case 153: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].rngs.ranges = append(protoDollar[1].rngs.ranges, protoDollar[3].rng) protoDollar[1].rngs.commas = append(protoDollar[1].rngs.commas, protoDollar[2].b) protoVAL.rngs = protoDollar[1].rngs } - case 149: + case 154: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, nil, nil, nil) } - case 150: + case 155: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), protoDollar[3].i, nil) } - case 151: + case 156: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.rng = ast.NewRangeNode(protoDollar[1].i, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword()) } - case 152: + case 157: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.rngs = &rangeSlices{ranges: []*ast.RangeNode{protoDollar[1].rng}} } - case 153: + case 158: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].rngs.ranges = append(protoDollar[1].rngs.ranges, protoDollar[3].rng) protoDollar[1].rngs.commas = append(protoDollar[1].rngs.commas, protoDollar[2].b) protoVAL.rngs = protoDollar[1].rngs } - case 154: + case 159: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, nil, nil, nil) } - case 155: + case 160: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), protoDollar[3].il, nil) } - case 156: + case 161: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.rng = ast.NewRangeNode(protoDollar[1].il, protoDollar[2].id.ToKeyword(), nil, protoDollar[3].id.ToKeyword()) } - case 157: + case 162: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.il = protoDollar[1].i } - case 158: + case 163: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.il = ast.NewNegativeIntLiteralNode(protoDollar[1].b, protoDollar[2].i) } - case 159: + case 164: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), protoDollar[2].rngs.ranges, protoDollar[2].rngs.commas, protoDollar[3].b) } - case 161: + case 166: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.resvd = ast.NewReservedRangesNode(protoDollar[1].id.ToKeyword(), protoDollar[2].rngs.ranges, protoDollar[2].rngs.commas, protoDollar[3].b) } - case 163: + case 168: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.resvd = ast.NewReservedNamesNode(protoDollar[1].id.ToKeyword(), protoDollar[2].names.names, protoDollar[2].names.commas, protoDollar[3].b) } - case 164: + case 169: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.resvd = ast.NewReservedIdentifiersNode(protoDollar[1].id.ToKeyword(), protoDollar[2].names.idents, protoDollar[2].names.commas, protoDollar[3].b) } - case 165: + case 170: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.names = &nameSlices{names: []ast.StringValueNode{toStringValueNode(protoDollar[1].str)}} } - case 166: + case 171: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].names.names = append(protoDollar[1].names.names, toStringValueNode(protoDollar[3].str)) protoDollar[1].names.commas = append(protoDollar[1].names.commas, protoDollar[2].b) protoVAL.names = protoDollar[1].names } - case 167: + case 172: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.names = &nameSlices{idents: []*ast.IdentNode{protoDollar[1].id}} } - case 168: + case 173: protoDollar = protoS[protopt-3 : protopt+1] { protoDollar[1].names.idents = append(protoDollar[1].names.idents, protoDollar[3].id) protoDollar[1].names.commas = append(protoDollar[1].names.commas, protoDollar[2].b) protoVAL.names = protoDollar[1].names } - case 169: + case 174: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.en = ast.NewEnumNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].enElements, protoDollar[5].b) } - case 170: + case 175: protoDollar = protoS[protopt-0 : protopt+1] { protoVAL.enElements = nil } - case 172: + case 177: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].enElement != nil { @@ -1987,7 +2023,7 @@ protodefault: protoVAL.enElements = protoDollar[1].enElements } } - case 173: + case 178: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].enElement != nil { @@ -1996,52 +2032,52 @@ protodefault: protoVAL.enElements = nil } } - case 174: + case 179: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.enElement = protoDollar[1].opt } - case 175: + case 180: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.enElement = protoDollar[1].env } - case 176: + case 181: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.enElement = protoDollar[1].resvd } - case 177: + case 182: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.enElement = ast.NewEmptyDeclNode(protoDollar[1].b) } - case 178: + case 183: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.enElement = nil } - case 179: + case 184: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, nil, protoDollar[4].b) } - case 180: + case 185: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.env = ast.NewEnumValueNode(protoDollar[1].id, protoDollar[2].b, protoDollar[3].il, protoDollar[4].cmpctOpts, protoDollar[5].b) } - case 181: + case 186: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.msg = ast.NewMessageNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].msgElements, protoDollar[5].b) } - case 182: + case 187: protoDollar = protoS[protopt-0 : protopt+1] { protoVAL.msgElements = nil } - case 184: + case 189: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].msgElement != nil { @@ -2050,7 +2086,7 @@ protodefault: protoVAL.msgElements = protoDollar[1].msgElements } } - case 185: + case 190: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].msgElement != nil { @@ -2059,97 +2095,97 @@ protodefault: protoVAL.msgElements = nil } } - case 186: + case 191: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].fld } - case 187: + case 192: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].en } - case 188: + case 193: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].msg } - case 189: + case 194: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].extend } - case 190: + case 195: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].ext } - case 191: + case 196: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].grp } - case 192: + case 197: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].opt } - case 193: + case 198: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].oo } - case 194: + case 199: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].mapFld } - case 195: + case 200: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = protoDollar[1].resvd } - case 196: + case 201: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = ast.NewEmptyDeclNode(protoDollar[1].b) } - case 197: + case 202: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.msgElement = nil } - case 198: + case 203: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b) } - case 199: + case 204: protoDollar = protoS[protopt-7 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b) } - case 200: + case 205: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b) } - case 201: + case 206: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b) } - case 202: + case 207: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.extend = ast.NewExtendNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].b, protoDollar[4].extElements, protoDollar[5].b) } - case 203: + case 208: protoDollar = protoS[protopt-0 : protopt+1] { protoVAL.extElements = nil } - case 205: + case 210: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].extElement != nil { @@ -2158,7 +2194,7 @@ protodefault: protoVAL.extElements = protoDollar[1].extElements } } - case 206: + case 211: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].extElement != nil { @@ -2167,120 +2203,113 @@ protodefault: protoVAL.extElements = nil } } - case 207: + case 212: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.extElement = protoDollar[1].fld } - case 208: + case 213: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.extElement = protoDollar[1].grp } - case 209: + case 214: protoDollar = protoS[protopt-2 : protopt+1] { protoVAL.extElement = nil } - case 210: + case 215: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.extElement = nil } - case 211: + case 216: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, nil, protoDollar[6].b) } - case 212: + case 217: protoDollar = protoS[protopt-7 : protopt+1] { protoVAL.fld = ast.NewFieldNode(protoDollar[1].id.ToKeyword(), protoDollar[2].tid, protoDollar[3].id, protoDollar[4].b, protoDollar[5].i, protoDollar[6].cmpctOpts, protoDollar[7].b) } - case 213: + case 218: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, nil, protoDollar[5].b) } - case 214: + case 219: protoDollar = protoS[protopt-6 : protopt+1] { protoVAL.fld = ast.NewFieldNode(nil, protoDollar[1].tid, protoDollar[2].id, protoDollar[3].b, protoDollar[4].i, protoDollar[5].cmpctOpts, protoDollar[6].b) } - case 215: + case 220: protoDollar = protoS[protopt-5 : protopt+1] { protoVAL.svc = ast.NewServiceNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].b, protoDollar[4].svcElements, protoDollar[5].b) } - case 216: - protoDollar = protoS[protopt-0 : protopt+1] + case 221: + protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.svcElements = nil + protoVAL.svcElements = newServiceElements(protoDollar[1].bs, nil) } - case 218: + case 222: protoDollar = protoS[protopt-2 : protopt+1] { - if protoDollar[2].svcElement != nil { - protoVAL.svcElements = append(protoDollar[1].svcElements, protoDollar[2].svcElement) - } else { - protoVAL.svcElements = protoDollar[1].svcElements - } + protoVAL.svcElements = newServiceElements(protoDollar[1].bs, protoDollar[2].svcElements) } - case 219: - protoDollar = protoS[protopt-1 : protopt+1] + case 223: + protoDollar = protoS[protopt-2 : protopt+1] { - if protoDollar[1].svcElement != nil { - protoVAL.svcElements = []ast.ServiceElement{protoDollar[1].svcElement} - } else { - protoVAL.svcElements = nil - } + protoVAL.svcElements = append(protoDollar[1].svcElements, protoDollar[2].svcElements...) } - case 220: + case 224: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.svcElement = protoDollar[1].opt + protoVAL.svcElements = protoDollar[1].svcElements } - case 221: + case 225: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.svcElement = protoDollar[1].mtd + protoVAL.svcElements = toServiceElements(protoDollar[1].optN) } - case 222: + case 226: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.svcElement = ast.NewEmptyDeclNode(protoDollar[1].b) + protoVAL.svcElements = toServiceElements(protoDollar[1].mtd) } - case 223: + case 227: protoDollar = protoS[protopt-1 : protopt+1] { - protoVAL.svcElement = nil + protoVAL.svcElements = nil } - case 224: + case 228: protoDollar = protoS[protopt-6 : protopt+1] { - protoVAL.mtd = ast.NewRPCNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].mtdMsgType, protoDollar[4].id.ToKeyword(), protoDollar[5].mtdMsgType, protoDollar[6].b) + semi, extra := protolex.(*protoLex).requireSemicolon(protoDollar[6].bs) + protoVAL.mtd = newNodeWithEmptyDecls(ast.NewRPCNode(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].mtdMsgType, protoDollar[4].id.ToKeyword(), protoDollar[5].mtdMsgType, semi), extra) } - case 225: - protoDollar = protoS[protopt-8 : protopt+1] + case 229: + protoDollar = protoS[protopt-9 : protopt+1] { - protoVAL.mtd = ast.NewRPCNodeWithBody(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].mtdMsgType, protoDollar[4].id.ToKeyword(), protoDollar[5].mtdMsgType, protoDollar[6].b, protoDollar[7].mtdElements, protoDollar[8].b) + protoVAL.mtd = newNodeWithEmptyDecls(ast.NewRPCNodeWithBody(protoDollar[1].id.ToKeyword(), protoDollar[2].id, protoDollar[3].mtdMsgType, protoDollar[4].id.ToKeyword(), protoDollar[5].mtdMsgType, protoDollar[6].b, protoDollar[7].mtdElements, protoDollar[8].b), protoDollar[9].bs) } - case 226: + case 230: protoDollar = protoS[protopt-4 : protopt+1] { protoVAL.mtdMsgType = ast.NewRPCTypeNode(protoDollar[1].b, protoDollar[2].id.ToKeyword(), protoDollar[3].tid, protoDollar[4].b) } - case 227: + case 231: protoDollar = protoS[protopt-3 : protopt+1] { protoVAL.mtdMsgType = ast.NewRPCTypeNode(protoDollar[1].b, nil, protoDollar[2].tid, protoDollar[3].b) } - case 228: + case 232: protoDollar = protoS[protopt-0 : protopt+1] { protoVAL.mtdElements = nil } - case 230: + case 234: protoDollar = protoS[protopt-2 : protopt+1] { if protoDollar[2].mtdElement != nil { @@ -2289,7 +2318,7 @@ protodefault: protoVAL.mtdElements = protoDollar[1].mtdElements } } - case 231: + case 235: protoDollar = protoS[protopt-1 : protopt+1] { if protoDollar[1].mtdElement != nil { @@ -2298,17 +2327,17 @@ protodefault: protoVAL.mtdElements = nil } } - case 232: + case 236: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.mtdElement = protoDollar[1].opt } - case 233: + case 237: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.mtdElement = ast.NewEmptyDeclNode(protoDollar[1].b) } - case 234: + case 238: protoDollar = protoS[protopt-1 : protopt+1] { protoVAL.mtdElement = nil diff --git a/reporting_test.go b/reporting_test.go index 86e8f2c0..8f6ce7ed 100644 --- a/reporting_test.go +++ b/reporting_test.go @@ -167,7 +167,7 @@ func TestErrorReporting(t *testing.T) { "*", // errors can be in different order than below (due to concurrency) "test1.proto:5:62: syntax error: unexpected '-', expecting int literal", "test1.proto:8:62: syntax error: unexpected ';', expecting \"returns\"", - "test2.proto:7:49: syntax error: unexpected identifier, expecting \"option\" or \"rpc\" or ';' or '}'", + "test2.proto:7:49: syntax error: unexpected identifier, expecting \"option\" or \"rpc\" or '}'", }, }, },