1// Code generated "gen_operations.go"; DO NOT EDIT.
2
3package gogrep
4
5import (
6	"github.com/quasilyte/go-ruleguard/nodetag"
7)
8
9//go:generate stringer -type=operation -trimprefix=op
10type operation uint8
11
12const (
13	opInvalid operation = 0
14
15	// Tag: Node
16	opNode operation = 1
17
18	// Tag: Node
19	// ValueIndex: strings | wildcard name
20	opNamedNode operation = 2
21
22	// Tag: Unknown
23	opNodeSeq operation = 3
24
25	// Tag: Unknown
26	// ValueIndex: strings | wildcard name
27	opNamedNodeSeq operation = 4
28
29	// Tag: Unknown
30	opOptNode operation = 5
31
32	// Tag: Unknown
33	// ValueIndex: strings | wildcard name
34	opNamedOptNode operation = 6
35
36	// Tag: StmtList
37	// Args: stmts...
38	// Example: f(); g()
39	opMultiStmt operation = 7
40
41	// Tag: ExprList
42	// Args: exprs...
43	// Example: f(), g()
44	opMultiExpr operation = 8
45
46	// Tag: Unknown
47	opEnd operation = 9
48
49	// Tag: BasicLit
50	// ValueIndex: ifaces | parsed literal value
51	opBasicLit operation = 10
52
53	// Tag: BasicLit
54	// ValueIndex: strings | raw literal value
55	opStrictIntLit operation = 11
56
57	// Tag: BasicLit
58	// ValueIndex: strings | raw literal value
59	opStrictFloatLit operation = 12
60
61	// Tag: BasicLit
62	// ValueIndex: strings | raw literal value
63	opStrictCharLit operation = 13
64
65	// Tag: BasicLit
66	// ValueIndex: strings | raw literal value
67	opStrictStringLit operation = 14
68
69	// Tag: BasicLit
70	// ValueIndex: strings | raw literal value
71	opStrictComplexLit operation = 15
72
73	// Tag: Ident
74	// ValueIndex: strings | ident name
75	opIdent operation = 16
76
77	// Tag: IndexExpr
78	// Args: x expr
79	opIndexExpr operation = 17
80
81	// Tag: SliceExpr
82	// Args: x
83	opSliceExpr operation = 18
84
85	// Tag: SliceExpr
86	// Args: x from
87	// Example: x[from:]
88	opSliceFromExpr operation = 19
89
90	// Tag: SliceExpr
91	// Args: x to
92	// Example: x[:to]
93	opSliceToExpr operation = 20
94
95	// Tag: SliceExpr
96	// Args: x from to
97	// Example: x[from:to]
98	opSliceFromToExpr operation = 21
99
100	// Tag: SliceExpr
101	// Args: x from cap
102	// Example: x[:from:cap]
103	opSliceToCapExpr operation = 22
104
105	// Tag: SliceExpr
106	// Args: x from to cap
107	// Example: x[from:to:cap]
108	opSliceFromToCapExpr operation = 23
109
110	// Tag: FuncLit
111	// Args: type block
112	opFuncLit operation = 24
113
114	// Tag: CompositeLit
115	// Args: elts...
116	// Example: {elts...}
117	opCompositeLit operation = 25
118
119	// Tag: CompositeLit
120	// Args: typ elts...
121	// Example: typ{elts...}
122	opTypedCompositeLit operation = 26
123
124	// Tag: SelectorExpr
125	// Args: x
126	// ValueIndex: strings | selector name
127	opSimpleSelectorExpr operation = 27
128
129	// Tag: SelectorExpr
130	// Args: x sel
131	opSelectorExpr operation = 28
132
133	// Tag: TypeAssertExpr
134	// Args: x typ
135	opTypeAssertExpr operation = 29
136
137	// Tag: TypeAssertExpr
138	// Args: x
139	opTypeSwitchAssertExpr operation = 30
140
141	// Tag: FuncType
142	// Args: params
143	opVoidFuncType operation = 31
144
145	// Tag: FuncType
146	// Args: params results
147	opFuncType operation = 32
148
149	// Tag: ArrayType
150	// Args: length elem
151	opArrayType operation = 33
152
153	// Tag: ArrayType
154	// Args: elem
155	opSliceType operation = 34
156
157	// Tag: MapType
158	// Args: key value
159	opMapType operation = 35
160
161	// Tag: ChanType
162	// Args: value
163	// Value: ast.ChanDir | channel direction
164	opChanType operation = 36
165
166	// Tag: KeyValueExpr
167	// Args: key value
168	opKeyValueExpr operation = 37
169
170	// Tag: Ellipsis
171	opEllipsis operation = 38
172
173	// Tag: Ellipsis
174	// Args: type
175	opTypedEllipsis operation = 39
176
177	// Tag: StarExpr
178	// Args: x
179	opStarExpr operation = 40
180
181	// Tag: UnaryExpr
182	// Args: x
183	// Value: token.Token | unary operator
184	opUnaryExpr operation = 41
185
186	// Tag: BinaryExpr
187	// Args: x y
188	// Value: token.Token | binary operator
189	opBinaryExpr operation = 42
190
191	// Tag: ParenExpr
192	// Args: x
193	opParenExpr operation = 43
194
195	// Tag: CallExpr
196	// Args: fn args...
197	// Example: f(1, xs...)
198	opVariadicCallExpr operation = 44
199
200	// Tag: CallExpr
201	// Args: fn args...
202	// Example: f(1, xs)
203	opCallExpr operation = 45
204
205	// Tag: AssignStmt
206	// Args: lhs rhs
207	// Example: lhs := rhs()
208	// Value: token.Token | ':=' or '='
209	opAssignStmt operation = 46
210
211	// Tag: AssignStmt
212	// Args: lhs... rhs...
213	// Example: lhs1, lhs2 := rhs()
214	// Value: token.Token | ':=' or '='
215	opMultiAssignStmt operation = 47
216
217	// Tag: BranchStmt
218	// Args: x
219	// Value: token.Token | branch kind
220	opBranchStmt operation = 48
221
222	// Tag: BranchStmt
223	// Args: x
224	// Value: token.Token | branch kind
225	// ValueIndex: strings | label name
226	opSimpleLabeledBranchStmt operation = 49
227
228	// Tag: BranchStmt
229	// Args: label x
230	// Value: token.Token | branch kind
231	opLabeledBranchStmt operation = 50
232
233	// Tag: LabeledStmt
234	// Args: x
235	// ValueIndex: strings | label name
236	opSimpleLabeledStmt operation = 51
237
238	// Tag: LabeledStmt
239	// Args: label x
240	opLabeledStmt operation = 52
241
242	// Tag: BlockStmt
243	// Args: body...
244	opBlockStmt operation = 53
245
246	// Tag: ExprStmt
247	// Args: x
248	opExprStmt operation = 54
249
250	// Tag: GoStmt
251	// Args: x
252	opGoStmt operation = 55
253
254	// Tag: DeferStmt
255	// Args: x
256	opDeferStmt operation = 56
257
258	// Tag: SendStmt
259	// Args: ch value
260	opSendStmt operation = 57
261
262	// Tag: EmptyStmt
263	opEmptyStmt operation = 58
264
265	// Tag: IncDecStmt
266	// Args: x
267	// Value: token.Token | '++' or '--'
268	opIncDecStmt operation = 59
269
270	// Tag: ReturnStmt
271	// Args: results...
272	opReturnStmt operation = 60
273
274	// Tag: IfStmt
275	// Args: cond block
276	// Example: if cond {}
277	opIfStmt operation = 61
278
279	// Tag: IfStmt
280	// Args: init cond block
281	// Example: if init; cond {}
282	opIfInitStmt operation = 62
283
284	// Tag: IfStmt
285	// Args: cond block else
286	// Example: if cond {} else ...
287	opIfElseStmt operation = 63
288
289	// Tag: IfStmt
290	// Args: init cond block else
291	// Example: if init; cond {} else ...
292	opIfInitElseStmt operation = 64
293
294	// Tag: IfStmt
295	// Args: block
296	// Example: if $*x {}
297	// ValueIndex: strings | wildcard name
298	opIfNamedOptStmt operation = 65
299
300	// Tag: IfStmt
301	// Args: block else
302	// Example: if $*x {} else ...
303	// ValueIndex: strings | wildcard name
304	opIfNamedOptElseStmt operation = 66
305
306	// Tag: SwitchStmt
307	// Args: body...
308	// Example: switch {}
309	opSwitchStmt operation = 67
310
311	// Tag: SwitchStmt
312	// Args: tag body...
313	// Example: switch tag {}
314	opSwitchTagStmt operation = 68
315
316	// Tag: SwitchStmt
317	// Args: init body...
318	// Example: switch init; {}
319	opSwitchInitStmt operation = 69
320
321	// Tag: SwitchStmt
322	// Args: init tag body...
323	// Example: switch init; tag {}
324	opSwitchInitTagStmt operation = 70
325
326	// Tag: SelectStmt
327	// Args: body...
328	opSelectStmt operation = 71
329
330	// Tag: TypeSwitchStmt
331	// Args: x block
332	// Example: switch x.(type) {}
333	opTypeSwitchStmt operation = 72
334
335	// Tag: TypeSwitchStmt
336	// Args: init x block
337	// Example: switch init; x.(type) {}
338	opTypeSwitchInitStmt operation = 73
339
340	// Tag: CaseClause
341	// Args: values... body...
342	opCaseClause operation = 74
343
344	// Tag: CaseClause
345	// Args: body...
346	opDefaultCaseClause operation = 75
347
348	// Tag: CommClause
349	// Args: comm body...
350	opCommClause operation = 76
351
352	// Tag: CommClause
353	// Args: body...
354	opDefaultCommClause operation = 77
355
356	// Tag: ForStmt
357	// Args: blocl
358	// Example: for {}
359	opForStmt operation = 78
360
361	// Tag: ForStmt
362	// Args: post block
363	// Example: for ; ; post {}
364	opForPostStmt operation = 79
365
366	// Tag: ForStmt
367	// Args: cond block
368	// Example: for ; cond; {}
369	opForCondStmt operation = 80
370
371	// Tag: ForStmt
372	// Args: cond post block
373	// Example: for ; cond; post {}
374	opForCondPostStmt operation = 81
375
376	// Tag: ForStmt
377	// Args: init block
378	// Example: for init; ; {}
379	opForInitStmt operation = 82
380
381	// Tag: ForStmt
382	// Args: init post block
383	// Example: for init; ; post {}
384	opForInitPostStmt operation = 83
385
386	// Tag: ForStmt
387	// Args: init cond block
388	// Example: for init; cond; {}
389	opForInitCondStmt operation = 84
390
391	// Tag: ForStmt
392	// Args: init cond post block
393	// Example: for init; cond; post {}
394	opForInitCondPostStmt operation = 85
395
396	// Tag: RangeStmt
397	// Args: x block
398	// Example: for range x {}
399	opRangeStmt operation = 86
400
401	// Tag: RangeStmt
402	// Args: key x block
403	// Example: for key := range x {}
404	// Value: token.Token | ':=' or '='
405	opRangeKeyStmt operation = 87
406
407	// Tag: RangeStmt
408	// Args: key value x block
409	// Example: for key, value := range x {}
410	// Value: token.Token | ':=' or '='
411	opRangeKeyValueStmt operation = 88
412
413	// Tag: Unknown
414	// Args: fields...
415	opFieldList operation = 89
416
417	// Tag: Unknown
418	// Args: typ
419	// Example: type
420	opUnnamedField operation = 90
421
422	// Tag: Unknown
423	// Args: typ
424	// Example: name type
425	// ValueIndex: strings | field name
426	opSimpleField operation = 91
427
428	// Tag: Unknown
429	// Args: name typ
430	// Example: $name type
431	opField operation = 92
432
433	// Tag: Unknown
434	// Args: names... typ
435	// Example: name1, name2 type
436	opMultiField operation = 93
437
438	// Tag: ValueSpec
439	// Args: lhs... rhs...
440	// Example: lhs = rhs
441	opValueInitSpec operation = 94
442
443	// Tag: ValueSpec
444	// Args: lhs... type rhs...
445	// Example: lhs typ = rhs
446	opTypedValueInitSpec operation = 95
447
448	// Tag: ValueSpec
449	// Args: lhs... type
450	// Example: lhs typ
451	opTypedValueSpec operation = 96
452
453	// Tag: TypeSpec
454	// Args: name type
455	// Example: name type
456	opTypeSpec operation = 97
457
458	// Tag: TypeSpec
459	// Args: name type
460	// Example: name = type
461	opTypeAliasSpec operation = 98
462
463	// Tag: FuncDecl
464	// Args: name type block
465	opFuncDecl operation = 99
466
467	// Tag: FuncDecl
468	// Args: recv name type block
469	opMethodDecl operation = 100
470
471	// Tag: FuncDecl
472	// Args: name type
473	opFuncProtoDecl operation = 101
474
475	// Tag: FuncDecl
476	// Args: recv name type
477	opMethodProtoDecl operation = 102
478
479	// Tag: GenDecl
480	// Args: valuespecs...
481	opConstDecl operation = 103
482
483	// Tag: GenDecl
484	// Args: valuespecs...
485	opVarDecl operation = 104
486
487	// Tag: GenDecl
488	// Args: typespecs...
489	opTypeDecl operation = 105
490
491	// Tag: File
492	// Args: name
493	opEmptyPackage operation = 106
494)
495
496type operationInfo struct {
497	Tag            nodetag.Value
498	NumArgs        int
499	ValueKind      valueKind
500	ExtraValueKind valueKind
501	VariadicMap    bitmap64
502}
503
504var operationInfoTable = [256]operationInfo{
505	opInvalid: {},
506
507	opNode: {
508		Tag:            nodetag.Node,
509		NumArgs:        0,
510		ValueKind:      emptyValue,
511		ExtraValueKind: emptyValue,
512		VariadicMap:    0, // 0
513	},
514	opNamedNode: {
515		Tag:            nodetag.Node,
516		NumArgs:        0,
517		ValueKind:      emptyValue,
518		ExtraValueKind: stringValue,
519		VariadicMap:    0, // 0
520	},
521	opNodeSeq: {
522		Tag:            nodetag.Unknown,
523		NumArgs:        0,
524		ValueKind:      emptyValue,
525		ExtraValueKind: emptyValue,
526		VariadicMap:    0, // 0
527	},
528	opNamedNodeSeq: {
529		Tag:            nodetag.Unknown,
530		NumArgs:        0,
531		ValueKind:      emptyValue,
532		ExtraValueKind: stringValue,
533		VariadicMap:    0, // 0
534	},
535	opOptNode: {
536		Tag:            nodetag.Unknown,
537		NumArgs:        0,
538		ValueKind:      emptyValue,
539		ExtraValueKind: emptyValue,
540		VariadicMap:    0, // 0
541	},
542	opNamedOptNode: {
543		Tag:            nodetag.Unknown,
544		NumArgs:        0,
545		ValueKind:      emptyValue,
546		ExtraValueKind: stringValue,
547		VariadicMap:    0, // 0
548	},
549	opMultiStmt: {
550		Tag:            nodetag.StmtList,
551		NumArgs:        1,
552		ValueKind:      emptyValue,
553		ExtraValueKind: emptyValue,
554		VariadicMap:    1, // 1
555	},
556	opMultiExpr: {
557		Tag:            nodetag.ExprList,
558		NumArgs:        1,
559		ValueKind:      emptyValue,
560		ExtraValueKind: emptyValue,
561		VariadicMap:    1, // 1
562	},
563	opEnd: {
564		Tag:            nodetag.Unknown,
565		NumArgs:        0,
566		ValueKind:      emptyValue,
567		ExtraValueKind: emptyValue,
568		VariadicMap:    0, // 0
569	},
570	opBasicLit: {
571		Tag:            nodetag.BasicLit,
572		NumArgs:        0,
573		ValueKind:      emptyValue,
574		ExtraValueKind: ifaceValue,
575		VariadicMap:    0, // 0
576	},
577	opStrictIntLit: {
578		Tag:            nodetag.BasicLit,
579		NumArgs:        0,
580		ValueKind:      emptyValue,
581		ExtraValueKind: stringValue,
582		VariadicMap:    0, // 0
583	},
584	opStrictFloatLit: {
585		Tag:            nodetag.BasicLit,
586		NumArgs:        0,
587		ValueKind:      emptyValue,
588		ExtraValueKind: stringValue,
589		VariadicMap:    0, // 0
590	},
591	opStrictCharLit: {
592		Tag:            nodetag.BasicLit,
593		NumArgs:        0,
594		ValueKind:      emptyValue,
595		ExtraValueKind: stringValue,
596		VariadicMap:    0, // 0
597	},
598	opStrictStringLit: {
599		Tag:            nodetag.BasicLit,
600		NumArgs:        0,
601		ValueKind:      emptyValue,
602		ExtraValueKind: stringValue,
603		VariadicMap:    0, // 0
604	},
605	opStrictComplexLit: {
606		Tag:            nodetag.BasicLit,
607		NumArgs:        0,
608		ValueKind:      emptyValue,
609		ExtraValueKind: stringValue,
610		VariadicMap:    0, // 0
611	},
612	opIdent: {
613		Tag:            nodetag.Ident,
614		NumArgs:        0,
615		ValueKind:      emptyValue,
616		ExtraValueKind: stringValue,
617		VariadicMap:    0, // 0
618	},
619	opIndexExpr: {
620		Tag:            nodetag.IndexExpr,
621		NumArgs:        2,
622		ValueKind:      emptyValue,
623		ExtraValueKind: emptyValue,
624		VariadicMap:    0, // 0
625	},
626	opSliceExpr: {
627		Tag:            nodetag.SliceExpr,
628		NumArgs:        1,
629		ValueKind:      emptyValue,
630		ExtraValueKind: emptyValue,
631		VariadicMap:    0, // 0
632	},
633	opSliceFromExpr: {
634		Tag:            nodetag.SliceExpr,
635		NumArgs:        2,
636		ValueKind:      emptyValue,
637		ExtraValueKind: emptyValue,
638		VariadicMap:    0, // 0
639	},
640	opSliceToExpr: {
641		Tag:            nodetag.SliceExpr,
642		NumArgs:        2,
643		ValueKind:      emptyValue,
644		ExtraValueKind: emptyValue,
645		VariadicMap:    0, // 0
646	},
647	opSliceFromToExpr: {
648		Tag:            nodetag.SliceExpr,
649		NumArgs:        3,
650		ValueKind:      emptyValue,
651		ExtraValueKind: emptyValue,
652		VariadicMap:    0, // 0
653	},
654	opSliceToCapExpr: {
655		Tag:            nodetag.SliceExpr,
656		NumArgs:        3,
657		ValueKind:      emptyValue,
658		ExtraValueKind: emptyValue,
659		VariadicMap:    0, // 0
660	},
661	opSliceFromToCapExpr: {
662		Tag:            nodetag.SliceExpr,
663		NumArgs:        4,
664		ValueKind:      emptyValue,
665		ExtraValueKind: emptyValue,
666		VariadicMap:    0, // 0
667	},
668	opFuncLit: {
669		Tag:            nodetag.FuncLit,
670		NumArgs:        2,
671		ValueKind:      emptyValue,
672		ExtraValueKind: emptyValue,
673		VariadicMap:    0, // 0
674	},
675	opCompositeLit: {
676		Tag:            nodetag.CompositeLit,
677		NumArgs:        1,
678		ValueKind:      emptyValue,
679		ExtraValueKind: emptyValue,
680		VariadicMap:    1, // 1
681	},
682	opTypedCompositeLit: {
683		Tag:            nodetag.CompositeLit,
684		NumArgs:        2,
685		ValueKind:      emptyValue,
686		ExtraValueKind: emptyValue,
687		VariadicMap:    2, // 10
688	},
689	opSimpleSelectorExpr: {
690		Tag:            nodetag.SelectorExpr,
691		NumArgs:        1,
692		ValueKind:      emptyValue,
693		ExtraValueKind: stringValue,
694		VariadicMap:    0, // 0
695	},
696	opSelectorExpr: {
697		Tag:            nodetag.SelectorExpr,
698		NumArgs:        2,
699		ValueKind:      emptyValue,
700		ExtraValueKind: emptyValue,
701		VariadicMap:    0, // 0
702	},
703	opTypeAssertExpr: {
704		Tag:            nodetag.TypeAssertExpr,
705		NumArgs:        2,
706		ValueKind:      emptyValue,
707		ExtraValueKind: emptyValue,
708		VariadicMap:    0, // 0
709	},
710	opTypeSwitchAssertExpr: {
711		Tag:            nodetag.TypeAssertExpr,
712		NumArgs:        1,
713		ValueKind:      emptyValue,
714		ExtraValueKind: emptyValue,
715		VariadicMap:    0, // 0
716	},
717	opVoidFuncType: {
718		Tag:            nodetag.FuncType,
719		NumArgs:        1,
720		ValueKind:      emptyValue,
721		ExtraValueKind: emptyValue,
722		VariadicMap:    0, // 0
723	},
724	opFuncType: {
725		Tag:            nodetag.FuncType,
726		NumArgs:        2,
727		ValueKind:      emptyValue,
728		ExtraValueKind: emptyValue,
729		VariadicMap:    0, // 0
730	},
731	opArrayType: {
732		Tag:            nodetag.ArrayType,
733		NumArgs:        2,
734		ValueKind:      emptyValue,
735		ExtraValueKind: emptyValue,
736		VariadicMap:    0, // 0
737	},
738	opSliceType: {
739		Tag:            nodetag.ArrayType,
740		NumArgs:        1,
741		ValueKind:      emptyValue,
742		ExtraValueKind: emptyValue,
743		VariadicMap:    0, // 0
744	},
745	opMapType: {
746		Tag:            nodetag.MapType,
747		NumArgs:        2,
748		ValueKind:      emptyValue,
749		ExtraValueKind: emptyValue,
750		VariadicMap:    0, // 0
751	},
752	opChanType: {
753		Tag:            nodetag.ChanType,
754		NumArgs:        1,
755		ValueKind:      chandirValue,
756		ExtraValueKind: emptyValue,
757		VariadicMap:    0, // 0
758	},
759	opKeyValueExpr: {
760		Tag:            nodetag.KeyValueExpr,
761		NumArgs:        2,
762		ValueKind:      emptyValue,
763		ExtraValueKind: emptyValue,
764		VariadicMap:    0, // 0
765	},
766	opEllipsis: {
767		Tag:            nodetag.Ellipsis,
768		NumArgs:        0,
769		ValueKind:      emptyValue,
770		ExtraValueKind: emptyValue,
771		VariadicMap:    0, // 0
772	},
773	opTypedEllipsis: {
774		Tag:            nodetag.Ellipsis,
775		NumArgs:        1,
776		ValueKind:      emptyValue,
777		ExtraValueKind: emptyValue,
778		VariadicMap:    0, // 0
779	},
780	opStarExpr: {
781		Tag:            nodetag.StarExpr,
782		NumArgs:        1,
783		ValueKind:      emptyValue,
784		ExtraValueKind: emptyValue,
785		VariadicMap:    0, // 0
786	},
787	opUnaryExpr: {
788		Tag:            nodetag.UnaryExpr,
789		NumArgs:        1,
790		ValueKind:      tokenValue,
791		ExtraValueKind: emptyValue,
792		VariadicMap:    0, // 0
793	},
794	opBinaryExpr: {
795		Tag:            nodetag.BinaryExpr,
796		NumArgs:        2,
797		ValueKind:      tokenValue,
798		ExtraValueKind: emptyValue,
799		VariadicMap:    0, // 0
800	},
801	opParenExpr: {
802		Tag:            nodetag.ParenExpr,
803		NumArgs:        1,
804		ValueKind:      emptyValue,
805		ExtraValueKind: emptyValue,
806		VariadicMap:    0, // 0
807	},
808	opVariadicCallExpr: {
809		Tag:            nodetag.CallExpr,
810		NumArgs:        2,
811		ValueKind:      emptyValue,
812		ExtraValueKind: emptyValue,
813		VariadicMap:    2, // 10
814	},
815	opCallExpr: {
816		Tag:            nodetag.CallExpr,
817		NumArgs:        2,
818		ValueKind:      emptyValue,
819		ExtraValueKind: emptyValue,
820		VariadicMap:    2, // 10
821	},
822	opAssignStmt: {
823		Tag:            nodetag.AssignStmt,
824		NumArgs:        2,
825		ValueKind:      tokenValue,
826		ExtraValueKind: emptyValue,
827		VariadicMap:    0, // 0
828	},
829	opMultiAssignStmt: {
830		Tag:            nodetag.AssignStmt,
831		NumArgs:        2,
832		ValueKind:      tokenValue,
833		ExtraValueKind: emptyValue,
834		VariadicMap:    3, // 11
835	},
836	opBranchStmt: {
837		Tag:            nodetag.BranchStmt,
838		NumArgs:        1,
839		ValueKind:      tokenValue,
840		ExtraValueKind: emptyValue,
841		VariadicMap:    0, // 0
842	},
843	opSimpleLabeledBranchStmt: {
844		Tag:            nodetag.BranchStmt,
845		NumArgs:        1,
846		ValueKind:      tokenValue,
847		ExtraValueKind: stringValue,
848		VariadicMap:    0, // 0
849	},
850	opLabeledBranchStmt: {
851		Tag:            nodetag.BranchStmt,
852		NumArgs:        2,
853		ValueKind:      tokenValue,
854		ExtraValueKind: emptyValue,
855		VariadicMap:    0, // 0
856	},
857	opSimpleLabeledStmt: {
858		Tag:            nodetag.LabeledStmt,
859		NumArgs:        1,
860		ValueKind:      emptyValue,
861		ExtraValueKind: stringValue,
862		VariadicMap:    0, // 0
863	},
864	opLabeledStmt: {
865		Tag:            nodetag.LabeledStmt,
866		NumArgs:        2,
867		ValueKind:      emptyValue,
868		ExtraValueKind: emptyValue,
869		VariadicMap:    0, // 0
870	},
871	opBlockStmt: {
872		Tag:            nodetag.BlockStmt,
873		NumArgs:        1,
874		ValueKind:      emptyValue,
875		ExtraValueKind: emptyValue,
876		VariadicMap:    1, // 1
877	},
878	opExprStmt: {
879		Tag:            nodetag.ExprStmt,
880		NumArgs:        1,
881		ValueKind:      emptyValue,
882		ExtraValueKind: emptyValue,
883		VariadicMap:    0, // 0
884	},
885	opGoStmt: {
886		Tag:            nodetag.GoStmt,
887		NumArgs:        1,
888		ValueKind:      emptyValue,
889		ExtraValueKind: emptyValue,
890		VariadicMap:    0, // 0
891	},
892	opDeferStmt: {
893		Tag:            nodetag.DeferStmt,
894		NumArgs:        1,
895		ValueKind:      emptyValue,
896		ExtraValueKind: emptyValue,
897		VariadicMap:    0, // 0
898	},
899	opSendStmt: {
900		Tag:            nodetag.SendStmt,
901		NumArgs:        2,
902		ValueKind:      emptyValue,
903		ExtraValueKind: emptyValue,
904		VariadicMap:    0, // 0
905	},
906	opEmptyStmt: {
907		Tag:            nodetag.EmptyStmt,
908		NumArgs:        0,
909		ValueKind:      emptyValue,
910		ExtraValueKind: emptyValue,
911		VariadicMap:    0, // 0
912	},
913	opIncDecStmt: {
914		Tag:            nodetag.IncDecStmt,
915		NumArgs:        1,
916		ValueKind:      tokenValue,
917		ExtraValueKind: emptyValue,
918		VariadicMap:    0, // 0
919	},
920	opReturnStmt: {
921		Tag:            nodetag.ReturnStmt,
922		NumArgs:        1,
923		ValueKind:      emptyValue,
924		ExtraValueKind: emptyValue,
925		VariadicMap:    1, // 1
926	},
927	opIfStmt: {
928		Tag:            nodetag.IfStmt,
929		NumArgs:        2,
930		ValueKind:      emptyValue,
931		ExtraValueKind: emptyValue,
932		VariadicMap:    0, // 0
933	},
934	opIfInitStmt: {
935		Tag:            nodetag.IfStmt,
936		NumArgs:        3,
937		ValueKind:      emptyValue,
938		ExtraValueKind: emptyValue,
939		VariadicMap:    0, // 0
940	},
941	opIfElseStmt: {
942		Tag:            nodetag.IfStmt,
943		NumArgs:        3,
944		ValueKind:      emptyValue,
945		ExtraValueKind: emptyValue,
946		VariadicMap:    0, // 0
947	},
948	opIfInitElseStmt: {
949		Tag:            nodetag.IfStmt,
950		NumArgs:        4,
951		ValueKind:      emptyValue,
952		ExtraValueKind: emptyValue,
953		VariadicMap:    0, // 0
954	},
955	opIfNamedOptStmt: {
956		Tag:            nodetag.IfStmt,
957		NumArgs:        1,
958		ValueKind:      emptyValue,
959		ExtraValueKind: stringValue,
960		VariadicMap:    0, // 0
961	},
962	opIfNamedOptElseStmt: {
963		Tag:            nodetag.IfStmt,
964		NumArgs:        2,
965		ValueKind:      emptyValue,
966		ExtraValueKind: stringValue,
967		VariadicMap:    0, // 0
968	},
969	opSwitchStmt: {
970		Tag:            nodetag.SwitchStmt,
971		NumArgs:        1,
972		ValueKind:      emptyValue,
973		ExtraValueKind: emptyValue,
974		VariadicMap:    1, // 1
975	},
976	opSwitchTagStmt: {
977		Tag:            nodetag.SwitchStmt,
978		NumArgs:        2,
979		ValueKind:      emptyValue,
980		ExtraValueKind: emptyValue,
981		VariadicMap:    2, // 10
982	},
983	opSwitchInitStmt: {
984		Tag:            nodetag.SwitchStmt,
985		NumArgs:        2,
986		ValueKind:      emptyValue,
987		ExtraValueKind: emptyValue,
988		VariadicMap:    2, // 10
989	},
990	opSwitchInitTagStmt: {
991		Tag:            nodetag.SwitchStmt,
992		NumArgs:        3,
993		ValueKind:      emptyValue,
994		ExtraValueKind: emptyValue,
995		VariadicMap:    4, // 100
996	},
997	opSelectStmt: {
998		Tag:            nodetag.SelectStmt,
999		NumArgs:        1,
1000		ValueKind:      emptyValue,
1001		ExtraValueKind: emptyValue,
1002		VariadicMap:    1, // 1
1003	},
1004	opTypeSwitchStmt: {
1005		Tag:            nodetag.TypeSwitchStmt,
1006		NumArgs:        2,
1007		ValueKind:      emptyValue,
1008		ExtraValueKind: emptyValue,
1009		VariadicMap:    0, // 0
1010	},
1011	opTypeSwitchInitStmt: {
1012		Tag:            nodetag.TypeSwitchStmt,
1013		NumArgs:        3,
1014		ValueKind:      emptyValue,
1015		ExtraValueKind: emptyValue,
1016		VariadicMap:    0, // 0
1017	},
1018	opCaseClause: {
1019		Tag:            nodetag.CaseClause,
1020		NumArgs:        2,
1021		ValueKind:      emptyValue,
1022		ExtraValueKind: emptyValue,
1023		VariadicMap:    3, // 11
1024	},
1025	opDefaultCaseClause: {
1026		Tag:            nodetag.CaseClause,
1027		NumArgs:        1,
1028		ValueKind:      emptyValue,
1029		ExtraValueKind: emptyValue,
1030		VariadicMap:    1, // 1
1031	},
1032	opCommClause: {
1033		Tag:            nodetag.CommClause,
1034		NumArgs:        2,
1035		ValueKind:      emptyValue,
1036		ExtraValueKind: emptyValue,
1037		VariadicMap:    2, // 10
1038	},
1039	opDefaultCommClause: {
1040		Tag:            nodetag.CommClause,
1041		NumArgs:        1,
1042		ValueKind:      emptyValue,
1043		ExtraValueKind: emptyValue,
1044		VariadicMap:    1, // 1
1045	},
1046	opForStmt: {
1047		Tag:            nodetag.ForStmt,
1048		NumArgs:        1,
1049		ValueKind:      emptyValue,
1050		ExtraValueKind: emptyValue,
1051		VariadicMap:    0, // 0
1052	},
1053	opForPostStmt: {
1054		Tag:            nodetag.ForStmt,
1055		NumArgs:        2,
1056		ValueKind:      emptyValue,
1057		ExtraValueKind: emptyValue,
1058		VariadicMap:    0, // 0
1059	},
1060	opForCondStmt: {
1061		Tag:            nodetag.ForStmt,
1062		NumArgs:        2,
1063		ValueKind:      emptyValue,
1064		ExtraValueKind: emptyValue,
1065		VariadicMap:    0, // 0
1066	},
1067	opForCondPostStmt: {
1068		Tag:            nodetag.ForStmt,
1069		NumArgs:        3,
1070		ValueKind:      emptyValue,
1071		ExtraValueKind: emptyValue,
1072		VariadicMap:    0, // 0
1073	},
1074	opForInitStmt: {
1075		Tag:            nodetag.ForStmt,
1076		NumArgs:        2,
1077		ValueKind:      emptyValue,
1078		ExtraValueKind: emptyValue,
1079		VariadicMap:    0, // 0
1080	},
1081	opForInitPostStmt: {
1082		Tag:            nodetag.ForStmt,
1083		NumArgs:        3,
1084		ValueKind:      emptyValue,
1085		ExtraValueKind: emptyValue,
1086		VariadicMap:    0, // 0
1087	},
1088	opForInitCondStmt: {
1089		Tag:            nodetag.ForStmt,
1090		NumArgs:        3,
1091		ValueKind:      emptyValue,
1092		ExtraValueKind: emptyValue,
1093		VariadicMap:    0, // 0
1094	},
1095	opForInitCondPostStmt: {
1096		Tag:            nodetag.ForStmt,
1097		NumArgs:        4,
1098		ValueKind:      emptyValue,
1099		ExtraValueKind: emptyValue,
1100		VariadicMap:    0, // 0
1101	},
1102	opRangeStmt: {
1103		Tag:            nodetag.RangeStmt,
1104		NumArgs:        2,
1105		ValueKind:      emptyValue,
1106		ExtraValueKind: emptyValue,
1107		VariadicMap:    0, // 0
1108	},
1109	opRangeKeyStmt: {
1110		Tag:            nodetag.RangeStmt,
1111		NumArgs:        3,
1112		ValueKind:      tokenValue,
1113		ExtraValueKind: emptyValue,
1114		VariadicMap:    0, // 0
1115	},
1116	opRangeKeyValueStmt: {
1117		Tag:            nodetag.RangeStmt,
1118		NumArgs:        4,
1119		ValueKind:      tokenValue,
1120		ExtraValueKind: emptyValue,
1121		VariadicMap:    0, // 0
1122	},
1123	opFieldList: {
1124		Tag:            nodetag.Unknown,
1125		NumArgs:        1,
1126		ValueKind:      emptyValue,
1127		ExtraValueKind: emptyValue,
1128		VariadicMap:    1, // 1
1129	},
1130	opUnnamedField: {
1131		Tag:            nodetag.Unknown,
1132		NumArgs:        1,
1133		ValueKind:      emptyValue,
1134		ExtraValueKind: emptyValue,
1135		VariadicMap:    0, // 0
1136	},
1137	opSimpleField: {
1138		Tag:            nodetag.Unknown,
1139		NumArgs:        1,
1140		ValueKind:      emptyValue,
1141		ExtraValueKind: stringValue,
1142		VariadicMap:    0, // 0
1143	},
1144	opField: {
1145		Tag:            nodetag.Unknown,
1146		NumArgs:        2,
1147		ValueKind:      emptyValue,
1148		ExtraValueKind: emptyValue,
1149		VariadicMap:    0, // 0
1150	},
1151	opMultiField: {
1152		Tag:            nodetag.Unknown,
1153		NumArgs:        2,
1154		ValueKind:      emptyValue,
1155		ExtraValueKind: emptyValue,
1156		VariadicMap:    1, // 1
1157	},
1158	opValueInitSpec: {
1159		Tag:            nodetag.ValueSpec,
1160		NumArgs:        2,
1161		ValueKind:      emptyValue,
1162		ExtraValueKind: emptyValue,
1163		VariadicMap:    3, // 11
1164	},
1165	opTypedValueInitSpec: {
1166		Tag:            nodetag.ValueSpec,
1167		NumArgs:        3,
1168		ValueKind:      emptyValue,
1169		ExtraValueKind: emptyValue,
1170		VariadicMap:    5, // 101
1171	},
1172	opTypedValueSpec: {
1173		Tag:            nodetag.ValueSpec,
1174		NumArgs:        2,
1175		ValueKind:      emptyValue,
1176		ExtraValueKind: emptyValue,
1177		VariadicMap:    1, // 1
1178	},
1179	opTypeSpec: {
1180		Tag:            nodetag.TypeSpec,
1181		NumArgs:        2,
1182		ValueKind:      emptyValue,
1183		ExtraValueKind: emptyValue,
1184		VariadicMap:    0, // 0
1185	},
1186	opTypeAliasSpec: {
1187		Tag:            nodetag.TypeSpec,
1188		NumArgs:        2,
1189		ValueKind:      emptyValue,
1190		ExtraValueKind: emptyValue,
1191		VariadicMap:    0, // 0
1192	},
1193	opFuncDecl: {
1194		Tag:            nodetag.FuncDecl,
1195		NumArgs:        3,
1196		ValueKind:      emptyValue,
1197		ExtraValueKind: emptyValue,
1198		VariadicMap:    0, // 0
1199	},
1200	opMethodDecl: {
1201		Tag:            nodetag.FuncDecl,
1202		NumArgs:        4,
1203		ValueKind:      emptyValue,
1204		ExtraValueKind: emptyValue,
1205		VariadicMap:    0, // 0
1206	},
1207	opFuncProtoDecl: {
1208		Tag:            nodetag.FuncDecl,
1209		NumArgs:        2,
1210		ValueKind:      emptyValue,
1211		ExtraValueKind: emptyValue,
1212		VariadicMap:    0, // 0
1213	},
1214	opMethodProtoDecl: {
1215		Tag:            nodetag.FuncDecl,
1216		NumArgs:        3,
1217		ValueKind:      emptyValue,
1218		ExtraValueKind: emptyValue,
1219		VariadicMap:    0, // 0
1220	},
1221	opConstDecl: {
1222		Tag:            nodetag.GenDecl,
1223		NumArgs:        1,
1224		ValueKind:      emptyValue,
1225		ExtraValueKind: emptyValue,
1226		VariadicMap:    1, // 1
1227	},
1228	opVarDecl: {
1229		Tag:            nodetag.GenDecl,
1230		NumArgs:        1,
1231		ValueKind:      emptyValue,
1232		ExtraValueKind: emptyValue,
1233		VariadicMap:    1, // 1
1234	},
1235	opTypeDecl: {
1236		Tag:            nodetag.GenDecl,
1237		NumArgs:        1,
1238		ValueKind:      emptyValue,
1239		ExtraValueKind: emptyValue,
1240		VariadicMap:    1, // 1
1241	},
1242	opEmptyPackage: {
1243		Tag:            nodetag.File,
1244		NumArgs:        1,
1245		ValueKind:      emptyValue,
1246		ExtraValueKind: emptyValue,
1247		VariadicMap:    0, // 0
1248	},
1249}
1250