source: code/trunk/vendor/modernc.org/cc/v3/ast.go@ 822

Last change on this file since 822 was 822, checked in by yakumo.izuru, 22 months ago

Prefer immortal.run over runit and rc.d, use vendored modules
for convenience.

Signed-off-by: Izuru Yakumo <yakumo.izuru@…>

File size: 134.6 KB
Line 
1// Code generated by yy. DO NOT EDIT.
2
3// Copyright 2019 The CC Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7package cc
8
9import (
10 "fmt"
11
12 "modernc.org/token"
13)
14
15// AbstractDeclaratorCase represents case numbers of production AbstractDeclarator
16type AbstractDeclaratorCase int
17
18// Values of type AbstractDeclaratorCase
19const (
20 AbstractDeclaratorPtr AbstractDeclaratorCase = iota
21 AbstractDeclaratorDecl
22)
23
24// String implements fmt.Stringer
25func (n AbstractDeclaratorCase) String() string {
26 switch n {
27 case AbstractDeclaratorPtr:
28 return "AbstractDeclaratorPtr"
29 case AbstractDeclaratorDecl:
30 return "AbstractDeclaratorDecl"
31 default:
32 return fmt.Sprintf("AbstractDeclaratorCase(%v)", int(n))
33 }
34}
35
36// AbstractDeclarator represents data reduced by productions:
37//
38// AbstractDeclarator:
39// Pointer // Case AbstractDeclaratorPtr
40// | Pointer DirectAbstractDeclarator // Case AbstractDeclaratorDecl
41type AbstractDeclarator struct {
42 typ Type
43 Case AbstractDeclaratorCase `PrettyPrint:"stringer,zero"`
44 DirectAbstractDeclarator *DirectAbstractDeclarator
45 Pointer *Pointer
46}
47
48// String implements fmt.Stringer.
49func (n *AbstractDeclarator) String() string { return PrettyString(n) }
50
51// Position reports the position of the first component of n, if available.
52func (n *AbstractDeclarator) Position() (r token.Position) {
53 if n == nil {
54 return r
55 }
56
57 switch n.Case {
58 case 0:
59 return n.Pointer.Position()
60 case 1:
61 if p := n.Pointer.Position(); p.IsValid() {
62 return p
63 }
64
65 return n.DirectAbstractDeclarator.Position()
66 default:
67 panic("internal error")
68 }
69}
70
71// AdditiveExpressionCase represents case numbers of production AdditiveExpression
72type AdditiveExpressionCase int
73
74// Values of type AdditiveExpressionCase
75const (
76 AdditiveExpressionMul AdditiveExpressionCase = iota
77 AdditiveExpressionAdd
78 AdditiveExpressionSub
79)
80
81// String implements fmt.Stringer
82func (n AdditiveExpressionCase) String() string {
83 switch n {
84 case AdditiveExpressionMul:
85 return "AdditiveExpressionMul"
86 case AdditiveExpressionAdd:
87 return "AdditiveExpressionAdd"
88 case AdditiveExpressionSub:
89 return "AdditiveExpressionSub"
90 default:
91 return fmt.Sprintf("AdditiveExpressionCase(%v)", int(n))
92 }
93}
94
95// AdditiveExpression represents data reduced by productions:
96//
97// AdditiveExpression:
98// MultiplicativeExpression // Case AdditiveExpressionMul
99// | AdditiveExpression '+' MultiplicativeExpression // Case AdditiveExpressionAdd
100// | AdditiveExpression '-' MultiplicativeExpression // Case AdditiveExpressionSub
101type AdditiveExpression struct {
102 lexicalScope Scope
103 Operand Operand
104 promote Type
105 IsSideEffectsFree bool
106 AdditiveExpression *AdditiveExpression
107 Case AdditiveExpressionCase `PrettyPrint:"stringer,zero"`
108 MultiplicativeExpression *MultiplicativeExpression
109 Token Token
110}
111
112// String implements fmt.Stringer.
113func (n *AdditiveExpression) String() string { return PrettyString(n) }
114
115// Position reports the position of the first component of n, if available.
116func (n *AdditiveExpression) Position() (r token.Position) {
117 if n == nil {
118 return r
119 }
120
121 switch n.Case {
122 case 1, 2:
123 if p := n.AdditiveExpression.Position(); p.IsValid() {
124 return p
125 }
126
127 if p := n.Token.Position(); p.IsValid() {
128 return p
129 }
130
131 return n.MultiplicativeExpression.Position()
132 case 0:
133 return n.MultiplicativeExpression.Position()
134 default:
135 panic("internal error")
136 }
137}
138
139// AlignmentSpecifierCase represents case numbers of production AlignmentSpecifier
140type AlignmentSpecifierCase int
141
142// Values of type AlignmentSpecifierCase
143const (
144 AlignmentSpecifierAlignasType AlignmentSpecifierCase = iota
145 AlignmentSpecifierAlignasExpr
146)
147
148// String implements fmt.Stringer
149func (n AlignmentSpecifierCase) String() string {
150 switch n {
151 case AlignmentSpecifierAlignasType:
152 return "AlignmentSpecifierAlignasType"
153 case AlignmentSpecifierAlignasExpr:
154 return "AlignmentSpecifierAlignasExpr"
155 default:
156 return fmt.Sprintf("AlignmentSpecifierCase(%v)", int(n))
157 }
158}
159
160// AlignmentSpecifier represents data reduced by productions:
161//
162// AlignmentSpecifier:
163// "_Alignas" '(' TypeName ')' // Case AlignmentSpecifierAlignasType
164// | "_Alignas" '(' ConstantExpression ')' // Case AlignmentSpecifierAlignasExpr
165type AlignmentSpecifier struct {
166 Case AlignmentSpecifierCase `PrettyPrint:"stringer,zero"`
167 ConstantExpression *ConstantExpression
168 Token Token
169 Token2 Token
170 Token3 Token
171 TypeName *TypeName
172}
173
174// String implements fmt.Stringer.
175func (n *AlignmentSpecifier) String() string { return PrettyString(n) }
176
177// Position reports the position of the first component of n, if available.
178func (n *AlignmentSpecifier) Position() (r token.Position) {
179 if n == nil {
180 return r
181 }
182
183 switch n.Case {
184 case 1:
185 if p := n.Token.Position(); p.IsValid() {
186 return p
187 }
188
189 if p := n.Token2.Position(); p.IsValid() {
190 return p
191 }
192
193 if p := n.ConstantExpression.Position(); p.IsValid() {
194 return p
195 }
196
197 return n.Token3.Position()
198 case 0:
199 if p := n.Token.Position(); p.IsValid() {
200 return p
201 }
202
203 if p := n.Token2.Position(); p.IsValid() {
204 return p
205 }
206
207 if p := n.TypeName.Position(); p.IsValid() {
208 return p
209 }
210
211 return n.Token3.Position()
212 default:
213 panic("internal error")
214 }
215}
216
217// AndExpressionCase represents case numbers of production AndExpression
218type AndExpressionCase int
219
220// Values of type AndExpressionCase
221const (
222 AndExpressionEq AndExpressionCase = iota
223 AndExpressionAnd
224)
225
226// String implements fmt.Stringer
227func (n AndExpressionCase) String() string {
228 switch n {
229 case AndExpressionEq:
230 return "AndExpressionEq"
231 case AndExpressionAnd:
232 return "AndExpressionAnd"
233 default:
234 return fmt.Sprintf("AndExpressionCase(%v)", int(n))
235 }
236}
237
238// AndExpression represents data reduced by productions:
239//
240// AndExpression:
241// EqualityExpression // Case AndExpressionEq
242// | AndExpression '&' EqualityExpression // Case AndExpressionAnd
243type AndExpression struct {
244 Operand Operand
245 promote Type
246 IsSideEffectsFree bool
247 AndExpression *AndExpression
248 Case AndExpressionCase `PrettyPrint:"stringer,zero"`
249 EqualityExpression *EqualityExpression
250 Token Token
251}
252
253// String implements fmt.Stringer.
254func (n *AndExpression) String() string { return PrettyString(n) }
255
256// Position reports the position of the first component of n, if available.
257func (n *AndExpression) Position() (r token.Position) {
258 if n == nil {
259 return r
260 }
261
262 switch n.Case {
263 case 1:
264 if p := n.AndExpression.Position(); p.IsValid() {
265 return p
266 }
267
268 if p := n.Token.Position(); p.IsValid() {
269 return p
270 }
271
272 return n.EqualityExpression.Position()
273 case 0:
274 return n.EqualityExpression.Position()
275 default:
276 panic("internal error")
277 }
278}
279
280// ArgumentExpressionList represents data reduced by productions:
281//
282// ArgumentExpressionList:
283// AssignmentExpression
284// | ArgumentExpressionList ',' AssignmentExpression
285type ArgumentExpressionList struct {
286 ArgumentExpressionList *ArgumentExpressionList
287 AssignmentExpression *AssignmentExpression
288 Token Token
289}
290
291// String implements fmt.Stringer.
292func (n *ArgumentExpressionList) String() string { return PrettyString(n) }
293
294// Position reports the position of the first component of n, if available.
295func (n *ArgumentExpressionList) Position() (r token.Position) {
296 if n == nil {
297 return r
298 }
299
300 return n.AssignmentExpression.Position()
301}
302
303// Asm represents data reduced by production:
304//
305// Asm:
306// "__asm__" AsmQualifierList '(' STRINGLITERAL AsmArgList ')'
307type Asm struct {
308 AsmArgList *AsmArgList
309 AsmQualifierList *AsmQualifierList
310 Token Token
311 Token2 Token
312 Token3 Token
313 Token4 Token
314}
315
316// String implements fmt.Stringer.
317func (n *Asm) String() string { return PrettyString(n) }
318
319// Position reports the position of the first component of n, if available.
320func (n *Asm) Position() (r token.Position) {
321 if n == nil {
322 return r
323 }
324
325 if p := n.Token.Position(); p.IsValid() {
326 return p
327 }
328
329 if p := n.AsmQualifierList.Position(); p.IsValid() {
330 return p
331 }
332
333 if p := n.Token2.Position(); p.IsValid() {
334 return p
335 }
336
337 if p := n.Token3.Position(); p.IsValid() {
338 return p
339 }
340
341 if p := n.AsmArgList.Position(); p.IsValid() {
342 return p
343 }
344
345 return n.Token4.Position()
346}
347
348// AsmArgList represents data reduced by productions:
349//
350// AsmArgList:
351// ':' AsmExpressionList
352// | AsmArgList ':' AsmExpressionList
353type AsmArgList struct {
354 AsmArgList *AsmArgList
355 AsmExpressionList *AsmExpressionList
356 Token Token
357}
358
359// String implements fmt.Stringer.
360func (n *AsmArgList) String() string { return PrettyString(n) }
361
362// Position reports the position of the first component of n, if available.
363func (n *AsmArgList) Position() (r token.Position) {
364 if n == nil {
365 return r
366 }
367
368 if p := n.Token.Position(); p.IsValid() {
369 return p
370 }
371
372 return n.AsmExpressionList.Position()
373}
374
375// AsmExpressionList represents data reduced by productions:
376//
377// AsmExpressionList:
378// AsmIndex AssignmentExpression
379// | AsmExpressionList ',' AsmIndex AssignmentExpression
380type AsmExpressionList struct {
381 AsmExpressionList *AsmExpressionList
382 AsmIndex *AsmIndex
383 AssignmentExpression *AssignmentExpression
384 Token Token
385}
386
387// String implements fmt.Stringer.
388func (n *AsmExpressionList) String() string { return PrettyString(n) }
389
390// Position reports the position of the first component of n, if available.
391func (n *AsmExpressionList) Position() (r token.Position) {
392 if n == nil {
393 return r
394 }
395
396 if p := n.AsmIndex.Position(); p.IsValid() {
397 return p
398 }
399
400 return n.AssignmentExpression.Position()
401}
402
403// AsmFunctionDefinition represents data reduced by production:
404//
405// AsmFunctionDefinition:
406// DeclarationSpecifiers Declarator AsmStatement
407type AsmFunctionDefinition struct {
408 AsmStatement *AsmStatement
409 DeclarationSpecifiers *DeclarationSpecifiers
410 Declarator *Declarator
411}
412
413// String implements fmt.Stringer.
414func (n *AsmFunctionDefinition) String() string { return PrettyString(n) }
415
416// Position reports the position of the first component of n, if available.
417func (n *AsmFunctionDefinition) Position() (r token.Position) {
418 if n == nil {
419 return r
420 }
421
422 if p := n.DeclarationSpecifiers.Position(); p.IsValid() {
423 return p
424 }
425
426 if p := n.Declarator.Position(); p.IsValid() {
427 return p
428 }
429
430 return n.AsmStatement.Position()
431}
432
433// AsmIndex represents data reduced by production:
434//
435// AsmIndex:
436// '[' Expression ']'
437type AsmIndex struct {
438 Expression *Expression
439 Token Token
440 Token2 Token
441}
442
443// String implements fmt.Stringer.
444func (n *AsmIndex) String() string { return PrettyString(n) }
445
446// Position reports the position of the first component of n, if available.
447func (n *AsmIndex) Position() (r token.Position) {
448 if n == nil {
449 return r
450 }
451
452 if p := n.Token.Position(); p.IsValid() {
453 return p
454 }
455
456 if p := n.Expression.Position(); p.IsValid() {
457 return p
458 }
459
460 return n.Token2.Position()
461}
462
463// AsmQualifierCase represents case numbers of production AsmQualifier
464type AsmQualifierCase int
465
466// Values of type AsmQualifierCase
467const (
468 AsmQualifierVolatile AsmQualifierCase = iota
469 AsmQualifierInline
470 AsmQualifierGoto
471)
472
473// String implements fmt.Stringer
474func (n AsmQualifierCase) String() string {
475 switch n {
476 case AsmQualifierVolatile:
477 return "AsmQualifierVolatile"
478 case AsmQualifierInline:
479 return "AsmQualifierInline"
480 case AsmQualifierGoto:
481 return "AsmQualifierGoto"
482 default:
483 return fmt.Sprintf("AsmQualifierCase(%v)", int(n))
484 }
485}
486
487// AsmQualifier represents data reduced by productions:
488//
489// AsmQualifier:
490// "volatile" // Case AsmQualifierVolatile
491// | "inline" // Case AsmQualifierInline
492// | "goto" // Case AsmQualifierGoto
493type AsmQualifier struct {
494 Case AsmQualifierCase `PrettyPrint:"stringer,zero"`
495 Token Token
496}
497
498// String implements fmt.Stringer.
499func (n *AsmQualifier) String() string { return PrettyString(n) }
500
501// Position reports the position of the first component of n, if available.
502func (n *AsmQualifier) Position() (r token.Position) {
503 if n == nil {
504 return r
505 }
506
507 return n.Token.Position()
508}
509
510// AsmQualifierList represents data reduced by productions:
511//
512// AsmQualifierList:
513// AsmQualifier
514// | AsmQualifierList AsmQualifier
515type AsmQualifierList struct {
516 AsmQualifier *AsmQualifier
517 AsmQualifierList *AsmQualifierList
518}
519
520// String implements fmt.Stringer.
521func (n *AsmQualifierList) String() string { return PrettyString(n) }
522
523// Position reports the position of the first component of n, if available.
524func (n *AsmQualifierList) Position() (r token.Position) {
525 if n == nil {
526 return r
527 }
528
529 return n.AsmQualifier.Position()
530}
531
532// AsmStatement represents data reduced by production:
533//
534// AsmStatement:
535// Asm AttributeSpecifierList ';'
536type AsmStatement struct {
537 Asm *Asm
538 AttributeSpecifierList *AttributeSpecifierList
539 Token Token
540}
541
542// String implements fmt.Stringer.
543func (n *AsmStatement) String() string { return PrettyString(n) }
544
545// Position reports the position of the first component of n, if available.
546func (n *AsmStatement) Position() (r token.Position) {
547 if n == nil {
548 return r
549 }
550
551 if p := n.Asm.Position(); p.IsValid() {
552 return p
553 }
554
555 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
556 return p
557 }
558
559 return n.Token.Position()
560}
561
562// AssignmentExpressionCase represents case numbers of production AssignmentExpression
563type AssignmentExpressionCase int
564
565// Values of type AssignmentExpressionCase
566const (
567 AssignmentExpressionCond AssignmentExpressionCase = iota
568 AssignmentExpressionAssign
569 AssignmentExpressionMul
570 AssignmentExpressionDiv
571 AssignmentExpressionMod
572 AssignmentExpressionAdd
573 AssignmentExpressionSub
574 AssignmentExpressionLsh
575 AssignmentExpressionRsh
576 AssignmentExpressionAnd
577 AssignmentExpressionXor
578 AssignmentExpressionOr
579)
580
581// String implements fmt.Stringer
582func (n AssignmentExpressionCase) String() string {
583 switch n {
584 case AssignmentExpressionCond:
585 return "AssignmentExpressionCond"
586 case AssignmentExpressionAssign:
587 return "AssignmentExpressionAssign"
588 case AssignmentExpressionMul:
589 return "AssignmentExpressionMul"
590 case AssignmentExpressionDiv:
591 return "AssignmentExpressionDiv"
592 case AssignmentExpressionMod:
593 return "AssignmentExpressionMod"
594 case AssignmentExpressionAdd:
595 return "AssignmentExpressionAdd"
596 case AssignmentExpressionSub:
597 return "AssignmentExpressionSub"
598 case AssignmentExpressionLsh:
599 return "AssignmentExpressionLsh"
600 case AssignmentExpressionRsh:
601 return "AssignmentExpressionRsh"
602 case AssignmentExpressionAnd:
603 return "AssignmentExpressionAnd"
604 case AssignmentExpressionXor:
605 return "AssignmentExpressionXor"
606 case AssignmentExpressionOr:
607 return "AssignmentExpressionOr"
608 default:
609 return fmt.Sprintf("AssignmentExpressionCase(%v)", int(n))
610 }
611}
612
613// AssignmentExpression represents data reduced by productions:
614//
615// AssignmentExpression:
616// ConditionalExpression // Case AssignmentExpressionCond
617// | UnaryExpression '=' AssignmentExpression // Case AssignmentExpressionAssign
618// | UnaryExpression "*=" AssignmentExpression // Case AssignmentExpressionMul
619// | UnaryExpression "/=" AssignmentExpression // Case AssignmentExpressionDiv
620// | UnaryExpression "%=" AssignmentExpression // Case AssignmentExpressionMod
621// | UnaryExpression "+=" AssignmentExpression // Case AssignmentExpressionAdd
622// | UnaryExpression "-=" AssignmentExpression // Case AssignmentExpressionSub
623// | UnaryExpression "<<=" AssignmentExpression // Case AssignmentExpressionLsh
624// | UnaryExpression ">>=" AssignmentExpression // Case AssignmentExpressionRsh
625// | UnaryExpression "&=" AssignmentExpression // Case AssignmentExpressionAnd
626// | UnaryExpression "^=" AssignmentExpression // Case AssignmentExpressionXor
627// | UnaryExpression "|=" AssignmentExpression // Case AssignmentExpressionOr
628type AssignmentExpression struct {
629 Operand Operand
630 InitializerOperand Operand // When the expression is used in an initializer
631 lexicalScope Scope
632 promote Type
633 IsSideEffectsFree bool
634 AssignmentExpression *AssignmentExpression
635 Case AssignmentExpressionCase `PrettyPrint:"stringer,zero"`
636 ConditionalExpression *ConditionalExpression
637 Token Token
638 UnaryExpression *UnaryExpression
639}
640
641// String implements fmt.Stringer.
642func (n *AssignmentExpression) String() string { return PrettyString(n) }
643
644// Position reports the position of the first component of n, if available.
645func (n *AssignmentExpression) Position() (r token.Position) {
646 if n == nil {
647 return r
648 }
649
650 switch n.Case {
651 case 0:
652 return n.ConditionalExpression.Position()
653 case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11:
654 if p := n.UnaryExpression.Position(); p.IsValid() {
655 return p
656 }
657
658 if p := n.Token.Position(); p.IsValid() {
659 return p
660 }
661
662 return n.AssignmentExpression.Position()
663 default:
664 panic("internal error")
665 }
666}
667
668// AtomicTypeSpecifier represents data reduced by production:
669//
670// AtomicTypeSpecifier:
671// "_Atomic" '(' TypeName ')'
672type AtomicTypeSpecifier struct {
673 list []*TypeSpecifier
674 Token Token
675 Token2 Token
676 Token3 Token
677 TypeName *TypeName
678}
679
680// String implements fmt.Stringer.
681func (n *AtomicTypeSpecifier) String() string { return PrettyString(n) }
682
683// Position reports the position of the first component of n, if available.
684func (n *AtomicTypeSpecifier) Position() (r token.Position) {
685 if n == nil {
686 return r
687 }
688
689 if p := n.Token.Position(); p.IsValid() {
690 return p
691 }
692
693 if p := n.Token2.Position(); p.IsValid() {
694 return p
695 }
696
697 if p := n.TypeName.Position(); p.IsValid() {
698 return p
699 }
700
701 return n.Token3.Position()
702}
703
704// AttributeSpecifier represents data reduced by production:
705//
706// AttributeSpecifier:
707// "__attribute__" '(' '(' AttributeValueList ')' ')'
708type AttributeSpecifier struct {
709 AttributeValueList *AttributeValueList
710 Token Token
711 Token2 Token
712 Token3 Token
713 Token4 Token
714 Token5 Token
715}
716
717// String implements fmt.Stringer.
718func (n *AttributeSpecifier) String() string { return PrettyString(n) }
719
720// Position reports the position of the first component of n, if available.
721func (n *AttributeSpecifier) Position() (r token.Position) {
722 if n == nil {
723 return r
724 }
725
726 if p := n.Token.Position(); p.IsValid() {
727 return p
728 }
729
730 if p := n.Token2.Position(); p.IsValid() {
731 return p
732 }
733
734 if p := n.Token3.Position(); p.IsValid() {
735 return p
736 }
737
738 if p := n.AttributeValueList.Position(); p.IsValid() {
739 return p
740 }
741
742 if p := n.Token4.Position(); p.IsValid() {
743 return p
744 }
745
746 return n.Token5.Position()
747}
748
749// AttributeSpecifierList represents data reduced by productions:
750//
751// AttributeSpecifierList:
752// AttributeSpecifier
753// | AttributeSpecifierList AttributeSpecifier
754type AttributeSpecifierList struct {
755 AttributeSpecifier *AttributeSpecifier
756 AttributeSpecifierList *AttributeSpecifierList
757}
758
759// String implements fmt.Stringer.
760func (n *AttributeSpecifierList) String() string { return PrettyString(n) }
761
762// Position reports the position of the first component of n, if available.
763func (n *AttributeSpecifierList) Position() (r token.Position) {
764 if n == nil {
765 return r
766 }
767
768 return n.AttributeSpecifier.Position()
769}
770
771// AttributeValueCase represents case numbers of production AttributeValue
772type AttributeValueCase int
773
774// Values of type AttributeValueCase
775const (
776 AttributeValueIdent AttributeValueCase = iota
777 AttributeValueExpr
778)
779
780// String implements fmt.Stringer
781func (n AttributeValueCase) String() string {
782 switch n {
783 case AttributeValueIdent:
784 return "AttributeValueIdent"
785 case AttributeValueExpr:
786 return "AttributeValueExpr"
787 default:
788 return fmt.Sprintf("AttributeValueCase(%v)", int(n))
789 }
790}
791
792// AttributeValue represents data reduced by productions:
793//
794// AttributeValue:
795// IDENTIFIER // Case AttributeValueIdent
796// | IDENTIFIER '(' ExpressionList ')' // Case AttributeValueExpr
797type AttributeValue struct {
798 lexicalScope Scope
799 Case AttributeValueCase `PrettyPrint:"stringer,zero"`
800 ExpressionList *ExpressionList
801 Token Token
802 Token2 Token
803 Token3 Token
804}
805
806// String implements fmt.Stringer.
807func (n *AttributeValue) String() string { return PrettyString(n) }
808
809// Position reports the position of the first component of n, if available.
810func (n *AttributeValue) Position() (r token.Position) {
811 if n == nil {
812 return r
813 }
814
815 switch n.Case {
816 case 0:
817 return n.Token.Position()
818 case 1:
819 if p := n.Token.Position(); p.IsValid() {
820 return p
821 }
822
823 if p := n.Token2.Position(); p.IsValid() {
824 return p
825 }
826
827 if p := n.ExpressionList.Position(); p.IsValid() {
828 return p
829 }
830
831 return n.Token3.Position()
832 default:
833 panic("internal error")
834 }
835}
836
837// AttributeValueList represents data reduced by productions:
838//
839// AttributeValueList:
840// AttributeValue
841// | AttributeValueList ',' AttributeValue
842type AttributeValueList struct {
843 AttributeValue *AttributeValue
844 AttributeValueList *AttributeValueList
845 Token Token
846}
847
848// String implements fmt.Stringer.
849func (n *AttributeValueList) String() string { return PrettyString(n) }
850
851// Position reports the position of the first component of n, if available.
852func (n *AttributeValueList) Position() (r token.Position) {
853 if n == nil {
854 return r
855 }
856
857 return n.AttributeValue.Position()
858}
859
860// BlockItemCase represents case numbers of production BlockItem
861type BlockItemCase int
862
863// Values of type BlockItemCase
864const (
865 BlockItemDecl BlockItemCase = iota
866 BlockItemStmt
867 BlockItemLabel
868 BlockItemFuncDef
869 BlockItemPragma
870)
871
872// String implements fmt.Stringer
873func (n BlockItemCase) String() string {
874 switch n {
875 case BlockItemDecl:
876 return "BlockItemDecl"
877 case BlockItemStmt:
878 return "BlockItemStmt"
879 case BlockItemLabel:
880 return "BlockItemLabel"
881 case BlockItemFuncDef:
882 return "BlockItemFuncDef"
883 case BlockItemPragma:
884 return "BlockItemPragma"
885 default:
886 return fmt.Sprintf("BlockItemCase(%v)", int(n))
887 }
888}
889
890// BlockItem represents data reduced by productions:
891//
892// BlockItem:
893// Declaration // Case BlockItemDecl
894// | Statement // Case BlockItemStmt
895// | LabelDeclaration // Case BlockItemLabel
896// | DeclarationSpecifiers Declarator CompoundStatement // Case BlockItemFuncDef
897// | PragmaSTDC // Case BlockItemPragma
898type BlockItem struct {
899 fn *FunctionDefinition // Case FuncDef
900 closure map[StringID]struct{} // Case FuncDef
901 Last bool
902 Case BlockItemCase `PrettyPrint:"stringer,zero"`
903 CompoundStatement *CompoundStatement
904 Declaration *Declaration
905 DeclarationSpecifiers *DeclarationSpecifiers
906 Declarator *Declarator
907 LabelDeclaration *LabelDeclaration
908 PragmaSTDC *PragmaSTDC
909 Statement *Statement
910}
911
912// String implements fmt.Stringer.
913func (n *BlockItem) String() string { return PrettyString(n) }
914
915// Position reports the position of the first component of n, if available.
916func (n *BlockItem) Position() (r token.Position) {
917 if n == nil {
918 return r
919 }
920
921 switch n.Case {
922 case 0:
923 return n.Declaration.Position()
924 case 3:
925 if p := n.DeclarationSpecifiers.Position(); p.IsValid() {
926 return p
927 }
928
929 if p := n.Declarator.Position(); p.IsValid() {
930 return p
931 }
932
933 return n.CompoundStatement.Position()
934 case 2:
935 return n.LabelDeclaration.Position()
936 case 4:
937 return n.PragmaSTDC.Position()
938 case 1:
939 return n.Statement.Position()
940 default:
941 panic("internal error")
942 }
943}
944
945// BlockItemList represents data reduced by productions:
946//
947// BlockItemList:
948// BlockItem
949// | BlockItemList BlockItem
950type BlockItemList struct {
951 BlockItem *BlockItem
952 BlockItemList *BlockItemList
953}
954
955// String implements fmt.Stringer.
956func (n *BlockItemList) String() string { return PrettyString(n) }
957
958// Position reports the position of the first component of n, if available.
959func (n *BlockItemList) Position() (r token.Position) {
960 if n == nil {
961 return r
962 }
963
964 return n.BlockItem.Position()
965}
966
967// CastExpressionCase represents case numbers of production CastExpression
968type CastExpressionCase int
969
970// Values of type CastExpressionCase
971const (
972 CastExpressionUnary CastExpressionCase = iota
973 CastExpressionCast
974)
975
976// String implements fmt.Stringer
977func (n CastExpressionCase) String() string {
978 switch n {
979 case CastExpressionUnary:
980 return "CastExpressionUnary"
981 case CastExpressionCast:
982 return "CastExpressionCast"
983 default:
984 return fmt.Sprintf("CastExpressionCase(%v)", int(n))
985 }
986}
987
988// CastExpression represents data reduced by productions:
989//
990// CastExpression:
991// UnaryExpression // Case CastExpressionUnary
992// | '(' TypeName ')' CastExpression // Case CastExpressionCast
993type CastExpression struct {
994 Operand Operand
995 IsSideEffectsFree bool
996 Case CastExpressionCase `PrettyPrint:"stringer,zero"`
997 CastExpression *CastExpression
998 Token Token
999 Token2 Token
1000 TypeName *TypeName
1001 UnaryExpression *UnaryExpression
1002}
1003
1004// String implements fmt.Stringer.
1005func (n *CastExpression) String() string { return PrettyString(n) }
1006
1007// Position reports the position of the first component of n, if available.
1008func (n *CastExpression) Position() (r token.Position) {
1009 if n == nil {
1010 return r
1011 }
1012
1013 switch n.Case {
1014 case 1:
1015 if p := n.Token.Position(); p.IsValid() {
1016 return p
1017 }
1018
1019 if p := n.TypeName.Position(); p.IsValid() {
1020 return p
1021 }
1022
1023 if p := n.Token2.Position(); p.IsValid() {
1024 return p
1025 }
1026
1027 return n.CastExpression.Position()
1028 case 0:
1029 return n.UnaryExpression.Position()
1030 default:
1031 panic("internal error")
1032 }
1033}
1034
1035// CompoundStatement represents data reduced by production:
1036//
1037// CompoundStatement:
1038// '{' BlockItemList '}'
1039type CompoundStatement struct {
1040 Operand Operand
1041 children []*CompoundStatement
1042 declarations []*Declaration
1043 isJumpTarget bool
1044 labeledStmts []*LabeledStatement
1045 parent *CompoundStatement
1046 scope Scope
1047 BlockItemList *BlockItemList
1048 Token Token
1049 Token2 Token
1050}
1051
1052// String implements fmt.Stringer.
1053func (n *CompoundStatement) String() string { return PrettyString(n) }
1054
1055// Position reports the position of the first component of n, if available.
1056func (n *CompoundStatement) Position() (r token.Position) {
1057 if n == nil {
1058 return r
1059 }
1060
1061 if p := n.Token.Position(); p.IsValid() {
1062 return p
1063 }
1064
1065 if p := n.BlockItemList.Position(); p.IsValid() {
1066 return p
1067 }
1068
1069 return n.Token2.Position()
1070}
1071
1072// ConditionalExpressionCase represents case numbers of production ConditionalExpression
1073type ConditionalExpressionCase int
1074
1075// Values of type ConditionalExpressionCase
1076const (
1077 ConditionalExpressionLOr ConditionalExpressionCase = iota
1078 ConditionalExpressionCond
1079)
1080
1081// String implements fmt.Stringer
1082func (n ConditionalExpressionCase) String() string {
1083 switch n {
1084 case ConditionalExpressionLOr:
1085 return "ConditionalExpressionLOr"
1086 case ConditionalExpressionCond:
1087 return "ConditionalExpressionCond"
1088 default:
1089 return fmt.Sprintf("ConditionalExpressionCase(%v)", int(n))
1090 }
1091}
1092
1093// ConditionalExpression represents data reduced by productions:
1094//
1095// ConditionalExpression:
1096// LogicalOrExpression // Case ConditionalExpressionLOr
1097// | LogicalOrExpression '?' Expression ':' ConditionalExpression // Case ConditionalExpressionCond
1098type ConditionalExpression struct {
1099 Operand Operand
1100 IsSideEffectsFree bool
1101 Case ConditionalExpressionCase `PrettyPrint:"stringer,zero"`
1102 ConditionalExpression *ConditionalExpression
1103 Expression *Expression
1104 LogicalOrExpression *LogicalOrExpression
1105 Token Token
1106 Token2 Token
1107}
1108
1109// String implements fmt.Stringer.
1110func (n *ConditionalExpression) String() string { return PrettyString(n) }
1111
1112// Position reports the position of the first component of n, if available.
1113func (n *ConditionalExpression) Position() (r token.Position) {
1114 if n == nil {
1115 return r
1116 }
1117
1118 switch n.Case {
1119 case 0:
1120 return n.LogicalOrExpression.Position()
1121 case 1:
1122 if p := n.LogicalOrExpression.Position(); p.IsValid() {
1123 return p
1124 }
1125
1126 if p := n.Token.Position(); p.IsValid() {
1127 return p
1128 }
1129
1130 if p := n.Expression.Position(); p.IsValid() {
1131 return p
1132 }
1133
1134 if p := n.Token2.Position(); p.IsValid() {
1135 return p
1136 }
1137
1138 return n.ConditionalExpression.Position()
1139 default:
1140 panic("internal error")
1141 }
1142}
1143
1144// ConstantExpression represents data reduced by production:
1145//
1146// ConstantExpression:
1147// ConditionalExpression
1148type ConstantExpression struct {
1149 Operand Operand
1150 ConditionalExpression *ConditionalExpression
1151}
1152
1153// String implements fmt.Stringer.
1154func (n *ConstantExpression) String() string { return PrettyString(n) }
1155
1156// Position reports the position of the first component of n, if available.
1157func (n *ConstantExpression) Position() (r token.Position) {
1158 if n == nil {
1159 return r
1160 }
1161
1162 return n.ConditionalExpression.Position()
1163}
1164
1165// Declaration represents data reduced by production:
1166//
1167// Declaration:
1168// DeclarationSpecifiers InitDeclaratorList ';'
1169type Declaration struct {
1170 DeclarationSpecifiers *DeclarationSpecifiers
1171 InitDeclaratorList *InitDeclaratorList
1172 Token Token
1173}
1174
1175// String implements fmt.Stringer.
1176func (n *Declaration) String() string { return PrettyString(n) }
1177
1178// Position reports the position of the first component of n, if available.
1179func (n *Declaration) Position() (r token.Position) {
1180 if n == nil {
1181 return r
1182 }
1183
1184 if p := n.DeclarationSpecifiers.Position(); p.IsValid() {
1185 return p
1186 }
1187
1188 if p := n.InitDeclaratorList.Position(); p.IsValid() {
1189 return p
1190 }
1191
1192 return n.Token.Position()
1193}
1194
1195// DeclarationList represents data reduced by productions:
1196//
1197// DeclarationList:
1198// Declaration
1199// | DeclarationList Declaration
1200type DeclarationList struct {
1201 Declaration *Declaration
1202 DeclarationList *DeclarationList
1203}
1204
1205// String implements fmt.Stringer.
1206func (n *DeclarationList) String() string { return PrettyString(n) }
1207
1208// Position reports the position of the first component of n, if available.
1209func (n *DeclarationList) Position() (r token.Position) {
1210 if n == nil {
1211 return r
1212 }
1213
1214 return n.Declaration.Position()
1215}
1216
1217// DeclarationSpecifiersCase represents case numbers of production DeclarationSpecifiers
1218type DeclarationSpecifiersCase int
1219
1220// Values of type DeclarationSpecifiersCase
1221const (
1222 DeclarationSpecifiersStorage DeclarationSpecifiersCase = iota
1223 DeclarationSpecifiersTypeSpec
1224 DeclarationSpecifiersTypeQual
1225 DeclarationSpecifiersFunc
1226 DeclarationSpecifiersAlignSpec
1227 DeclarationSpecifiersAttribute
1228)
1229
1230// String implements fmt.Stringer
1231func (n DeclarationSpecifiersCase) String() string {
1232 switch n {
1233 case DeclarationSpecifiersStorage:
1234 return "DeclarationSpecifiersStorage"
1235 case DeclarationSpecifiersTypeSpec:
1236 return "DeclarationSpecifiersTypeSpec"
1237 case DeclarationSpecifiersTypeQual:
1238 return "DeclarationSpecifiersTypeQual"
1239 case DeclarationSpecifiersFunc:
1240 return "DeclarationSpecifiersFunc"
1241 case DeclarationSpecifiersAlignSpec:
1242 return "DeclarationSpecifiersAlignSpec"
1243 case DeclarationSpecifiersAttribute:
1244 return "DeclarationSpecifiersAttribute"
1245 default:
1246 return fmt.Sprintf("DeclarationSpecifiersCase(%v)", int(n))
1247 }
1248}
1249
1250// DeclarationSpecifiers represents data reduced by productions:
1251//
1252// DeclarationSpecifiers:
1253// StorageClassSpecifier DeclarationSpecifiers // Case DeclarationSpecifiersStorage
1254// | TypeSpecifier DeclarationSpecifiers // Case DeclarationSpecifiersTypeSpec
1255// | TypeQualifier DeclarationSpecifiers // Case DeclarationSpecifiersTypeQual
1256// | FunctionSpecifier DeclarationSpecifiers // Case DeclarationSpecifiersFunc
1257// | AlignmentSpecifier DeclarationSpecifiers // Case DeclarationSpecifiersAlignSpec
1258// | AttributeSpecifier DeclarationSpecifiers // Case DeclarationSpecifiersAttribute
1259type DeclarationSpecifiers struct {
1260 class storageClass
1261 AlignmentSpecifier *AlignmentSpecifier
1262 AttributeSpecifier *AttributeSpecifier
1263 Case DeclarationSpecifiersCase `PrettyPrint:"stringer,zero"`
1264 DeclarationSpecifiers *DeclarationSpecifiers
1265 FunctionSpecifier *FunctionSpecifier
1266 StorageClassSpecifier *StorageClassSpecifier
1267 TypeQualifier *TypeQualifier
1268 TypeSpecifier *TypeSpecifier
1269}
1270
1271// String implements fmt.Stringer.
1272func (n *DeclarationSpecifiers) String() string { return PrettyString(n) }
1273
1274// Position reports the position of the first component of n, if available.
1275func (n *DeclarationSpecifiers) Position() (r token.Position) {
1276 if n == nil {
1277 return r
1278 }
1279
1280 switch n.Case {
1281 case 4:
1282 if p := n.AlignmentSpecifier.Position(); p.IsValid() {
1283 return p
1284 }
1285
1286 return n.DeclarationSpecifiers.Position()
1287 case 5:
1288 if p := n.AttributeSpecifier.Position(); p.IsValid() {
1289 return p
1290 }
1291
1292 return n.DeclarationSpecifiers.Position()
1293 case 3:
1294 if p := n.FunctionSpecifier.Position(); p.IsValid() {
1295 return p
1296 }
1297
1298 return n.DeclarationSpecifiers.Position()
1299 case 0:
1300 if p := n.StorageClassSpecifier.Position(); p.IsValid() {
1301 return p
1302 }
1303
1304 return n.DeclarationSpecifiers.Position()
1305 case 2:
1306 if p := n.TypeQualifier.Position(); p.IsValid() {
1307 return p
1308 }
1309
1310 return n.DeclarationSpecifiers.Position()
1311 case 1:
1312 if p := n.TypeSpecifier.Position(); p.IsValid() {
1313 return p
1314 }
1315
1316 return n.DeclarationSpecifiers.Position()
1317 default:
1318 panic("internal error")
1319 }
1320}
1321
1322// Declarator represents data reduced by production:
1323//
1324// Declarator:
1325// Pointer DirectDeclarator AttributeSpecifierList
1326type Declarator struct {
1327 Linkage Linkage
1328 Read int
1329 StorageClass StorageClass
1330 Write int
1331 funcDefinition *FunctionDefinition
1332 lhs map[*Declarator]struct{}
1333 td typeDescriptor
1334 typ Type
1335 AddressTaken bool
1336 IsParameter bool
1337 IsTypedefName bool
1338 SubjectOfAsgnOp bool
1339 SubjectOfIncDec bool
1340 called bool
1341 fnDef bool
1342 hasInitializer bool
1343 implicit bool
1344 AttributeSpecifierList *AttributeSpecifierList
1345 DirectDeclarator *DirectDeclarator
1346 Pointer *Pointer
1347}
1348
1349// String implements fmt.Stringer.
1350func (n *Declarator) String() string { return PrettyString(n) }
1351
1352// Position reports the position of the first component of n, if available.
1353func (n *Declarator) Position() (r token.Position) {
1354 if n == nil {
1355 return r
1356 }
1357
1358 if p := n.Pointer.Position(); p.IsValid() {
1359 return p
1360 }
1361
1362 if p := n.DirectDeclarator.Position(); p.IsValid() {
1363 return p
1364 }
1365
1366 return n.AttributeSpecifierList.Position()
1367}
1368
1369// Designation represents data reduced by production:
1370//
1371// Designation:
1372// DesignatorList '='
1373type Designation struct {
1374 DesignatorList *DesignatorList
1375 Token Token
1376}
1377
1378// String implements fmt.Stringer.
1379func (n *Designation) String() string { return PrettyString(n) }
1380
1381// Position reports the position of the first component of n, if available.
1382func (n *Designation) Position() (r token.Position) {
1383 if n == nil {
1384 return r
1385 }
1386
1387 if p := n.DesignatorList.Position(); p.IsValid() {
1388 return p
1389 }
1390
1391 return n.Token.Position()
1392}
1393
1394// DesignatorCase represents case numbers of production Designator
1395type DesignatorCase int
1396
1397// Values of type DesignatorCase
1398const (
1399 DesignatorIndex DesignatorCase = iota
1400 DesignatorField
1401 DesignatorField2
1402)
1403
1404// String implements fmt.Stringer
1405func (n DesignatorCase) String() string {
1406 switch n {
1407 case DesignatorIndex:
1408 return "DesignatorIndex"
1409 case DesignatorField:
1410 return "DesignatorField"
1411 case DesignatorField2:
1412 return "DesignatorField2"
1413 default:
1414 return fmt.Sprintf("DesignatorCase(%v)", int(n))
1415 }
1416}
1417
1418// Designator represents data reduced by productions:
1419//
1420// Designator:
1421// '[' ConstantExpression ']' // Case DesignatorIndex
1422// | '.' IDENTIFIER // Case DesignatorField
1423// | IDENTIFIER ':' // Case DesignatorField2
1424type Designator struct {
1425 lexicalScope Scope
1426 Case DesignatorCase `PrettyPrint:"stringer,zero"`
1427 ConstantExpression *ConstantExpression
1428 Token Token
1429 Token2 Token
1430}
1431
1432// String implements fmt.Stringer.
1433func (n *Designator) String() string { return PrettyString(n) }
1434
1435// Position reports the position of the first component of n, if available.
1436func (n *Designator) Position() (r token.Position) {
1437 if n == nil {
1438 return r
1439 }
1440
1441 switch n.Case {
1442 case 0:
1443 if p := n.Token.Position(); p.IsValid() {
1444 return p
1445 }
1446
1447 if p := n.ConstantExpression.Position(); p.IsValid() {
1448 return p
1449 }
1450
1451 return n.Token2.Position()
1452 case 1, 2:
1453 if p := n.Token.Position(); p.IsValid() {
1454 return p
1455 }
1456
1457 return n.Token2.Position()
1458 default:
1459 panic("internal error")
1460 }
1461}
1462
1463// DesignatorList represents data reduced by productions:
1464//
1465// DesignatorList:
1466// Designator
1467// | DesignatorList Designator
1468type DesignatorList struct {
1469 Designator *Designator
1470 DesignatorList *DesignatorList
1471}
1472
1473// String implements fmt.Stringer.
1474func (n *DesignatorList) String() string { return PrettyString(n) }
1475
1476// Position reports the position of the first component of n, if available.
1477func (n *DesignatorList) Position() (r token.Position) {
1478 if n == nil {
1479 return r
1480 }
1481
1482 return n.Designator.Position()
1483}
1484
1485// DirectAbstractDeclaratorCase represents case numbers of production DirectAbstractDeclarator
1486type DirectAbstractDeclaratorCase int
1487
1488// Values of type DirectAbstractDeclaratorCase
1489const (
1490 DirectAbstractDeclaratorDecl DirectAbstractDeclaratorCase = iota
1491 DirectAbstractDeclaratorArr
1492 DirectAbstractDeclaratorStaticArr
1493 DirectAbstractDeclaratorArrStatic
1494 DirectAbstractDeclaratorArrStar
1495 DirectAbstractDeclaratorFunc
1496)
1497
1498// String implements fmt.Stringer
1499func (n DirectAbstractDeclaratorCase) String() string {
1500 switch n {
1501 case DirectAbstractDeclaratorDecl:
1502 return "DirectAbstractDeclaratorDecl"
1503 case DirectAbstractDeclaratorArr:
1504 return "DirectAbstractDeclaratorArr"
1505 case DirectAbstractDeclaratorStaticArr:
1506 return "DirectAbstractDeclaratorStaticArr"
1507 case DirectAbstractDeclaratorArrStatic:
1508 return "DirectAbstractDeclaratorArrStatic"
1509 case DirectAbstractDeclaratorArrStar:
1510 return "DirectAbstractDeclaratorArrStar"
1511 case DirectAbstractDeclaratorFunc:
1512 return "DirectAbstractDeclaratorFunc"
1513 default:
1514 return fmt.Sprintf("DirectAbstractDeclaratorCase(%v)", int(n))
1515 }
1516}
1517
1518// DirectAbstractDeclarator represents data reduced by productions:
1519//
1520// DirectAbstractDeclarator:
1521// '(' AbstractDeclarator ')' // Case DirectAbstractDeclaratorDecl
1522// | DirectAbstractDeclarator '[' TypeQualifiers AssignmentExpression ']' // Case DirectAbstractDeclaratorArr
1523// | DirectAbstractDeclarator '[' "static" TypeQualifiers AssignmentExpression ']' // Case DirectAbstractDeclaratorStaticArr
1524// | DirectAbstractDeclarator '[' TypeQualifiers "static" AssignmentExpression ']' // Case DirectAbstractDeclaratorArrStatic
1525// | DirectAbstractDeclarator '[' '*' ']' // Case DirectAbstractDeclaratorArrStar
1526// | DirectAbstractDeclarator '(' ParameterTypeList ')' // Case DirectAbstractDeclaratorFunc
1527type DirectAbstractDeclarator struct {
1528 paramScope Scope
1529 typeQualifiers *typeBase
1530 AbstractDeclarator *AbstractDeclarator
1531 AssignmentExpression *AssignmentExpression
1532 Case DirectAbstractDeclaratorCase `PrettyPrint:"stringer,zero"`
1533 DirectAbstractDeclarator *DirectAbstractDeclarator
1534 ParameterTypeList *ParameterTypeList
1535 Token Token
1536 Token2 Token
1537 Token3 Token
1538 TypeQualifiers *TypeQualifiers
1539}
1540
1541// String implements fmt.Stringer.
1542func (n *DirectAbstractDeclarator) String() string { return PrettyString(n) }
1543
1544// Position reports the position of the first component of n, if available.
1545func (n *DirectAbstractDeclarator) Position() (r token.Position) {
1546 if n == nil {
1547 return r
1548 }
1549
1550 switch n.Case {
1551 case 5:
1552 if p := n.DirectAbstractDeclarator.Position(); p.IsValid() {
1553 return p
1554 }
1555
1556 if p := n.Token.Position(); p.IsValid() {
1557 return p
1558 }
1559
1560 if p := n.ParameterTypeList.Position(); p.IsValid() {
1561 return p
1562 }
1563
1564 return n.Token2.Position()
1565 case 4:
1566 if p := n.DirectAbstractDeclarator.Position(); p.IsValid() {
1567 return p
1568 }
1569
1570 if p := n.Token.Position(); p.IsValid() {
1571 return p
1572 }
1573
1574 if p := n.Token2.Position(); p.IsValid() {
1575 return p
1576 }
1577
1578 return n.Token3.Position()
1579 case 2:
1580 if p := n.DirectAbstractDeclarator.Position(); p.IsValid() {
1581 return p
1582 }
1583
1584 if p := n.Token.Position(); p.IsValid() {
1585 return p
1586 }
1587
1588 if p := n.Token2.Position(); p.IsValid() {
1589 return p
1590 }
1591
1592 if p := n.TypeQualifiers.Position(); p.IsValid() {
1593 return p
1594 }
1595
1596 if p := n.AssignmentExpression.Position(); p.IsValid() {
1597 return p
1598 }
1599
1600 return n.Token3.Position()
1601 case 1:
1602 if p := n.DirectAbstractDeclarator.Position(); p.IsValid() {
1603 return p
1604 }
1605
1606 if p := n.Token.Position(); p.IsValid() {
1607 return p
1608 }
1609
1610 if p := n.TypeQualifiers.Position(); p.IsValid() {
1611 return p
1612 }
1613
1614 if p := n.AssignmentExpression.Position(); p.IsValid() {
1615 return p
1616 }
1617
1618 return n.Token2.Position()
1619 case 3:
1620 if p := n.DirectAbstractDeclarator.Position(); p.IsValid() {
1621 return p
1622 }
1623
1624 if p := n.Token.Position(); p.IsValid() {
1625 return p
1626 }
1627
1628 if p := n.TypeQualifiers.Position(); p.IsValid() {
1629 return p
1630 }
1631
1632 if p := n.Token2.Position(); p.IsValid() {
1633 return p
1634 }
1635
1636 if p := n.AssignmentExpression.Position(); p.IsValid() {
1637 return p
1638 }
1639
1640 return n.Token3.Position()
1641 case 0:
1642 if p := n.Token.Position(); p.IsValid() {
1643 return p
1644 }
1645
1646 if p := n.AbstractDeclarator.Position(); p.IsValid() {
1647 return p
1648 }
1649
1650 return n.Token2.Position()
1651 default:
1652 panic("internal error")
1653 }
1654}
1655
1656// DirectDeclaratorCase represents case numbers of production DirectDeclarator
1657type DirectDeclaratorCase int
1658
1659// Values of type DirectDeclaratorCase
1660const (
1661 DirectDeclaratorIdent DirectDeclaratorCase = iota
1662 DirectDeclaratorDecl
1663 DirectDeclaratorArr
1664 DirectDeclaratorStaticArr
1665 DirectDeclaratorArrStatic
1666 DirectDeclaratorStar
1667 DirectDeclaratorFuncParam
1668 DirectDeclaratorFuncIdent
1669)
1670
1671// String implements fmt.Stringer
1672func (n DirectDeclaratorCase) String() string {
1673 switch n {
1674 case DirectDeclaratorIdent:
1675 return "DirectDeclaratorIdent"
1676 case DirectDeclaratorDecl:
1677 return "DirectDeclaratorDecl"
1678 case DirectDeclaratorArr:
1679 return "DirectDeclaratorArr"
1680 case DirectDeclaratorStaticArr:
1681 return "DirectDeclaratorStaticArr"
1682 case DirectDeclaratorArrStatic:
1683 return "DirectDeclaratorArrStatic"
1684 case DirectDeclaratorStar:
1685 return "DirectDeclaratorStar"
1686 case DirectDeclaratorFuncParam:
1687 return "DirectDeclaratorFuncParam"
1688 case DirectDeclaratorFuncIdent:
1689 return "DirectDeclaratorFuncIdent"
1690 default:
1691 return fmt.Sprintf("DirectDeclaratorCase(%v)", int(n))
1692 }
1693}
1694
1695// DirectDeclarator represents data reduced by productions:
1696//
1697// DirectDeclarator:
1698// IDENTIFIER Asm // Case DirectDeclaratorIdent
1699// | '(' AttributeSpecifierList Declarator ')' // Case DirectDeclaratorDecl
1700// | DirectDeclarator '[' TypeQualifiers AssignmentExpression ']' // Case DirectDeclaratorArr
1701// | DirectDeclarator '[' "static" TypeQualifiers AssignmentExpression ']' // Case DirectDeclaratorStaticArr
1702// | DirectDeclarator '[' TypeQualifiers "static" AssignmentExpression ']' // Case DirectDeclaratorArrStatic
1703// | DirectDeclarator '[' TypeQualifiers '*' ']' // Case DirectDeclaratorStar
1704// | DirectDeclarator '(' ParameterTypeList ')' // Case DirectDeclaratorFuncParam
1705// | DirectDeclarator '(' IdentifierList ')' // Case DirectDeclaratorFuncIdent
1706type DirectDeclarator struct {
1707 lexicalScope Scope
1708 paramScope Scope
1709 typeQualifiers *typeBase
1710 idListNoDeclList bool
1711 Asm *Asm
1712 AssignmentExpression *AssignmentExpression
1713 AttributeSpecifierList *AttributeSpecifierList
1714 Case DirectDeclaratorCase `PrettyPrint:"stringer,zero"`
1715 Declarator *Declarator
1716 DirectDeclarator *DirectDeclarator
1717 IdentifierList *IdentifierList
1718 ParameterTypeList *ParameterTypeList
1719 Token Token
1720 Token2 Token
1721 Token3 Token
1722 TypeQualifiers *TypeQualifiers
1723}
1724
1725// String implements fmt.Stringer.
1726func (n *DirectDeclarator) String() string { return PrettyString(n) }
1727
1728// Position reports the position of the first component of n, if available.
1729func (n *DirectDeclarator) Position() (r token.Position) {
1730 if n == nil {
1731 return r
1732 }
1733
1734 switch n.Case {
1735 case 7:
1736 if p := n.DirectDeclarator.Position(); p.IsValid() {
1737 return p
1738 }
1739
1740 if p := n.Token.Position(); p.IsValid() {
1741 return p
1742 }
1743
1744 if p := n.IdentifierList.Position(); p.IsValid() {
1745 return p
1746 }
1747
1748 return n.Token2.Position()
1749 case 6:
1750 if p := n.DirectDeclarator.Position(); p.IsValid() {
1751 return p
1752 }
1753
1754 if p := n.Token.Position(); p.IsValid() {
1755 return p
1756 }
1757
1758 if p := n.ParameterTypeList.Position(); p.IsValid() {
1759 return p
1760 }
1761
1762 return n.Token2.Position()
1763 case 3:
1764 if p := n.DirectDeclarator.Position(); p.IsValid() {
1765 return p
1766 }
1767
1768 if p := n.Token.Position(); p.IsValid() {
1769 return p
1770 }
1771
1772 if p := n.Token2.Position(); p.IsValid() {
1773 return p
1774 }
1775
1776 if p := n.TypeQualifiers.Position(); p.IsValid() {
1777 return p
1778 }
1779
1780 if p := n.AssignmentExpression.Position(); p.IsValid() {
1781 return p
1782 }
1783
1784 return n.Token3.Position()
1785 case 2:
1786 if p := n.DirectDeclarator.Position(); p.IsValid() {
1787 return p
1788 }
1789
1790 if p := n.Token.Position(); p.IsValid() {
1791 return p
1792 }
1793
1794 if p := n.TypeQualifiers.Position(); p.IsValid() {
1795 return p
1796 }
1797
1798 if p := n.AssignmentExpression.Position(); p.IsValid() {
1799 return p
1800 }
1801
1802 return n.Token2.Position()
1803 case 4:
1804 if p := n.DirectDeclarator.Position(); p.IsValid() {
1805 return p
1806 }
1807
1808 if p := n.Token.Position(); p.IsValid() {
1809 return p
1810 }
1811
1812 if p := n.TypeQualifiers.Position(); p.IsValid() {
1813 return p
1814 }
1815
1816 if p := n.Token2.Position(); p.IsValid() {
1817 return p
1818 }
1819
1820 if p := n.AssignmentExpression.Position(); p.IsValid() {
1821 return p
1822 }
1823
1824 return n.Token3.Position()
1825 case 5:
1826 if p := n.DirectDeclarator.Position(); p.IsValid() {
1827 return p
1828 }
1829
1830 if p := n.Token.Position(); p.IsValid() {
1831 return p
1832 }
1833
1834 if p := n.TypeQualifiers.Position(); p.IsValid() {
1835 return p
1836 }
1837
1838 if p := n.Token2.Position(); p.IsValid() {
1839 return p
1840 }
1841
1842 return n.Token3.Position()
1843 case 0:
1844 if p := n.Token.Position(); p.IsValid() {
1845 return p
1846 }
1847
1848 return n.Asm.Position()
1849 case 1:
1850 if p := n.Token.Position(); p.IsValid() {
1851 return p
1852 }
1853
1854 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
1855 return p
1856 }
1857
1858 if p := n.Declarator.Position(); p.IsValid() {
1859 return p
1860 }
1861
1862 return n.Token2.Position()
1863 default:
1864 panic("internal error")
1865 }
1866}
1867
1868// EnumSpecifierCase represents case numbers of production EnumSpecifier
1869type EnumSpecifierCase int
1870
1871// Values of type EnumSpecifierCase
1872const (
1873 EnumSpecifierDef EnumSpecifierCase = iota
1874 EnumSpecifierTag
1875)
1876
1877// String implements fmt.Stringer
1878func (n EnumSpecifierCase) String() string {
1879 switch n {
1880 case EnumSpecifierDef:
1881 return "EnumSpecifierDef"
1882 case EnumSpecifierTag:
1883 return "EnumSpecifierTag"
1884 default:
1885 return fmt.Sprintf("EnumSpecifierCase(%v)", int(n))
1886 }
1887}
1888
1889// EnumSpecifier represents data reduced by productions:
1890//
1891// EnumSpecifier:
1892// "enum" AttributeSpecifierList IDENTIFIER '{' EnumeratorList ',' '}' // Case EnumSpecifierDef
1893// | "enum" AttributeSpecifierList IDENTIFIER // Case EnumSpecifierTag
1894type EnumSpecifier struct {
1895 lexicalScope Scope
1896 typ Type
1897 min Value
1898 max Value
1899 AttributeSpecifierList *AttributeSpecifierList
1900 Case EnumSpecifierCase `PrettyPrint:"stringer,zero"`
1901 EnumeratorList *EnumeratorList
1902 Token Token
1903 Token2 Token
1904 Token3 Token
1905 Token4 Token
1906 Token5 Token
1907}
1908
1909// String implements fmt.Stringer.
1910func (n *EnumSpecifier) String() string { return PrettyString(n) }
1911
1912// Position reports the position of the first component of n, if available.
1913func (n *EnumSpecifier) Position() (r token.Position) {
1914 if n == nil {
1915 return r
1916 }
1917
1918 switch n.Case {
1919 case 1:
1920 if p := n.Token.Position(); p.IsValid() {
1921 return p
1922 }
1923
1924 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
1925 return p
1926 }
1927
1928 return n.Token2.Position()
1929 case 0:
1930 if p := n.Token.Position(); p.IsValid() {
1931 return p
1932 }
1933
1934 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
1935 return p
1936 }
1937
1938 if p := n.Token2.Position(); p.IsValid() {
1939 return p
1940 }
1941
1942 if p := n.Token3.Position(); p.IsValid() {
1943 return p
1944 }
1945
1946 if p := n.EnumeratorList.Position(); p.IsValid() {
1947 return p
1948 }
1949
1950 if p := n.Token4.Position(); p.IsValid() {
1951 return p
1952 }
1953
1954 return n.Token5.Position()
1955 default:
1956 panic("internal error")
1957 }
1958}
1959
1960// EnumeratorCase represents case numbers of production Enumerator
1961type EnumeratorCase int
1962
1963// Values of type EnumeratorCase
1964const (
1965 EnumeratorIdent EnumeratorCase = iota
1966 EnumeratorExpr
1967)
1968
1969// String implements fmt.Stringer
1970func (n EnumeratorCase) String() string {
1971 switch n {
1972 case EnumeratorIdent:
1973 return "EnumeratorIdent"
1974 case EnumeratorExpr:
1975 return "EnumeratorExpr"
1976 default:
1977 return fmt.Sprintf("EnumeratorCase(%v)", int(n))
1978 }
1979}
1980
1981// Enumerator represents data reduced by productions:
1982//
1983// Enumerator:
1984// IDENTIFIER AttributeSpecifierList // Case EnumeratorIdent
1985// | IDENTIFIER AttributeSpecifierList '=' ConstantExpression // Case EnumeratorExpr
1986type Enumerator struct {
1987 lexicalScope Scope
1988 Operand Operand
1989 AttributeSpecifierList *AttributeSpecifierList
1990 Case EnumeratorCase `PrettyPrint:"stringer,zero"`
1991 ConstantExpression *ConstantExpression
1992 Token Token
1993 Token2 Token
1994}
1995
1996// String implements fmt.Stringer.
1997func (n *Enumerator) String() string { return PrettyString(n) }
1998
1999// Position reports the position of the first component of n, if available.
2000func (n *Enumerator) Position() (r token.Position) {
2001 if n == nil {
2002 return r
2003 }
2004
2005 switch n.Case {
2006 case 0:
2007 if p := n.Token.Position(); p.IsValid() {
2008 return p
2009 }
2010
2011 return n.AttributeSpecifierList.Position()
2012 case 1:
2013 if p := n.Token.Position(); p.IsValid() {
2014 return p
2015 }
2016
2017 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
2018 return p
2019 }
2020
2021 if p := n.Token2.Position(); p.IsValid() {
2022 return p
2023 }
2024
2025 return n.ConstantExpression.Position()
2026 default:
2027 panic("internal error")
2028 }
2029}
2030
2031// EnumeratorList represents data reduced by productions:
2032//
2033// EnumeratorList:
2034// Enumerator
2035// | EnumeratorList ',' Enumerator
2036type EnumeratorList struct {
2037 Enumerator *Enumerator
2038 EnumeratorList *EnumeratorList
2039 Token Token
2040}
2041
2042// String implements fmt.Stringer.
2043func (n *EnumeratorList) String() string { return PrettyString(n) }
2044
2045// Position reports the position of the first component of n, if available.
2046func (n *EnumeratorList) Position() (r token.Position) {
2047 if n == nil {
2048 return r
2049 }
2050
2051 return n.Enumerator.Position()
2052}
2053
2054// EqualityExpressionCase represents case numbers of production EqualityExpression
2055type EqualityExpressionCase int
2056
2057// Values of type EqualityExpressionCase
2058const (
2059 EqualityExpressionRel EqualityExpressionCase = iota
2060 EqualityExpressionEq
2061 EqualityExpressionNeq
2062)
2063
2064// String implements fmt.Stringer
2065func (n EqualityExpressionCase) String() string {
2066 switch n {
2067 case EqualityExpressionRel:
2068 return "EqualityExpressionRel"
2069 case EqualityExpressionEq:
2070 return "EqualityExpressionEq"
2071 case EqualityExpressionNeq:
2072 return "EqualityExpressionNeq"
2073 default:
2074 return fmt.Sprintf("EqualityExpressionCase(%v)", int(n))
2075 }
2076}
2077
2078// EqualityExpression represents data reduced by productions:
2079//
2080// EqualityExpression:
2081// RelationalExpression // Case EqualityExpressionRel
2082// | EqualityExpression "==" RelationalExpression // Case EqualityExpressionEq
2083// | EqualityExpression "!=" RelationalExpression // Case EqualityExpressionNeq
2084type EqualityExpression struct {
2085 Operand Operand
2086 promote Type
2087 IsSideEffectsFree bool
2088 Case EqualityExpressionCase `PrettyPrint:"stringer,zero"`
2089 EqualityExpression *EqualityExpression
2090 RelationalExpression *RelationalExpression
2091 Token Token
2092}
2093
2094// String implements fmt.Stringer.
2095func (n *EqualityExpression) String() string { return PrettyString(n) }
2096
2097// Position reports the position of the first component of n, if available.
2098func (n *EqualityExpression) Position() (r token.Position) {
2099 if n == nil {
2100 return r
2101 }
2102
2103 switch n.Case {
2104 case 1, 2:
2105 if p := n.EqualityExpression.Position(); p.IsValid() {
2106 return p
2107 }
2108
2109 if p := n.Token.Position(); p.IsValid() {
2110 return p
2111 }
2112
2113 return n.RelationalExpression.Position()
2114 case 0:
2115 return n.RelationalExpression.Position()
2116 default:
2117 panic("internal error")
2118 }
2119}
2120
2121// ExclusiveOrExpressionCase represents case numbers of production ExclusiveOrExpression
2122type ExclusiveOrExpressionCase int
2123
2124// Values of type ExclusiveOrExpressionCase
2125const (
2126 ExclusiveOrExpressionAnd ExclusiveOrExpressionCase = iota
2127 ExclusiveOrExpressionXor
2128)
2129
2130// String implements fmt.Stringer
2131func (n ExclusiveOrExpressionCase) String() string {
2132 switch n {
2133 case ExclusiveOrExpressionAnd:
2134 return "ExclusiveOrExpressionAnd"
2135 case ExclusiveOrExpressionXor:
2136 return "ExclusiveOrExpressionXor"
2137 default:
2138 return fmt.Sprintf("ExclusiveOrExpressionCase(%v)", int(n))
2139 }
2140}
2141
2142// ExclusiveOrExpression represents data reduced by productions:
2143//
2144// ExclusiveOrExpression:
2145// AndExpression // Case ExclusiveOrExpressionAnd
2146// | ExclusiveOrExpression '^' AndExpression // Case ExclusiveOrExpressionXor
2147type ExclusiveOrExpression struct {
2148 Operand Operand
2149 promote Type
2150 IsSideEffectsFree bool
2151 AndExpression *AndExpression
2152 Case ExclusiveOrExpressionCase `PrettyPrint:"stringer,zero"`
2153 ExclusiveOrExpression *ExclusiveOrExpression
2154 Token Token
2155}
2156
2157// String implements fmt.Stringer.
2158func (n *ExclusiveOrExpression) String() string { return PrettyString(n) }
2159
2160// Position reports the position of the first component of n, if available.
2161func (n *ExclusiveOrExpression) Position() (r token.Position) {
2162 if n == nil {
2163 return r
2164 }
2165
2166 switch n.Case {
2167 case 0:
2168 return n.AndExpression.Position()
2169 case 1:
2170 if p := n.ExclusiveOrExpression.Position(); p.IsValid() {
2171 return p
2172 }
2173
2174 if p := n.Token.Position(); p.IsValid() {
2175 return p
2176 }
2177
2178 return n.AndExpression.Position()
2179 default:
2180 panic("internal error")
2181 }
2182}
2183
2184// ExpressionCase represents case numbers of production Expression
2185type ExpressionCase int
2186
2187// Values of type ExpressionCase
2188const (
2189 ExpressionAssign ExpressionCase = iota
2190 ExpressionComma
2191)
2192
2193// String implements fmt.Stringer
2194func (n ExpressionCase) String() string {
2195 switch n {
2196 case ExpressionAssign:
2197 return "ExpressionAssign"
2198 case ExpressionComma:
2199 return "ExpressionComma"
2200 default:
2201 return fmt.Sprintf("ExpressionCase(%v)", int(n))
2202 }
2203}
2204
2205// Expression represents data reduced by productions:
2206//
2207// Expression:
2208// AssignmentExpression // Case ExpressionAssign
2209// | Expression ',' AssignmentExpression // Case ExpressionComma
2210type Expression struct {
2211 Operand Operand
2212 IsSideEffectsFree bool
2213 AssignmentExpression *AssignmentExpression
2214 Case ExpressionCase `PrettyPrint:"stringer,zero"`
2215 Expression *Expression
2216 Token Token
2217}
2218
2219// String implements fmt.Stringer.
2220func (n *Expression) String() string { return PrettyString(n) }
2221
2222// Position reports the position of the first component of n, if available.
2223func (n *Expression) Position() (r token.Position) {
2224 if n == nil {
2225 return r
2226 }
2227
2228 switch n.Case {
2229 case 0:
2230 return n.AssignmentExpression.Position()
2231 case 1:
2232 if p := n.Expression.Position(); p.IsValid() {
2233 return p
2234 }
2235
2236 if p := n.Token.Position(); p.IsValid() {
2237 return p
2238 }
2239
2240 return n.AssignmentExpression.Position()
2241 default:
2242 panic("internal error")
2243 }
2244}
2245
2246// ExpressionList represents data reduced by productions:
2247//
2248// ExpressionList:
2249// AssignmentExpression
2250// | ExpressionList ',' AssignmentExpression
2251type ExpressionList struct {
2252 AssignmentExpression *AssignmentExpression
2253 ExpressionList *ExpressionList
2254 Token Token
2255}
2256
2257// String implements fmt.Stringer.
2258func (n *ExpressionList) String() string { return PrettyString(n) }
2259
2260// Position reports the position of the first component of n, if available.
2261func (n *ExpressionList) Position() (r token.Position) {
2262 if n == nil {
2263 return r
2264 }
2265
2266 return n.AssignmentExpression.Position()
2267}
2268
2269// ExpressionStatement represents data reduced by production:
2270//
2271// ExpressionStatement:
2272// Expression AttributeSpecifierList ';'
2273type ExpressionStatement struct {
2274 AttributeSpecifierList *AttributeSpecifierList
2275 Expression *Expression
2276 Token Token
2277}
2278
2279// String implements fmt.Stringer.
2280func (n *ExpressionStatement) String() string { return PrettyString(n) }
2281
2282// Position reports the position of the first component of n, if available.
2283func (n *ExpressionStatement) Position() (r token.Position) {
2284 if n == nil {
2285 return r
2286 }
2287
2288 if p := n.Expression.Position(); p.IsValid() {
2289 return p
2290 }
2291
2292 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
2293 return p
2294 }
2295
2296 return n.Token.Position()
2297}
2298
2299// ExternalDeclarationCase represents case numbers of production ExternalDeclaration
2300type ExternalDeclarationCase int
2301
2302// Values of type ExternalDeclarationCase
2303const (
2304 ExternalDeclarationFuncDef ExternalDeclarationCase = iota
2305 ExternalDeclarationDecl
2306 ExternalDeclarationAsm
2307 ExternalDeclarationAsmStmt
2308 ExternalDeclarationEmpty
2309 ExternalDeclarationPragma
2310)
2311
2312// String implements fmt.Stringer
2313func (n ExternalDeclarationCase) String() string {
2314 switch n {
2315 case ExternalDeclarationFuncDef:
2316 return "ExternalDeclarationFuncDef"
2317 case ExternalDeclarationDecl:
2318 return "ExternalDeclarationDecl"
2319 case ExternalDeclarationAsm:
2320 return "ExternalDeclarationAsm"
2321 case ExternalDeclarationAsmStmt:
2322 return "ExternalDeclarationAsmStmt"
2323 case ExternalDeclarationEmpty:
2324 return "ExternalDeclarationEmpty"
2325 case ExternalDeclarationPragma:
2326 return "ExternalDeclarationPragma"
2327 default:
2328 return fmt.Sprintf("ExternalDeclarationCase(%v)", int(n))
2329 }
2330}
2331
2332// ExternalDeclaration represents data reduced by productions:
2333//
2334// ExternalDeclaration:
2335// FunctionDefinition // Case ExternalDeclarationFuncDef
2336// | Declaration // Case ExternalDeclarationDecl
2337// | AsmFunctionDefinition // Case ExternalDeclarationAsm
2338// | AsmStatement // Case ExternalDeclarationAsmStmt
2339// | ';' // Case ExternalDeclarationEmpty
2340// | PragmaSTDC // Case ExternalDeclarationPragma
2341type ExternalDeclaration struct {
2342 AsmFunctionDefinition *AsmFunctionDefinition
2343 AsmStatement *AsmStatement
2344 Case ExternalDeclarationCase `PrettyPrint:"stringer,zero"`
2345 Declaration *Declaration
2346 FunctionDefinition *FunctionDefinition
2347 PragmaSTDC *PragmaSTDC
2348 Token Token
2349}
2350
2351// String implements fmt.Stringer.
2352func (n *ExternalDeclaration) String() string { return PrettyString(n) }
2353
2354// Position reports the position of the first component of n, if available.
2355func (n *ExternalDeclaration) Position() (r token.Position) {
2356 if n == nil {
2357 return r
2358 }
2359
2360 switch n.Case {
2361 case 2:
2362 return n.AsmFunctionDefinition.Position()
2363 case 3:
2364 return n.AsmStatement.Position()
2365 case 1:
2366 return n.Declaration.Position()
2367 case 0:
2368 return n.FunctionDefinition.Position()
2369 case 5:
2370 return n.PragmaSTDC.Position()
2371 case 4:
2372 return n.Token.Position()
2373 default:
2374 panic("internal error")
2375 }
2376}
2377
2378// FunctionDefinition represents data reduced by production:
2379//
2380// FunctionDefinition:
2381// DeclarationSpecifiers Declarator DeclarationList CompoundStatement
2382type FunctionDefinition struct {
2383 CallSiteComplexExpr []*AssignmentExpression
2384 CompositeLiterals []*PostfixExpression
2385 ComputedGotos map[StringID]*UnaryExpression
2386 Gotos map[StringID]*JumpStatement
2387 InitDeclarators []*InitDeclarator
2388 Labels map[StringID]*LabeledStatement
2389 ReturnComplexExpr []*Expression
2390 VLAs []*Declarator
2391 compoundStatements []*CompoundStatement
2392 checked bool
2393 CompoundStatement *CompoundStatement
2394 DeclarationList *DeclarationList
2395 DeclarationSpecifiers *DeclarationSpecifiers
2396 Declarator *Declarator
2397}
2398
2399// String implements fmt.Stringer.
2400func (n *FunctionDefinition) String() string { return PrettyString(n) }
2401
2402// Position reports the position of the first component of n, if available.
2403func (n *FunctionDefinition) Position() (r token.Position) {
2404 if n == nil {
2405 return r
2406 }
2407
2408 if p := n.DeclarationSpecifiers.Position(); p.IsValid() {
2409 return p
2410 }
2411
2412 if p := n.Declarator.Position(); p.IsValid() {
2413 return p
2414 }
2415
2416 if p := n.DeclarationList.Position(); p.IsValid() {
2417 return p
2418 }
2419
2420 return n.CompoundStatement.Position()
2421}
2422
2423// FunctionSpecifierCase represents case numbers of production FunctionSpecifier
2424type FunctionSpecifierCase int
2425
2426// Values of type FunctionSpecifierCase
2427const (
2428 FunctionSpecifierInline FunctionSpecifierCase = iota
2429 FunctionSpecifierNoreturn
2430)
2431
2432// String implements fmt.Stringer
2433func (n FunctionSpecifierCase) String() string {
2434 switch n {
2435 case FunctionSpecifierInline:
2436 return "FunctionSpecifierInline"
2437 case FunctionSpecifierNoreturn:
2438 return "FunctionSpecifierNoreturn"
2439 default:
2440 return fmt.Sprintf("FunctionSpecifierCase(%v)", int(n))
2441 }
2442}
2443
2444// FunctionSpecifier represents data reduced by productions:
2445//
2446// FunctionSpecifier:
2447// "inline" // Case FunctionSpecifierInline
2448// | "_Noreturn" // Case FunctionSpecifierNoreturn
2449type FunctionSpecifier struct {
2450 Case FunctionSpecifierCase `PrettyPrint:"stringer,zero"`
2451 Token Token
2452}
2453
2454// String implements fmt.Stringer.
2455func (n *FunctionSpecifier) String() string { return PrettyString(n) }
2456
2457// Position reports the position of the first component of n, if available.
2458func (n *FunctionSpecifier) Position() (r token.Position) {
2459 if n == nil {
2460 return r
2461 }
2462
2463 return n.Token.Position()
2464}
2465
2466// IdentifierList represents data reduced by productions:
2467//
2468// IdentifierList:
2469// IDENTIFIER
2470// | IdentifierList ',' IDENTIFIER
2471type IdentifierList struct {
2472 lexicalScope Scope
2473 IdentifierList *IdentifierList
2474 Token Token
2475 Token2 Token
2476}
2477
2478// String implements fmt.Stringer.
2479func (n *IdentifierList) String() string { return PrettyString(n) }
2480
2481// Position reports the position of the first component of n, if available.
2482func (n *IdentifierList) Position() (r token.Position) {
2483 if n == nil {
2484 return r
2485 }
2486
2487 return n.Token.Position()
2488}
2489
2490// InclusiveOrExpressionCase represents case numbers of production InclusiveOrExpression
2491type InclusiveOrExpressionCase int
2492
2493// Values of type InclusiveOrExpressionCase
2494const (
2495 InclusiveOrExpressionXor InclusiveOrExpressionCase = iota
2496 InclusiveOrExpressionOr
2497)
2498
2499// String implements fmt.Stringer
2500func (n InclusiveOrExpressionCase) String() string {
2501 switch n {
2502 case InclusiveOrExpressionXor:
2503 return "InclusiveOrExpressionXor"
2504 case InclusiveOrExpressionOr:
2505 return "InclusiveOrExpressionOr"
2506 default:
2507 return fmt.Sprintf("InclusiveOrExpressionCase(%v)", int(n))
2508 }
2509}
2510
2511// InclusiveOrExpression represents data reduced by productions:
2512//
2513// InclusiveOrExpression:
2514// ExclusiveOrExpression // Case InclusiveOrExpressionXor
2515// | InclusiveOrExpression '|' ExclusiveOrExpression // Case InclusiveOrExpressionOr
2516type InclusiveOrExpression struct {
2517 Operand Operand
2518 promote Type
2519 IsSideEffectsFree bool
2520 Case InclusiveOrExpressionCase `PrettyPrint:"stringer,zero"`
2521 ExclusiveOrExpression *ExclusiveOrExpression
2522 InclusiveOrExpression *InclusiveOrExpression
2523 Token Token
2524}
2525
2526// String implements fmt.Stringer.
2527func (n *InclusiveOrExpression) String() string { return PrettyString(n) }
2528
2529// Position reports the position of the first component of n, if available.
2530func (n *InclusiveOrExpression) Position() (r token.Position) {
2531 if n == nil {
2532 return r
2533 }
2534
2535 switch n.Case {
2536 case 0:
2537 return n.ExclusiveOrExpression.Position()
2538 case 1:
2539 if p := n.InclusiveOrExpression.Position(); p.IsValid() {
2540 return p
2541 }
2542
2543 if p := n.Token.Position(); p.IsValid() {
2544 return p
2545 }
2546
2547 return n.ExclusiveOrExpression.Position()
2548 default:
2549 panic("internal error")
2550 }
2551}
2552
2553// InitDeclaratorCase represents case numbers of production InitDeclarator
2554type InitDeclaratorCase int
2555
2556// Values of type InitDeclaratorCase
2557const (
2558 InitDeclaratorDecl InitDeclaratorCase = iota
2559 InitDeclaratorInit
2560)
2561
2562// String implements fmt.Stringer
2563func (n InitDeclaratorCase) String() string {
2564 switch n {
2565 case InitDeclaratorDecl:
2566 return "InitDeclaratorDecl"
2567 case InitDeclaratorInit:
2568 return "InitDeclaratorInit"
2569 default:
2570 return fmt.Sprintf("InitDeclaratorCase(%v)", int(n))
2571 }
2572}
2573
2574// InitDeclarator represents data reduced by productions:
2575//
2576// InitDeclarator:
2577// Declarator AttributeSpecifierList // Case InitDeclaratorDecl
2578// | Declarator AttributeSpecifierList '=' Initializer // Case InitDeclaratorInit
2579type InitDeclarator struct {
2580 initializer *InitializerValue
2581 AttributeSpecifierList *AttributeSpecifierList
2582 Case InitDeclaratorCase `PrettyPrint:"stringer,zero"`
2583 Declarator *Declarator
2584 Initializer *Initializer
2585 Token Token
2586}
2587
2588// String implements fmt.Stringer.
2589func (n *InitDeclarator) String() string { return PrettyString(n) }
2590
2591// Position reports the position of the first component of n, if available.
2592func (n *InitDeclarator) Position() (r token.Position) {
2593 if n == nil {
2594 return r
2595 }
2596
2597 switch n.Case {
2598 case 0:
2599 if p := n.Declarator.Position(); p.IsValid() {
2600 return p
2601 }
2602
2603 return n.AttributeSpecifierList.Position()
2604 case 1:
2605 if p := n.Declarator.Position(); p.IsValid() {
2606 return p
2607 }
2608
2609 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
2610 return p
2611 }
2612
2613 if p := n.Token.Position(); p.IsValid() {
2614 return p
2615 }
2616
2617 return n.Initializer.Position()
2618 default:
2619 panic("internal error")
2620 }
2621}
2622
2623// InitDeclaratorList represents data reduced by productions:
2624//
2625// InitDeclaratorList:
2626// InitDeclarator
2627// | InitDeclaratorList ',' AttributeSpecifierList InitDeclarator
2628type InitDeclaratorList struct {
2629 AttributeSpecifierList *AttributeSpecifierList
2630 InitDeclarator *InitDeclarator
2631 InitDeclaratorList *InitDeclaratorList
2632 Token Token
2633}
2634
2635// String implements fmt.Stringer.
2636func (n *InitDeclaratorList) String() string { return PrettyString(n) }
2637
2638// Position reports the position of the first component of n, if available.
2639func (n *InitDeclaratorList) Position() (r token.Position) {
2640 if n == nil {
2641 return r
2642 }
2643
2644 return n.InitDeclarator.Position()
2645}
2646
2647// InitializerCase represents case numbers of production Initializer
2648type InitializerCase int
2649
2650// Values of type InitializerCase
2651const (
2652 InitializerExpr InitializerCase = iota
2653 InitializerInitList
2654)
2655
2656// String implements fmt.Stringer
2657func (n InitializerCase) String() string {
2658 switch n {
2659 case InitializerExpr:
2660 return "InitializerExpr"
2661 case InitializerInitList:
2662 return "InitializerInitList"
2663 default:
2664 return fmt.Sprintf("InitializerCase(%v)", int(n))
2665 }
2666}
2667
2668// Initializer represents data reduced by productions:
2669//
2670// Initializer:
2671// AssignmentExpression // Case InitializerExpr
2672// | '{' InitializerList ',' '}' // Case InitializerInitList
2673type Initializer struct {
2674 Field Field // Where aplicable
2675 Offset uintptr // Case Expr
2676 field0 Field
2677 list []*Initializer
2678 parent *Initializer
2679 trailingComma *Token
2680 typ Type
2681 isConst bool
2682 isZero bool
2683 AssignmentExpression *AssignmentExpression
2684 Case InitializerCase `PrettyPrint:"stringer,zero"`
2685 InitializerList *InitializerList
2686 Token Token
2687 Token2 Token
2688 Token3 Token
2689}
2690
2691// String implements fmt.Stringer.
2692func (n *Initializer) String() string { return PrettyString(n) }
2693
2694// Position reports the position of the first component of n, if available.
2695func (n *Initializer) Position() (r token.Position) {
2696 if n == nil {
2697 return r
2698 }
2699
2700 switch n.Case {
2701 case 0:
2702 return n.AssignmentExpression.Position()
2703 case 1:
2704 if p := n.Token.Position(); p.IsValid() {
2705 return p
2706 }
2707
2708 if p := n.InitializerList.Position(); p.IsValid() {
2709 return p
2710 }
2711
2712 if p := n.Token2.Position(); p.IsValid() {
2713 return p
2714 }
2715
2716 return n.Token3.Position()
2717 default:
2718 panic("internal error")
2719 }
2720}
2721
2722// InitializerList represents data reduced by productions:
2723//
2724// InitializerList:
2725// Designation Initializer
2726// | InitializerList ',' Designation Initializer
2727type InitializerList struct {
2728 list []*Initializer
2729 isConst bool
2730 isZero bool
2731 Designation *Designation
2732 Initializer *Initializer
2733 InitializerList *InitializerList
2734 Token Token
2735}
2736
2737// String implements fmt.Stringer.
2738func (n *InitializerList) String() string { return PrettyString(n) }
2739
2740// Position reports the position of the first component of n, if available.
2741func (n *InitializerList) Position() (r token.Position) {
2742 if n == nil {
2743 return r
2744 }
2745
2746 if p := n.Designation.Position(); p.IsValid() {
2747 return p
2748 }
2749
2750 return n.Initializer.Position()
2751}
2752
2753// IterationStatementCase represents case numbers of production IterationStatement
2754type IterationStatementCase int
2755
2756// Values of type IterationStatementCase
2757const (
2758 IterationStatementWhile IterationStatementCase = iota
2759 IterationStatementDo
2760 IterationStatementFor
2761 IterationStatementForDecl
2762)
2763
2764// String implements fmt.Stringer
2765func (n IterationStatementCase) String() string {
2766 switch n {
2767 case IterationStatementWhile:
2768 return "IterationStatementWhile"
2769 case IterationStatementDo:
2770 return "IterationStatementDo"
2771 case IterationStatementFor:
2772 return "IterationStatementFor"
2773 case IterationStatementForDecl:
2774 return "IterationStatementForDecl"
2775 default:
2776 return fmt.Sprintf("IterationStatementCase(%v)", int(n))
2777 }
2778}
2779
2780// IterationStatement represents data reduced by productions:
2781//
2782// IterationStatement:
2783// "while" '(' Expression ')' Statement // Case IterationStatementWhile
2784// | "do" Statement "while" '(' Expression ')' ';' // Case IterationStatementDo
2785// | "for" '(' Expression ';' Expression ';' Expression ')' Statement // Case IterationStatementFor
2786// | "for" '(' Declaration Expression ';' Expression ')' Statement // Case IterationStatementForDecl
2787type IterationStatement struct {
2788 Case IterationStatementCase `PrettyPrint:"stringer,zero"`
2789 Declaration *Declaration
2790 Expression *Expression
2791 Expression2 *Expression
2792 Expression3 *Expression
2793 Statement *Statement
2794 Token Token
2795 Token2 Token
2796 Token3 Token
2797 Token4 Token
2798 Token5 Token
2799}
2800
2801// String implements fmt.Stringer.
2802func (n *IterationStatement) String() string { return PrettyString(n) }
2803
2804// Position reports the position of the first component of n, if available.
2805func (n *IterationStatement) Position() (r token.Position) {
2806 if n == nil {
2807 return r
2808 }
2809
2810 switch n.Case {
2811 case 1:
2812 if p := n.Token.Position(); p.IsValid() {
2813 return p
2814 }
2815
2816 if p := n.Statement.Position(); p.IsValid() {
2817 return p
2818 }
2819
2820 if p := n.Token2.Position(); p.IsValid() {
2821 return p
2822 }
2823
2824 if p := n.Token3.Position(); p.IsValid() {
2825 return p
2826 }
2827
2828 if p := n.Expression.Position(); p.IsValid() {
2829 return p
2830 }
2831
2832 if p := n.Token4.Position(); p.IsValid() {
2833 return p
2834 }
2835
2836 return n.Token5.Position()
2837 case 3:
2838 if p := n.Token.Position(); p.IsValid() {
2839 return p
2840 }
2841
2842 if p := n.Token2.Position(); p.IsValid() {
2843 return p
2844 }
2845
2846 if p := n.Declaration.Position(); p.IsValid() {
2847 return p
2848 }
2849
2850 if p := n.Expression.Position(); p.IsValid() {
2851 return p
2852 }
2853
2854 if p := n.Token3.Position(); p.IsValid() {
2855 return p
2856 }
2857
2858 if p := n.Expression2.Position(); p.IsValid() {
2859 return p
2860 }
2861
2862 if p := n.Token4.Position(); p.IsValid() {
2863 return p
2864 }
2865
2866 return n.Statement.Position()
2867 case 2:
2868 if p := n.Token.Position(); p.IsValid() {
2869 return p
2870 }
2871
2872 if p := n.Token2.Position(); p.IsValid() {
2873 return p
2874 }
2875
2876 if p := n.Expression.Position(); p.IsValid() {
2877 return p
2878 }
2879
2880 if p := n.Token3.Position(); p.IsValid() {
2881 return p
2882 }
2883
2884 if p := n.Expression2.Position(); p.IsValid() {
2885 return p
2886 }
2887
2888 if p := n.Token4.Position(); p.IsValid() {
2889 return p
2890 }
2891
2892 if p := n.Expression3.Position(); p.IsValid() {
2893 return p
2894 }
2895
2896 if p := n.Token5.Position(); p.IsValid() {
2897 return p
2898 }
2899
2900 return n.Statement.Position()
2901 case 0:
2902 if p := n.Token.Position(); p.IsValid() {
2903 return p
2904 }
2905
2906 if p := n.Token2.Position(); p.IsValid() {
2907 return p
2908 }
2909
2910 if p := n.Expression.Position(); p.IsValid() {
2911 return p
2912 }
2913
2914 if p := n.Token3.Position(); p.IsValid() {
2915 return p
2916 }
2917
2918 return n.Statement.Position()
2919 default:
2920 panic("internal error")
2921 }
2922}
2923
2924// JumpStatementCase represents case numbers of production JumpStatement
2925type JumpStatementCase int
2926
2927// Values of type JumpStatementCase
2928const (
2929 JumpStatementGoto JumpStatementCase = iota
2930 JumpStatementGotoExpr
2931 JumpStatementContinue
2932 JumpStatementBreak
2933 JumpStatementReturn
2934)
2935
2936// String implements fmt.Stringer
2937func (n JumpStatementCase) String() string {
2938 switch n {
2939 case JumpStatementGoto:
2940 return "JumpStatementGoto"
2941 case JumpStatementGotoExpr:
2942 return "JumpStatementGotoExpr"
2943 case JumpStatementContinue:
2944 return "JumpStatementContinue"
2945 case JumpStatementBreak:
2946 return "JumpStatementBreak"
2947 case JumpStatementReturn:
2948 return "JumpStatementReturn"
2949 default:
2950 return fmt.Sprintf("JumpStatementCase(%v)", int(n))
2951 }
2952}
2953
2954// JumpStatement represents data reduced by productions:
2955//
2956// JumpStatement:
2957// "goto" IDENTIFIER ';' // Case JumpStatementGoto
2958// | "goto" '*' Expression ';' // Case JumpStatementGotoExpr
2959// | "continue" ';' // Case JumpStatementContinue
2960// | "break" ';' // Case JumpStatementBreak
2961// | "return" Expression ';' // Case JumpStatementReturn
2962type JumpStatement struct {
2963 context Node
2964 lexicalScope Scope
2965 Case JumpStatementCase `PrettyPrint:"stringer,zero"`
2966 Expression *Expression
2967 Token Token
2968 Token2 Token
2969 Token3 Token
2970}
2971
2972// String implements fmt.Stringer.
2973func (n *JumpStatement) String() string { return PrettyString(n) }
2974
2975// Position reports the position of the first component of n, if available.
2976func (n *JumpStatement) Position() (r token.Position) {
2977 if n == nil {
2978 return r
2979 }
2980
2981 switch n.Case {
2982 case 4:
2983 if p := n.Token.Position(); p.IsValid() {
2984 return p
2985 }
2986
2987 if p := n.Expression.Position(); p.IsValid() {
2988 return p
2989 }
2990
2991 return n.Token2.Position()
2992 case 2, 3:
2993 if p := n.Token.Position(); p.IsValid() {
2994 return p
2995 }
2996
2997 return n.Token2.Position()
2998 case 1:
2999 if p := n.Token.Position(); p.IsValid() {
3000 return p
3001 }
3002
3003 if p := n.Token2.Position(); p.IsValid() {
3004 return p
3005 }
3006
3007 if p := n.Expression.Position(); p.IsValid() {
3008 return p
3009 }
3010
3011 return n.Token3.Position()
3012 case 0:
3013 if p := n.Token.Position(); p.IsValid() {
3014 return p
3015 }
3016
3017 if p := n.Token2.Position(); p.IsValid() {
3018 return p
3019 }
3020
3021 return n.Token3.Position()
3022 default:
3023 panic("internal error")
3024 }
3025}
3026
3027// LabelDeclaration represents data reduced by production:
3028//
3029// LabelDeclaration:
3030// "__label__" IdentifierList ';'
3031type LabelDeclaration struct {
3032 IdentifierList *IdentifierList
3033 Token Token
3034 Token2 Token
3035}
3036
3037// String implements fmt.Stringer.
3038func (n *LabelDeclaration) String() string { return PrettyString(n) }
3039
3040// Position reports the position of the first component of n, if available.
3041func (n *LabelDeclaration) Position() (r token.Position) {
3042 if n == nil {
3043 return r
3044 }
3045
3046 if p := n.Token.Position(); p.IsValid() {
3047 return p
3048 }
3049
3050 if p := n.IdentifierList.Position(); p.IsValid() {
3051 return p
3052 }
3053
3054 return n.Token2.Position()
3055}
3056
3057// LabeledStatementCase represents case numbers of production LabeledStatement
3058type LabeledStatementCase int
3059
3060// Values of type LabeledStatementCase
3061const (
3062 LabeledStatementLabel LabeledStatementCase = iota
3063 LabeledStatementCaseLabel
3064 LabeledStatementRange
3065 LabeledStatementDefault
3066)
3067
3068// String implements fmt.Stringer
3069func (n LabeledStatementCase) String() string {
3070 switch n {
3071 case LabeledStatementLabel:
3072 return "LabeledStatementLabel"
3073 case LabeledStatementCaseLabel:
3074 return "LabeledStatementCaseLabel"
3075 case LabeledStatementRange:
3076 return "LabeledStatementRange"
3077 case LabeledStatementDefault:
3078 return "LabeledStatementDefault"
3079 default:
3080 return fmt.Sprintf("LabeledStatementCase(%v)", int(n))
3081 }
3082}
3083
3084// LabeledStatement represents data reduced by productions:
3085//
3086// LabeledStatement:
3087// IDENTIFIER ':' AttributeSpecifierList Statement // Case LabeledStatementLabel
3088// | "case" ConstantExpression ':' Statement // Case LabeledStatementCaseLabel
3089// | "case" ConstantExpression "..." ConstantExpression ':' Statement // Case LabeledStatementRange
3090// | "default" ':' Statement // Case LabeledStatementDefault
3091type LabeledStatement struct {
3092 block *CompoundStatement
3093 lexicalScope Scope
3094 AttributeSpecifierList *AttributeSpecifierList
3095 Case LabeledStatementCase `PrettyPrint:"stringer,zero"`
3096 ConstantExpression *ConstantExpression
3097 ConstantExpression2 *ConstantExpression
3098 Statement *Statement
3099 Token Token
3100 Token2 Token
3101 Token3 Token
3102}
3103
3104// String implements fmt.Stringer.
3105func (n *LabeledStatement) String() string { return PrettyString(n) }
3106
3107// Position reports the position of the first component of n, if available.
3108func (n *LabeledStatement) Position() (r token.Position) {
3109 if n == nil {
3110 return r
3111 }
3112
3113 switch n.Case {
3114 case 2:
3115 if p := n.Token.Position(); p.IsValid() {
3116 return p
3117 }
3118
3119 if p := n.ConstantExpression.Position(); p.IsValid() {
3120 return p
3121 }
3122
3123 if p := n.Token2.Position(); p.IsValid() {
3124 return p
3125 }
3126
3127 if p := n.ConstantExpression2.Position(); p.IsValid() {
3128 return p
3129 }
3130
3131 if p := n.Token3.Position(); p.IsValid() {
3132 return p
3133 }
3134
3135 return n.Statement.Position()
3136 case 1:
3137 if p := n.Token.Position(); p.IsValid() {
3138 return p
3139 }
3140
3141 if p := n.ConstantExpression.Position(); p.IsValid() {
3142 return p
3143 }
3144
3145 if p := n.Token2.Position(); p.IsValid() {
3146 return p
3147 }
3148
3149 return n.Statement.Position()
3150 case 0:
3151 if p := n.Token.Position(); p.IsValid() {
3152 return p
3153 }
3154
3155 if p := n.Token2.Position(); p.IsValid() {
3156 return p
3157 }
3158
3159 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
3160 return p
3161 }
3162
3163 return n.Statement.Position()
3164 case 3:
3165 if p := n.Token.Position(); p.IsValid() {
3166 return p
3167 }
3168
3169 if p := n.Token2.Position(); p.IsValid() {
3170 return p
3171 }
3172
3173 return n.Statement.Position()
3174 default:
3175 panic("internal error")
3176 }
3177}
3178
3179// LogicalAndExpressionCase represents case numbers of production LogicalAndExpression
3180type LogicalAndExpressionCase int
3181
3182// Values of type LogicalAndExpressionCase
3183const (
3184 LogicalAndExpressionOr LogicalAndExpressionCase = iota
3185 LogicalAndExpressionLAnd
3186)
3187
3188// String implements fmt.Stringer
3189func (n LogicalAndExpressionCase) String() string {
3190 switch n {
3191 case LogicalAndExpressionOr:
3192 return "LogicalAndExpressionOr"
3193 case LogicalAndExpressionLAnd:
3194 return "LogicalAndExpressionLAnd"
3195 default:
3196 return fmt.Sprintf("LogicalAndExpressionCase(%v)", int(n))
3197 }
3198}
3199
3200// LogicalAndExpression represents data reduced by productions:
3201//
3202// LogicalAndExpression:
3203// InclusiveOrExpression // Case LogicalAndExpressionOr
3204// | LogicalAndExpression "&&" InclusiveOrExpression // Case LogicalAndExpressionLAnd
3205type LogicalAndExpression struct {
3206 Operand Operand
3207 IsSideEffectsFree bool
3208 Case LogicalAndExpressionCase `PrettyPrint:"stringer,zero"`
3209 InclusiveOrExpression *InclusiveOrExpression
3210 LogicalAndExpression *LogicalAndExpression
3211 Token Token
3212}
3213
3214// String implements fmt.Stringer.
3215func (n *LogicalAndExpression) String() string { return PrettyString(n) }
3216
3217// Position reports the position of the first component of n, if available.
3218func (n *LogicalAndExpression) Position() (r token.Position) {
3219 if n == nil {
3220 return r
3221 }
3222
3223 switch n.Case {
3224 case 0:
3225 return n.InclusiveOrExpression.Position()
3226 case 1:
3227 if p := n.LogicalAndExpression.Position(); p.IsValid() {
3228 return p
3229 }
3230
3231 if p := n.Token.Position(); p.IsValid() {
3232 return p
3233 }
3234
3235 return n.InclusiveOrExpression.Position()
3236 default:
3237 panic("internal error")
3238 }
3239}
3240
3241// LogicalOrExpressionCase represents case numbers of production LogicalOrExpression
3242type LogicalOrExpressionCase int
3243
3244// Values of type LogicalOrExpressionCase
3245const (
3246 LogicalOrExpressionLAnd LogicalOrExpressionCase = iota
3247 LogicalOrExpressionLOr
3248)
3249
3250// String implements fmt.Stringer
3251func (n LogicalOrExpressionCase) String() string {
3252 switch n {
3253 case LogicalOrExpressionLAnd:
3254 return "LogicalOrExpressionLAnd"
3255 case LogicalOrExpressionLOr:
3256 return "LogicalOrExpressionLOr"
3257 default:
3258 return fmt.Sprintf("LogicalOrExpressionCase(%v)", int(n))
3259 }
3260}
3261
3262// LogicalOrExpression represents data reduced by productions:
3263//
3264// LogicalOrExpression:
3265// LogicalAndExpression // Case LogicalOrExpressionLAnd
3266// | LogicalOrExpression "||" LogicalAndExpression // Case LogicalOrExpressionLOr
3267type LogicalOrExpression struct {
3268 Operand Operand
3269 IsSideEffectsFree bool
3270 Case LogicalOrExpressionCase `PrettyPrint:"stringer,zero"`
3271 LogicalAndExpression *LogicalAndExpression
3272 LogicalOrExpression *LogicalOrExpression
3273 Token Token
3274}
3275
3276// String implements fmt.Stringer.
3277func (n *LogicalOrExpression) String() string { return PrettyString(n) }
3278
3279// Position reports the position of the first component of n, if available.
3280func (n *LogicalOrExpression) Position() (r token.Position) {
3281 if n == nil {
3282 return r
3283 }
3284
3285 switch n.Case {
3286 case 0:
3287 return n.LogicalAndExpression.Position()
3288 case 1:
3289 if p := n.LogicalOrExpression.Position(); p.IsValid() {
3290 return p
3291 }
3292
3293 if p := n.Token.Position(); p.IsValid() {
3294 return p
3295 }
3296
3297 return n.LogicalAndExpression.Position()
3298 default:
3299 panic("internal error")
3300 }
3301}
3302
3303// MultiplicativeExpressionCase represents case numbers of production MultiplicativeExpression
3304type MultiplicativeExpressionCase int
3305
3306// Values of type MultiplicativeExpressionCase
3307const (
3308 MultiplicativeExpressionCast MultiplicativeExpressionCase = iota
3309 MultiplicativeExpressionMul
3310 MultiplicativeExpressionDiv
3311 MultiplicativeExpressionMod
3312)
3313
3314// String implements fmt.Stringer
3315func (n MultiplicativeExpressionCase) String() string {
3316 switch n {
3317 case MultiplicativeExpressionCast:
3318 return "MultiplicativeExpressionCast"
3319 case MultiplicativeExpressionMul:
3320 return "MultiplicativeExpressionMul"
3321 case MultiplicativeExpressionDiv:
3322 return "MultiplicativeExpressionDiv"
3323 case MultiplicativeExpressionMod:
3324 return "MultiplicativeExpressionMod"
3325 default:
3326 return fmt.Sprintf("MultiplicativeExpressionCase(%v)", int(n))
3327 }
3328}
3329
3330// MultiplicativeExpression represents data reduced by productions:
3331//
3332// MultiplicativeExpression:
3333// CastExpression // Case MultiplicativeExpressionCast
3334// | MultiplicativeExpression '*' CastExpression // Case MultiplicativeExpressionMul
3335// | MultiplicativeExpression '/' CastExpression // Case MultiplicativeExpressionDiv
3336// | MultiplicativeExpression '%' CastExpression // Case MultiplicativeExpressionMod
3337type MultiplicativeExpression struct {
3338 Operand Operand
3339 promote Type
3340 IsSideEffectsFree bool
3341 Case MultiplicativeExpressionCase `PrettyPrint:"stringer,zero"`
3342 CastExpression *CastExpression
3343 MultiplicativeExpression *MultiplicativeExpression
3344 Token Token
3345}
3346
3347// String implements fmt.Stringer.
3348func (n *MultiplicativeExpression) String() string { return PrettyString(n) }
3349
3350// Position reports the position of the first component of n, if available.
3351func (n *MultiplicativeExpression) Position() (r token.Position) {
3352 if n == nil {
3353 return r
3354 }
3355
3356 switch n.Case {
3357 case 0:
3358 return n.CastExpression.Position()
3359 case 1, 2, 3:
3360 if p := n.MultiplicativeExpression.Position(); p.IsValid() {
3361 return p
3362 }
3363
3364 if p := n.Token.Position(); p.IsValid() {
3365 return p
3366 }
3367
3368 return n.CastExpression.Position()
3369 default:
3370 panic("internal error")
3371 }
3372}
3373
3374// ParameterDeclarationCase represents case numbers of production ParameterDeclaration
3375type ParameterDeclarationCase int
3376
3377// Values of type ParameterDeclarationCase
3378const (
3379 ParameterDeclarationDecl ParameterDeclarationCase = iota
3380 ParameterDeclarationAbstract
3381)
3382
3383// String implements fmt.Stringer
3384func (n ParameterDeclarationCase) String() string {
3385 switch n {
3386 case ParameterDeclarationDecl:
3387 return "ParameterDeclarationDecl"
3388 case ParameterDeclarationAbstract:
3389 return "ParameterDeclarationAbstract"
3390 default:
3391 return fmt.Sprintf("ParameterDeclarationCase(%v)", int(n))
3392 }
3393}
3394
3395// ParameterDeclaration represents data reduced by productions:
3396//
3397// ParameterDeclaration:
3398// DeclarationSpecifiers Declarator AttributeSpecifierList // Case ParameterDeclarationDecl
3399// | DeclarationSpecifiers AbstractDeclarator // Case ParameterDeclarationAbstract
3400type ParameterDeclaration struct {
3401 typ Type
3402 AbstractDeclarator *AbstractDeclarator
3403 AttributeSpecifierList *AttributeSpecifierList
3404 Case ParameterDeclarationCase `PrettyPrint:"stringer,zero"`
3405 DeclarationSpecifiers *DeclarationSpecifiers
3406 Declarator *Declarator
3407}
3408
3409// String implements fmt.Stringer.
3410func (n *ParameterDeclaration) String() string { return PrettyString(n) }
3411
3412// Position reports the position of the first component of n, if available.
3413func (n *ParameterDeclaration) Position() (r token.Position) {
3414 if n == nil {
3415 return r
3416 }
3417
3418 switch n.Case {
3419 case 1:
3420 if p := n.DeclarationSpecifiers.Position(); p.IsValid() {
3421 return p
3422 }
3423
3424 return n.AbstractDeclarator.Position()
3425 case 0:
3426 if p := n.DeclarationSpecifiers.Position(); p.IsValid() {
3427 return p
3428 }
3429
3430 if p := n.Declarator.Position(); p.IsValid() {
3431 return p
3432 }
3433
3434 return n.AttributeSpecifierList.Position()
3435 default:
3436 panic("internal error")
3437 }
3438}
3439
3440// ParameterList represents data reduced by productions:
3441//
3442// ParameterList:
3443// ParameterDeclaration
3444// | ParameterList ',' ParameterDeclaration
3445type ParameterList struct {
3446 ParameterDeclaration *ParameterDeclaration
3447 ParameterList *ParameterList
3448 Token Token
3449}
3450
3451// String implements fmt.Stringer.
3452func (n *ParameterList) String() string { return PrettyString(n) }
3453
3454// Position reports the position of the first component of n, if available.
3455func (n *ParameterList) Position() (r token.Position) {
3456 if n == nil {
3457 return r
3458 }
3459
3460 return n.ParameterDeclaration.Position()
3461}
3462
3463// ParameterTypeListCase represents case numbers of production ParameterTypeList
3464type ParameterTypeListCase int
3465
3466// Values of type ParameterTypeListCase
3467const (
3468 ParameterTypeListList ParameterTypeListCase = iota
3469 ParameterTypeListVar
3470)
3471
3472// String implements fmt.Stringer
3473func (n ParameterTypeListCase) String() string {
3474 switch n {
3475 case ParameterTypeListList:
3476 return "ParameterTypeListList"
3477 case ParameterTypeListVar:
3478 return "ParameterTypeListVar"
3479 default:
3480 return fmt.Sprintf("ParameterTypeListCase(%v)", int(n))
3481 }
3482}
3483
3484// ParameterTypeList represents data reduced by productions:
3485//
3486// ParameterTypeList:
3487// ParameterList // Case ParameterTypeListList
3488// | ParameterList ',' "..." // Case ParameterTypeListVar
3489type ParameterTypeList struct {
3490 Case ParameterTypeListCase `PrettyPrint:"stringer,zero"`
3491 ParameterList *ParameterList
3492 Token Token
3493 Token2 Token
3494}
3495
3496// String implements fmt.Stringer.
3497func (n *ParameterTypeList) String() string { return PrettyString(n) }
3498
3499// Position reports the position of the first component of n, if available.
3500func (n *ParameterTypeList) Position() (r token.Position) {
3501 if n == nil {
3502 return r
3503 }
3504
3505 switch n.Case {
3506 case 0:
3507 return n.ParameterList.Position()
3508 case 1:
3509 if p := n.ParameterList.Position(); p.IsValid() {
3510 return p
3511 }
3512
3513 if p := n.Token.Position(); p.IsValid() {
3514 return p
3515 }
3516
3517 return n.Token2.Position()
3518 default:
3519 panic("internal error")
3520 }
3521}
3522
3523// PointerCase represents case numbers of production Pointer
3524type PointerCase int
3525
3526// Values of type PointerCase
3527const (
3528 PointerTypeQual PointerCase = iota
3529 PointerPtr
3530 PointerBlock
3531)
3532
3533// String implements fmt.Stringer
3534func (n PointerCase) String() string {
3535 switch n {
3536 case PointerTypeQual:
3537 return "PointerTypeQual"
3538 case PointerPtr:
3539 return "PointerPtr"
3540 case PointerBlock:
3541 return "PointerBlock"
3542 default:
3543 return fmt.Sprintf("PointerCase(%v)", int(n))
3544 }
3545}
3546
3547// Pointer represents data reduced by productions:
3548//
3549// Pointer:
3550// '*' TypeQualifiers // Case PointerTypeQual
3551// | '*' TypeQualifiers Pointer // Case PointerPtr
3552// | '^' TypeQualifiers // Case PointerBlock
3553type Pointer struct {
3554 typeQualifiers *typeBase
3555 Case PointerCase `PrettyPrint:"stringer,zero"`
3556 Pointer *Pointer
3557 Token Token
3558 TypeQualifiers *TypeQualifiers
3559}
3560
3561// String implements fmt.Stringer.
3562func (n *Pointer) String() string { return PrettyString(n) }
3563
3564// Position reports the position of the first component of n, if available.
3565func (n *Pointer) Position() (r token.Position) {
3566 if n == nil {
3567 return r
3568 }
3569
3570 switch n.Case {
3571 case 0, 2:
3572 if p := n.Token.Position(); p.IsValid() {
3573 return p
3574 }
3575
3576 return n.TypeQualifiers.Position()
3577 case 1:
3578 if p := n.Token.Position(); p.IsValid() {
3579 return p
3580 }
3581
3582 if p := n.TypeQualifiers.Position(); p.IsValid() {
3583 return p
3584 }
3585
3586 return n.Pointer.Position()
3587 default:
3588 panic("internal error")
3589 }
3590}
3591
3592// PostfixExpressionCase represents case numbers of production PostfixExpression
3593type PostfixExpressionCase int
3594
3595// Values of type PostfixExpressionCase
3596const (
3597 PostfixExpressionPrimary PostfixExpressionCase = iota
3598 PostfixExpressionIndex
3599 PostfixExpressionCall
3600 PostfixExpressionSelect
3601 PostfixExpressionPSelect
3602 PostfixExpressionInc
3603 PostfixExpressionDec
3604 PostfixExpressionComplit
3605 PostfixExpressionTypeCmp
3606 PostfixExpressionChooseExpr
3607)
3608
3609// String implements fmt.Stringer
3610func (n PostfixExpressionCase) String() string {
3611 switch n {
3612 case PostfixExpressionPrimary:
3613 return "PostfixExpressionPrimary"
3614 case PostfixExpressionIndex:
3615 return "PostfixExpressionIndex"
3616 case PostfixExpressionCall:
3617 return "PostfixExpressionCall"
3618 case PostfixExpressionSelect:
3619 return "PostfixExpressionSelect"
3620 case PostfixExpressionPSelect:
3621 return "PostfixExpressionPSelect"
3622 case PostfixExpressionInc:
3623 return "PostfixExpressionInc"
3624 case PostfixExpressionDec:
3625 return "PostfixExpressionDec"
3626 case PostfixExpressionComplit:
3627 return "PostfixExpressionComplit"
3628 case PostfixExpressionTypeCmp:
3629 return "PostfixExpressionTypeCmp"
3630 case PostfixExpressionChooseExpr:
3631 return "PostfixExpressionChooseExpr"
3632 default:
3633 return fmt.Sprintf("PostfixExpressionCase(%v)", int(n))
3634 }
3635}
3636
3637// PostfixExpression represents data reduced by productions:
3638//
3639// PostfixExpression:
3640// PrimaryExpression // Case PostfixExpressionPrimary
3641// | PostfixExpression '[' Expression ']' // Case PostfixExpressionIndex
3642// | PostfixExpression '(' ArgumentExpressionList ')' // Case PostfixExpressionCall
3643// | PostfixExpression '.' IDENTIFIER // Case PostfixExpressionSelect
3644// | PostfixExpression "->" IDENTIFIER // Case PostfixExpressionPSelect
3645// | PostfixExpression "++" // Case PostfixExpressionInc
3646// | PostfixExpression "--" // Case PostfixExpressionDec
3647// | '(' TypeName ')' '{' InitializerList ',' '}' // Case PostfixExpressionComplit
3648// | "__builtin_types_compatible_p" '(' TypeName ',' TypeName ')' // Case PostfixExpressionTypeCmp
3649// | "__builtin_choose_expr" '(' AssignmentExpression ',' AssignmentExpression ',' AssignmentExpression ')' // Case PostfixExpressionChooseExpr
3650type PostfixExpression struct {
3651 Operand Operand
3652 Field Field // Case Select, PSelect
3653 IsSideEffectsFree bool
3654 ArgumentExpressionList *ArgumentExpressionList
3655 AssignmentExpression *AssignmentExpression
3656 AssignmentExpression2 *AssignmentExpression
3657 AssignmentExpression3 *AssignmentExpression
3658 Case PostfixExpressionCase `PrettyPrint:"stringer,zero"`
3659 Expression *Expression
3660 InitializerList *InitializerList
3661 PostfixExpression *PostfixExpression
3662 PrimaryExpression *PrimaryExpression
3663 Token Token
3664 Token2 Token
3665 Token3 Token
3666 Token4 Token
3667 Token5 Token
3668 TypeName *TypeName
3669 TypeName2 *TypeName
3670}
3671
3672// String implements fmt.Stringer.
3673func (n *PostfixExpression) String() string { return PrettyString(n) }
3674
3675// Position reports the position of the first component of n, if available.
3676func (n *PostfixExpression) Position() (r token.Position) {
3677 if n == nil {
3678 return r
3679 }
3680
3681 switch n.Case {
3682 case 5, 6:
3683 if p := n.PostfixExpression.Position(); p.IsValid() {
3684 return p
3685 }
3686
3687 return n.Token.Position()
3688 case 2:
3689 if p := n.PostfixExpression.Position(); p.IsValid() {
3690 return p
3691 }
3692
3693 if p := n.Token.Position(); p.IsValid() {
3694 return p
3695 }
3696
3697 if p := n.ArgumentExpressionList.Position(); p.IsValid() {
3698 return p
3699 }
3700
3701 return n.Token2.Position()
3702 case 1:
3703 if p := n.PostfixExpression.Position(); p.IsValid() {
3704 return p
3705 }
3706
3707 if p := n.Token.Position(); p.IsValid() {
3708 return p
3709 }
3710
3711 if p := n.Expression.Position(); p.IsValid() {
3712 return p
3713 }
3714
3715 return n.Token2.Position()
3716 case 3, 4:
3717 if p := n.PostfixExpression.Position(); p.IsValid() {
3718 return p
3719 }
3720
3721 if p := n.Token.Position(); p.IsValid() {
3722 return p
3723 }
3724
3725 return n.Token2.Position()
3726 case 0:
3727 return n.PrimaryExpression.Position()
3728 case 9:
3729 if p := n.Token.Position(); p.IsValid() {
3730 return p
3731 }
3732
3733 if p := n.Token2.Position(); p.IsValid() {
3734 return p
3735 }
3736
3737 if p := n.AssignmentExpression.Position(); p.IsValid() {
3738 return p
3739 }
3740
3741 if p := n.Token3.Position(); p.IsValid() {
3742 return p
3743 }
3744
3745 if p := n.AssignmentExpression2.Position(); p.IsValid() {
3746 return p
3747 }
3748
3749 if p := n.Token4.Position(); p.IsValid() {
3750 return p
3751 }
3752
3753 if p := n.AssignmentExpression3.Position(); p.IsValid() {
3754 return p
3755 }
3756
3757 return n.Token5.Position()
3758 case 8:
3759 if p := n.Token.Position(); p.IsValid() {
3760 return p
3761 }
3762
3763 if p := n.Token2.Position(); p.IsValid() {
3764 return p
3765 }
3766
3767 if p := n.TypeName.Position(); p.IsValid() {
3768 return p
3769 }
3770
3771 if p := n.Token3.Position(); p.IsValid() {
3772 return p
3773 }
3774
3775 if p := n.TypeName2.Position(); p.IsValid() {
3776 return p
3777 }
3778
3779 return n.Token4.Position()
3780 case 7:
3781 if p := n.Token.Position(); p.IsValid() {
3782 return p
3783 }
3784
3785 if p := n.TypeName.Position(); p.IsValid() {
3786 return p
3787 }
3788
3789 if p := n.Token2.Position(); p.IsValid() {
3790 return p
3791 }
3792
3793 if p := n.Token3.Position(); p.IsValid() {
3794 return p
3795 }
3796
3797 if p := n.InitializerList.Position(); p.IsValid() {
3798 return p
3799 }
3800
3801 if p := n.Token4.Position(); p.IsValid() {
3802 return p
3803 }
3804
3805 return n.Token5.Position()
3806 default:
3807 panic("internal error")
3808 }
3809}
3810
3811// PragmaSTDC represents data reduced by production:
3812//
3813// PragmaSTDC:
3814// "__pragma_stdc" IDENTIFIER IDENTIFIER IDENTIFIER
3815type PragmaSTDC struct {
3816 Token Token
3817 Token2 Token
3818 Token3 Token
3819 Token4 Token
3820}
3821
3822// String implements fmt.Stringer.
3823func (n *PragmaSTDC) String() string { return PrettyString(n) }
3824
3825// Position reports the position of the first component of n, if available.
3826func (n *PragmaSTDC) Position() (r token.Position) {
3827 if n == nil {
3828 return r
3829 }
3830
3831 if p := n.Token.Position(); p.IsValid() {
3832 return p
3833 }
3834
3835 if p := n.Token2.Position(); p.IsValid() {
3836 return p
3837 }
3838
3839 if p := n.Token3.Position(); p.IsValid() {
3840 return p
3841 }
3842
3843 return n.Token4.Position()
3844}
3845
3846// PrimaryExpressionCase represents case numbers of production PrimaryExpression
3847type PrimaryExpressionCase int
3848
3849// Values of type PrimaryExpressionCase
3850const (
3851 PrimaryExpressionIdent PrimaryExpressionCase = iota
3852 PrimaryExpressionInt
3853 PrimaryExpressionFloat
3854 PrimaryExpressionEnum
3855 PrimaryExpressionChar
3856 PrimaryExpressionLChar
3857 PrimaryExpressionString
3858 PrimaryExpressionLString
3859 PrimaryExpressionExpr
3860 PrimaryExpressionStmt
3861)
3862
3863// String implements fmt.Stringer
3864func (n PrimaryExpressionCase) String() string {
3865 switch n {
3866 case PrimaryExpressionIdent:
3867 return "PrimaryExpressionIdent"
3868 case PrimaryExpressionInt:
3869 return "PrimaryExpressionInt"
3870 case PrimaryExpressionFloat:
3871 return "PrimaryExpressionFloat"
3872 case PrimaryExpressionEnum:
3873 return "PrimaryExpressionEnum"
3874 case PrimaryExpressionChar:
3875 return "PrimaryExpressionChar"
3876 case PrimaryExpressionLChar:
3877 return "PrimaryExpressionLChar"
3878 case PrimaryExpressionString:
3879 return "PrimaryExpressionString"
3880 case PrimaryExpressionLString:
3881 return "PrimaryExpressionLString"
3882 case PrimaryExpressionExpr:
3883 return "PrimaryExpressionExpr"
3884 case PrimaryExpressionStmt:
3885 return "PrimaryExpressionStmt"
3886 default:
3887 return fmt.Sprintf("PrimaryExpressionCase(%v)", int(n))
3888 }
3889}
3890
3891// PrimaryExpression represents data reduced by productions:
3892//
3893// PrimaryExpression:
3894// IDENTIFIER // Case PrimaryExpressionIdent
3895// | INTCONST // Case PrimaryExpressionInt
3896// | FLOATCONST // Case PrimaryExpressionFloat
3897// | ENUMCONST // Case PrimaryExpressionEnum
3898// | CHARCONST // Case PrimaryExpressionChar
3899// | LONGCHARCONST // Case PrimaryExpressionLChar
3900// | STRINGLITERAL // Case PrimaryExpressionString
3901// | LONGSTRINGLITERAL // Case PrimaryExpressionLString
3902// | '(' Expression ')' // Case PrimaryExpressionExpr
3903// | '(' CompoundStatement ')' // Case PrimaryExpressionStmt
3904type PrimaryExpression struct {
3905 Operand Operand
3906 lexicalScope Scope
3907 resolvedIn Scope
3908 resolvedTo Node
3909 IsSideEffectsFree bool
3910 Case PrimaryExpressionCase `PrettyPrint:"stringer,zero"`
3911 CompoundStatement *CompoundStatement
3912 Expression *Expression
3913 Token Token
3914 Token2 Token
3915}
3916
3917// String implements fmt.Stringer.
3918func (n *PrimaryExpression) String() string { return PrettyString(n) }
3919
3920// Position reports the position of the first component of n, if available.
3921func (n *PrimaryExpression) Position() (r token.Position) {
3922 if n == nil {
3923 return r
3924 }
3925
3926 switch n.Case {
3927 case 0, 1, 2, 3, 4, 5, 6, 7:
3928 return n.Token.Position()
3929 case 9:
3930 if p := n.Token.Position(); p.IsValid() {
3931 return p
3932 }
3933
3934 if p := n.CompoundStatement.Position(); p.IsValid() {
3935 return p
3936 }
3937
3938 return n.Token2.Position()
3939 case 8:
3940 if p := n.Token.Position(); p.IsValid() {
3941 return p
3942 }
3943
3944 if p := n.Expression.Position(); p.IsValid() {
3945 return p
3946 }
3947
3948 return n.Token2.Position()
3949 default:
3950 panic("internal error")
3951 }
3952}
3953
3954// RelationalExpressionCase represents case numbers of production RelationalExpression
3955type RelationalExpressionCase int
3956
3957// Values of type RelationalExpressionCase
3958const (
3959 RelationalExpressionShift RelationalExpressionCase = iota
3960 RelationalExpressionLt
3961 RelationalExpressionGt
3962 RelationalExpressionLeq
3963 RelationalExpressionGeq
3964)
3965
3966// String implements fmt.Stringer
3967func (n RelationalExpressionCase) String() string {
3968 switch n {
3969 case RelationalExpressionShift:
3970 return "RelationalExpressionShift"
3971 case RelationalExpressionLt:
3972 return "RelationalExpressionLt"
3973 case RelationalExpressionGt:
3974 return "RelationalExpressionGt"
3975 case RelationalExpressionLeq:
3976 return "RelationalExpressionLeq"
3977 case RelationalExpressionGeq:
3978 return "RelationalExpressionGeq"
3979 default:
3980 return fmt.Sprintf("RelationalExpressionCase(%v)", int(n))
3981 }
3982}
3983
3984// RelationalExpression represents data reduced by productions:
3985//
3986// RelationalExpression:
3987// ShiftExpression // Case RelationalExpressionShift
3988// | RelationalExpression '<' ShiftExpression // Case RelationalExpressionLt
3989// | RelationalExpression '>' ShiftExpression // Case RelationalExpressionGt
3990// | RelationalExpression "<=" ShiftExpression // Case RelationalExpressionLeq
3991// | RelationalExpression ">=" ShiftExpression // Case RelationalExpressionGeq
3992type RelationalExpression struct {
3993 Operand Operand
3994 promote Type
3995 IsSideEffectsFree bool
3996 Case RelationalExpressionCase `PrettyPrint:"stringer,zero"`
3997 RelationalExpression *RelationalExpression
3998 ShiftExpression *ShiftExpression
3999 Token Token
4000}
4001
4002// String implements fmt.Stringer.
4003func (n *RelationalExpression) String() string { return PrettyString(n) }
4004
4005// Position reports the position of the first component of n, if available.
4006func (n *RelationalExpression) Position() (r token.Position) {
4007 if n == nil {
4008 return r
4009 }
4010
4011 switch n.Case {
4012 case 1, 2, 3, 4:
4013 if p := n.RelationalExpression.Position(); p.IsValid() {
4014 return p
4015 }
4016
4017 if p := n.Token.Position(); p.IsValid() {
4018 return p
4019 }
4020
4021 return n.ShiftExpression.Position()
4022 case 0:
4023 return n.ShiftExpression.Position()
4024 default:
4025 panic("internal error")
4026 }
4027}
4028
4029// SelectionStatementCase represents case numbers of production SelectionStatement
4030type SelectionStatementCase int
4031
4032// Values of type SelectionStatementCase
4033const (
4034 SelectionStatementIf SelectionStatementCase = iota
4035 SelectionStatementIfElse
4036 SelectionStatementSwitch
4037)
4038
4039// String implements fmt.Stringer
4040func (n SelectionStatementCase) String() string {
4041 switch n {
4042 case SelectionStatementIf:
4043 return "SelectionStatementIf"
4044 case SelectionStatementIfElse:
4045 return "SelectionStatementIfElse"
4046 case SelectionStatementSwitch:
4047 return "SelectionStatementSwitch"
4048 default:
4049 return fmt.Sprintf("SelectionStatementCase(%v)", int(n))
4050 }
4051}
4052
4053// SelectionStatement represents data reduced by productions:
4054//
4055// SelectionStatement:
4056// "if" '(' Expression ')' Statement // Case SelectionStatementIf
4057// | "if" '(' Expression ')' Statement "else" Statement // Case SelectionStatementIfElse
4058// | "switch" '(' Expression ')' Statement // Case SelectionStatementSwitch
4059type SelectionStatement struct {
4060 promote Type // switch expression promoted type
4061 cases []*LabeledStatement
4062 Case SelectionStatementCase `PrettyPrint:"stringer,zero"`
4063 Expression *Expression
4064 Statement *Statement
4065 Statement2 *Statement
4066 Token Token
4067 Token2 Token
4068 Token3 Token
4069 Token4 Token
4070}
4071
4072// String implements fmt.Stringer.
4073func (n *SelectionStatement) String() string { return PrettyString(n) }
4074
4075// Position reports the position of the first component of n, if available.
4076func (n *SelectionStatement) Position() (r token.Position) {
4077 if n == nil {
4078 return r
4079 }
4080
4081 switch n.Case {
4082 case 0, 2:
4083 if p := n.Token.Position(); p.IsValid() {
4084 return p
4085 }
4086
4087 if p := n.Token2.Position(); p.IsValid() {
4088 return p
4089 }
4090
4091 if p := n.Expression.Position(); p.IsValid() {
4092 return p
4093 }
4094
4095 if p := n.Token3.Position(); p.IsValid() {
4096 return p
4097 }
4098
4099 return n.Statement.Position()
4100 case 1:
4101 if p := n.Token.Position(); p.IsValid() {
4102 return p
4103 }
4104
4105 if p := n.Token2.Position(); p.IsValid() {
4106 return p
4107 }
4108
4109 if p := n.Expression.Position(); p.IsValid() {
4110 return p
4111 }
4112
4113 if p := n.Token3.Position(); p.IsValid() {
4114 return p
4115 }
4116
4117 if p := n.Statement.Position(); p.IsValid() {
4118 return p
4119 }
4120
4121 if p := n.Token4.Position(); p.IsValid() {
4122 return p
4123 }
4124
4125 return n.Statement2.Position()
4126 default:
4127 panic("internal error")
4128 }
4129}
4130
4131// ShiftExpressionCase represents case numbers of production ShiftExpression
4132type ShiftExpressionCase int
4133
4134// Values of type ShiftExpressionCase
4135const (
4136 ShiftExpressionAdd ShiftExpressionCase = iota
4137 ShiftExpressionLsh
4138 ShiftExpressionRsh
4139)
4140
4141// String implements fmt.Stringer
4142func (n ShiftExpressionCase) String() string {
4143 switch n {
4144 case ShiftExpressionAdd:
4145 return "ShiftExpressionAdd"
4146 case ShiftExpressionLsh:
4147 return "ShiftExpressionLsh"
4148 case ShiftExpressionRsh:
4149 return "ShiftExpressionRsh"
4150 default:
4151 return fmt.Sprintf("ShiftExpressionCase(%v)", int(n))
4152 }
4153}
4154
4155// ShiftExpression represents data reduced by productions:
4156//
4157// ShiftExpression:
4158// AdditiveExpression // Case ShiftExpressionAdd
4159// | ShiftExpression "<<" AdditiveExpression // Case ShiftExpressionLsh
4160// | ShiftExpression ">>" AdditiveExpression // Case ShiftExpressionRsh
4161type ShiftExpression struct {
4162 Operand Operand
4163 promote Type // shift count promoted type
4164 IsSideEffectsFree bool
4165 AdditiveExpression *AdditiveExpression
4166 Case ShiftExpressionCase `PrettyPrint:"stringer,zero"`
4167 ShiftExpression *ShiftExpression
4168 Token Token
4169}
4170
4171// String implements fmt.Stringer.
4172func (n *ShiftExpression) String() string { return PrettyString(n) }
4173
4174// Position reports the position of the first component of n, if available.
4175func (n *ShiftExpression) Position() (r token.Position) {
4176 if n == nil {
4177 return r
4178 }
4179
4180 switch n.Case {
4181 case 0:
4182 return n.AdditiveExpression.Position()
4183 case 1, 2:
4184 if p := n.ShiftExpression.Position(); p.IsValid() {
4185 return p
4186 }
4187
4188 if p := n.Token.Position(); p.IsValid() {
4189 return p
4190 }
4191
4192 return n.AdditiveExpression.Position()
4193 default:
4194 panic("internal error")
4195 }
4196}
4197
4198// SpecifierQualifierListCase represents case numbers of production SpecifierQualifierList
4199type SpecifierQualifierListCase int
4200
4201// Values of type SpecifierQualifierListCase
4202const (
4203 SpecifierQualifierListTypeSpec SpecifierQualifierListCase = iota
4204 SpecifierQualifierListTypeQual
4205 SpecifierQualifierListAlignSpec
4206 SpecifierQualifierListAttribute
4207)
4208
4209// String implements fmt.Stringer
4210func (n SpecifierQualifierListCase) String() string {
4211 switch n {
4212 case SpecifierQualifierListTypeSpec:
4213 return "SpecifierQualifierListTypeSpec"
4214 case SpecifierQualifierListTypeQual:
4215 return "SpecifierQualifierListTypeQual"
4216 case SpecifierQualifierListAlignSpec:
4217 return "SpecifierQualifierListAlignSpec"
4218 case SpecifierQualifierListAttribute:
4219 return "SpecifierQualifierListAttribute"
4220 default:
4221 return fmt.Sprintf("SpecifierQualifierListCase(%v)", int(n))
4222 }
4223}
4224
4225// SpecifierQualifierList represents data reduced by productions:
4226//
4227// SpecifierQualifierList:
4228// TypeSpecifier SpecifierQualifierList // Case SpecifierQualifierListTypeSpec
4229// | TypeQualifier SpecifierQualifierList // Case SpecifierQualifierListTypeQual
4230// | AlignmentSpecifier SpecifierQualifierList // Case SpecifierQualifierListAlignSpec
4231// | AttributeSpecifier SpecifierQualifierList // Case SpecifierQualifierListAttribute
4232type SpecifierQualifierList struct {
4233 noStorageClass
4234 AlignmentSpecifier *AlignmentSpecifier
4235 AttributeSpecifier *AttributeSpecifier
4236 Case SpecifierQualifierListCase `PrettyPrint:"stringer,zero"`
4237 SpecifierQualifierList *SpecifierQualifierList
4238 TypeQualifier *TypeQualifier
4239 TypeSpecifier *TypeSpecifier
4240}
4241
4242// String implements fmt.Stringer.
4243func (n *SpecifierQualifierList) String() string { return PrettyString(n) }
4244
4245// Position reports the position of the first component of n, if available.
4246func (n *SpecifierQualifierList) Position() (r token.Position) {
4247 if n == nil {
4248 return r
4249 }
4250
4251 switch n.Case {
4252 case 2:
4253 if p := n.AlignmentSpecifier.Position(); p.IsValid() {
4254 return p
4255 }
4256
4257 return n.SpecifierQualifierList.Position()
4258 case 3:
4259 if p := n.AttributeSpecifier.Position(); p.IsValid() {
4260 return p
4261 }
4262
4263 return n.SpecifierQualifierList.Position()
4264 case 1:
4265 if p := n.TypeQualifier.Position(); p.IsValid() {
4266 return p
4267 }
4268
4269 return n.SpecifierQualifierList.Position()
4270 case 0:
4271 if p := n.TypeSpecifier.Position(); p.IsValid() {
4272 return p
4273 }
4274
4275 return n.SpecifierQualifierList.Position()
4276 default:
4277 panic("internal error")
4278 }
4279}
4280
4281// StatementCase represents case numbers of production Statement
4282type StatementCase int
4283
4284// Values of type StatementCase
4285const (
4286 StatementLabeled StatementCase = iota
4287 StatementCompound
4288 StatementExpr
4289 StatementSelection
4290 StatementIteration
4291 StatementJump
4292 StatementAsm
4293)
4294
4295// String implements fmt.Stringer
4296func (n StatementCase) String() string {
4297 switch n {
4298 case StatementLabeled:
4299 return "StatementLabeled"
4300 case StatementCompound:
4301 return "StatementCompound"
4302 case StatementExpr:
4303 return "StatementExpr"
4304 case StatementSelection:
4305 return "StatementSelection"
4306 case StatementIteration:
4307 return "StatementIteration"
4308 case StatementJump:
4309 return "StatementJump"
4310 case StatementAsm:
4311 return "StatementAsm"
4312 default:
4313 return fmt.Sprintf("StatementCase(%v)", int(n))
4314 }
4315}
4316
4317// Statement represents data reduced by productions:
4318//
4319// Statement:
4320// LabeledStatement // Case StatementLabeled
4321// | CompoundStatement // Case StatementCompound
4322// | ExpressionStatement // Case StatementExpr
4323// | SelectionStatement // Case StatementSelection
4324// | IterationStatement // Case StatementIteration
4325// | JumpStatement // Case StatementJump
4326// | AsmStatement // Case StatementAsm
4327type Statement struct {
4328 Operand Operand // Case CompoundStatement, ExpressionStatement
4329 AsmStatement *AsmStatement
4330 Case StatementCase `PrettyPrint:"stringer,zero"`
4331 CompoundStatement *CompoundStatement
4332 ExpressionStatement *ExpressionStatement
4333 IterationStatement *IterationStatement
4334 JumpStatement *JumpStatement
4335 LabeledStatement *LabeledStatement
4336 SelectionStatement *SelectionStatement
4337}
4338
4339// String implements fmt.Stringer.
4340func (n *Statement) String() string { return PrettyString(n) }
4341
4342// Position reports the position of the first component of n, if available.
4343func (n *Statement) Position() (r token.Position) {
4344 if n == nil {
4345 return r
4346 }
4347
4348 switch n.Case {
4349 case 6:
4350 return n.AsmStatement.Position()
4351 case 1:
4352 return n.CompoundStatement.Position()
4353 case 2:
4354 return n.ExpressionStatement.Position()
4355 case 4:
4356 return n.IterationStatement.Position()
4357 case 5:
4358 return n.JumpStatement.Position()
4359 case 0:
4360 return n.LabeledStatement.Position()
4361 case 3:
4362 return n.SelectionStatement.Position()
4363 default:
4364 panic("internal error")
4365 }
4366}
4367
4368// StorageClassSpecifierCase represents case numbers of production StorageClassSpecifier
4369type StorageClassSpecifierCase int
4370
4371// Values of type StorageClassSpecifierCase
4372const (
4373 StorageClassSpecifierTypedef StorageClassSpecifierCase = iota
4374 StorageClassSpecifierExtern
4375 StorageClassSpecifierStatic
4376 StorageClassSpecifierAuto
4377 StorageClassSpecifierRegister
4378 StorageClassSpecifierThreadLocal
4379)
4380
4381// String implements fmt.Stringer
4382func (n StorageClassSpecifierCase) String() string {
4383 switch n {
4384 case StorageClassSpecifierTypedef:
4385 return "StorageClassSpecifierTypedef"
4386 case StorageClassSpecifierExtern:
4387 return "StorageClassSpecifierExtern"
4388 case StorageClassSpecifierStatic:
4389 return "StorageClassSpecifierStatic"
4390 case StorageClassSpecifierAuto:
4391 return "StorageClassSpecifierAuto"
4392 case StorageClassSpecifierRegister:
4393 return "StorageClassSpecifierRegister"
4394 case StorageClassSpecifierThreadLocal:
4395 return "StorageClassSpecifierThreadLocal"
4396 default:
4397 return fmt.Sprintf("StorageClassSpecifierCase(%v)", int(n))
4398 }
4399}
4400
4401// StorageClassSpecifier represents data reduced by productions:
4402//
4403// StorageClassSpecifier:
4404// "typedef" // Case StorageClassSpecifierTypedef
4405// | "extern" // Case StorageClassSpecifierExtern
4406// | "static" // Case StorageClassSpecifierStatic
4407// | "auto" // Case StorageClassSpecifierAuto
4408// | "register" // Case StorageClassSpecifierRegister
4409// | "_Thread_local" // Case StorageClassSpecifierThreadLocal
4410type StorageClassSpecifier struct {
4411 Case StorageClassSpecifierCase `PrettyPrint:"stringer,zero"`
4412 Token Token
4413}
4414
4415// String implements fmt.Stringer.
4416func (n *StorageClassSpecifier) String() string { return PrettyString(n) }
4417
4418// Position reports the position of the first component of n, if available.
4419func (n *StorageClassSpecifier) Position() (r token.Position) {
4420 if n == nil {
4421 return r
4422 }
4423
4424 return n.Token.Position()
4425}
4426
4427// StructDeclaration represents data reduced by production:
4428//
4429// StructDeclaration:
4430// SpecifierQualifierList StructDeclaratorList ';'
4431type StructDeclaration struct {
4432 Empty bool // TCC extension
4433 SpecifierQualifierList *SpecifierQualifierList
4434 StructDeclaratorList *StructDeclaratorList
4435 Token Token
4436}
4437
4438// String implements fmt.Stringer.
4439func (n *StructDeclaration) String() string { return PrettyString(n) }
4440
4441// Position reports the position of the first component of n, if available.
4442func (n *StructDeclaration) Position() (r token.Position) {
4443 if n == nil {
4444 return r
4445 }
4446
4447 if p := n.SpecifierQualifierList.Position(); p.IsValid() {
4448 return p
4449 }
4450
4451 if p := n.StructDeclaratorList.Position(); p.IsValid() {
4452 return p
4453 }
4454
4455 return n.Token.Position()
4456}
4457
4458// StructDeclarationList represents data reduced by productions:
4459//
4460// StructDeclarationList:
4461// StructDeclaration
4462// | StructDeclarationList StructDeclaration
4463type StructDeclarationList struct {
4464 StructDeclaration *StructDeclaration
4465 StructDeclarationList *StructDeclarationList
4466}
4467
4468// String implements fmt.Stringer.
4469func (n *StructDeclarationList) String() string { return PrettyString(n) }
4470
4471// Position reports the position of the first component of n, if available.
4472func (n *StructDeclarationList) Position() (r token.Position) {
4473 if n == nil {
4474 return r
4475 }
4476
4477 return n.StructDeclaration.Position()
4478}
4479
4480// StructDeclaratorCase represents case numbers of production StructDeclarator
4481type StructDeclaratorCase int
4482
4483// Values of type StructDeclaratorCase
4484const (
4485 StructDeclaratorDecl StructDeclaratorCase = iota
4486 StructDeclaratorBitField
4487)
4488
4489// String implements fmt.Stringer
4490func (n StructDeclaratorCase) String() string {
4491 switch n {
4492 case StructDeclaratorDecl:
4493 return "StructDeclaratorDecl"
4494 case StructDeclaratorBitField:
4495 return "StructDeclaratorBitField"
4496 default:
4497 return fmt.Sprintf("StructDeclaratorCase(%v)", int(n))
4498 }
4499}
4500
4501// StructDeclarator represents data reduced by productions:
4502//
4503// StructDeclarator:
4504// Declarator // Case StructDeclaratorDecl
4505// | Declarator ':' ConstantExpression AttributeSpecifierList // Case StructDeclaratorBitField
4506type StructDeclarator struct {
4507 decl *StructDeclaration
4508 AttributeSpecifierList *AttributeSpecifierList
4509 Case StructDeclaratorCase `PrettyPrint:"stringer,zero"`
4510 ConstantExpression *ConstantExpression
4511 Declarator *Declarator
4512 Token Token
4513}
4514
4515// String implements fmt.Stringer.
4516func (n *StructDeclarator) String() string { return PrettyString(n) }
4517
4518// Position reports the position of the first component of n, if available.
4519func (n *StructDeclarator) Position() (r token.Position) {
4520 if n == nil {
4521 return r
4522 }
4523
4524 switch n.Case {
4525 case 0:
4526 return n.Declarator.Position()
4527 case 1:
4528 if p := n.Declarator.Position(); p.IsValid() {
4529 return p
4530 }
4531
4532 if p := n.Token.Position(); p.IsValid() {
4533 return p
4534 }
4535
4536 if p := n.ConstantExpression.Position(); p.IsValid() {
4537 return p
4538 }
4539
4540 return n.AttributeSpecifierList.Position()
4541 default:
4542 panic("internal error")
4543 }
4544}
4545
4546// StructDeclaratorList represents data reduced by productions:
4547//
4548// StructDeclaratorList:
4549// StructDeclarator
4550// | StructDeclaratorList ',' StructDeclarator
4551type StructDeclaratorList struct {
4552 StructDeclarator *StructDeclarator
4553 StructDeclaratorList *StructDeclaratorList
4554 Token Token
4555}
4556
4557// String implements fmt.Stringer.
4558func (n *StructDeclaratorList) String() string { return PrettyString(n) }
4559
4560// Position reports the position of the first component of n, if available.
4561func (n *StructDeclaratorList) Position() (r token.Position) {
4562 if n == nil {
4563 return r
4564 }
4565
4566 return n.StructDeclarator.Position()
4567}
4568
4569// StructOrUnionCase represents case numbers of production StructOrUnion
4570type StructOrUnionCase int
4571
4572// Values of type StructOrUnionCase
4573const (
4574 StructOrUnionStruct StructOrUnionCase = iota
4575 StructOrUnionUnion
4576)
4577
4578// String implements fmt.Stringer
4579func (n StructOrUnionCase) String() string {
4580 switch n {
4581 case StructOrUnionStruct:
4582 return "StructOrUnionStruct"
4583 case StructOrUnionUnion:
4584 return "StructOrUnionUnion"
4585 default:
4586 return fmt.Sprintf("StructOrUnionCase(%v)", int(n))
4587 }
4588}
4589
4590// StructOrUnion represents data reduced by productions:
4591//
4592// StructOrUnion:
4593// "struct" // Case StructOrUnionStruct
4594// | "union" // Case StructOrUnionUnion
4595type StructOrUnion struct {
4596 Case StructOrUnionCase `PrettyPrint:"stringer,zero"`
4597 Token Token
4598}
4599
4600// String implements fmt.Stringer.
4601func (n *StructOrUnion) String() string { return PrettyString(n) }
4602
4603// Position reports the position of the first component of n, if available.
4604func (n *StructOrUnion) Position() (r token.Position) {
4605 if n == nil {
4606 return r
4607 }
4608
4609 return n.Token.Position()
4610}
4611
4612// StructOrUnionSpecifierCase represents case numbers of production StructOrUnionSpecifier
4613type StructOrUnionSpecifierCase int
4614
4615// Values of type StructOrUnionSpecifierCase
4616const (
4617 StructOrUnionSpecifierDef StructOrUnionSpecifierCase = iota
4618 StructOrUnionSpecifierTag
4619)
4620
4621// String implements fmt.Stringer
4622func (n StructOrUnionSpecifierCase) String() string {
4623 switch n {
4624 case StructOrUnionSpecifierDef:
4625 return "StructOrUnionSpecifierDef"
4626 case StructOrUnionSpecifierTag:
4627 return "StructOrUnionSpecifierTag"
4628 default:
4629 return fmt.Sprintf("StructOrUnionSpecifierCase(%v)", int(n))
4630 }
4631}
4632
4633// StructOrUnionSpecifier represents data reduced by productions:
4634//
4635// StructOrUnionSpecifier:
4636// StructOrUnion AttributeSpecifierList IDENTIFIER '{' StructDeclarationList '}' // Case StructOrUnionSpecifierDef
4637// | StructOrUnion AttributeSpecifierList IDENTIFIER // Case StructOrUnionSpecifierTag
4638type StructOrUnionSpecifier struct {
4639 lexicalScope Scope
4640 maxAlign int
4641 typ Type
4642 AttributeSpecifierList *AttributeSpecifierList
4643 Case StructOrUnionSpecifierCase `PrettyPrint:"stringer,zero"`
4644 StructDeclarationList *StructDeclarationList
4645 StructOrUnion *StructOrUnion
4646 Token Token
4647 Token2 Token
4648 Token3 Token
4649}
4650
4651// String implements fmt.Stringer.
4652func (n *StructOrUnionSpecifier) String() string { return PrettyString(n) }
4653
4654// Position reports the position of the first component of n, if available.
4655func (n *StructOrUnionSpecifier) Position() (r token.Position) {
4656 if n == nil {
4657 return r
4658 }
4659
4660 switch n.Case {
4661 case 1:
4662 if p := n.StructOrUnion.Position(); p.IsValid() {
4663 return p
4664 }
4665
4666 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
4667 return p
4668 }
4669
4670 return n.Token.Position()
4671 case 0:
4672 if p := n.StructOrUnion.Position(); p.IsValid() {
4673 return p
4674 }
4675
4676 if p := n.AttributeSpecifierList.Position(); p.IsValid() {
4677 return p
4678 }
4679
4680 if p := n.Token.Position(); p.IsValid() {
4681 return p
4682 }
4683
4684 if p := n.Token2.Position(); p.IsValid() {
4685 return p
4686 }
4687
4688 if p := n.StructDeclarationList.Position(); p.IsValid() {
4689 return p
4690 }
4691
4692 return n.Token3.Position()
4693 default:
4694 panic("internal error")
4695 }
4696}
4697
4698// TranslationUnit represents data reduced by productions:
4699//
4700// TranslationUnit:
4701// ExternalDeclaration
4702// | TranslationUnit ExternalDeclaration
4703type TranslationUnit struct {
4704 ExternalDeclaration *ExternalDeclaration
4705 TranslationUnit *TranslationUnit
4706}
4707
4708// String implements fmt.Stringer.
4709func (n *TranslationUnit) String() string { return PrettyString(n) }
4710
4711// Position reports the position of the first component of n, if available.
4712func (n *TranslationUnit) Position() (r token.Position) {
4713 if n == nil {
4714 return r
4715 }
4716
4717 return n.ExternalDeclaration.Position()
4718}
4719
4720// TypeName represents data reduced by production:
4721//
4722// TypeName:
4723// SpecifierQualifierList AbstractDeclarator
4724type TypeName struct {
4725 typ Type
4726 AbstractDeclarator *AbstractDeclarator
4727 SpecifierQualifierList *SpecifierQualifierList
4728}
4729
4730// String implements fmt.Stringer.
4731func (n *TypeName) String() string { return PrettyString(n) }
4732
4733// Position reports the position of the first component of n, if available.
4734func (n *TypeName) Position() (r token.Position) {
4735 if n == nil {
4736 return r
4737 }
4738
4739 if p := n.SpecifierQualifierList.Position(); p.IsValid() {
4740 return p
4741 }
4742
4743 return n.AbstractDeclarator.Position()
4744}
4745
4746// TypeQualifierCase represents case numbers of production TypeQualifier
4747type TypeQualifierCase int
4748
4749// Values of type TypeQualifierCase
4750const (
4751 TypeQualifierConst TypeQualifierCase = iota
4752 TypeQualifierRestrict
4753 TypeQualifierVolatile
4754 TypeQualifierAtomic
4755)
4756
4757// String implements fmt.Stringer
4758func (n TypeQualifierCase) String() string {
4759 switch n {
4760 case TypeQualifierConst:
4761 return "TypeQualifierConst"
4762 case TypeQualifierRestrict:
4763 return "TypeQualifierRestrict"
4764 case TypeQualifierVolatile:
4765 return "TypeQualifierVolatile"
4766 case TypeQualifierAtomic:
4767 return "TypeQualifierAtomic"
4768 default:
4769 return fmt.Sprintf("TypeQualifierCase(%v)", int(n))
4770 }
4771}
4772
4773// TypeQualifier represents data reduced by productions:
4774//
4775// TypeQualifier:
4776// "const" // Case TypeQualifierConst
4777// | "restrict" // Case TypeQualifierRestrict
4778// | "volatile" // Case TypeQualifierVolatile
4779// | "_Atomic" // Case TypeQualifierAtomic
4780type TypeQualifier struct {
4781 Case TypeQualifierCase `PrettyPrint:"stringer,zero"`
4782 Token Token
4783}
4784
4785// String implements fmt.Stringer.
4786func (n *TypeQualifier) String() string { return PrettyString(n) }
4787
4788// Position reports the position of the first component of n, if available.
4789func (n *TypeQualifier) Position() (r token.Position) {
4790 if n == nil {
4791 return r
4792 }
4793
4794 return n.Token.Position()
4795}
4796
4797// TypeQualifiersCase represents case numbers of production TypeQualifiers
4798type TypeQualifiersCase int
4799
4800// Values of type TypeQualifiersCase
4801const (
4802 TypeQualifiersTypeQual TypeQualifiersCase = iota
4803 TypeQualifiersAttribute
4804 _
4805 _
4806)
4807
4808// String implements fmt.Stringer
4809func (n TypeQualifiersCase) String() string {
4810 switch n {
4811 case TypeQualifiersTypeQual:
4812 return "TypeQualifiersTypeQual"
4813 case TypeQualifiersAttribute:
4814 return "TypeQualifiersAttribute"
4815 default:
4816 return fmt.Sprintf("TypeQualifiersCase(%v)", int(n))
4817 }
4818}
4819
4820// TypeQualifiers represents data reduced by productions:
4821//
4822// TypeQualifiers:
4823// TypeQualifier // Case TypeQualifiersTypeQual
4824// | AttributeSpecifier // Case TypeQualifiersAttribute
4825// | TypeQualifiers TypeQualifier // Case 2
4826// | TypeQualifiers AttributeSpecifier // Case 3
4827type TypeQualifiers struct {
4828 noStorageClass
4829 AttributeSpecifier *AttributeSpecifier
4830 Case TypeQualifiersCase `PrettyPrint:"stringer,zero"`
4831 TypeQualifier *TypeQualifier
4832 TypeQualifiers *TypeQualifiers
4833}
4834
4835// String implements fmt.Stringer.
4836func (n *TypeQualifiers) String() string { return PrettyString(n) }
4837
4838// Position reports the position of the first component of n, if available.
4839func (n *TypeQualifiers) Position() (r token.Position) {
4840 if n == nil {
4841 return r
4842 }
4843
4844 switch n.Case {
4845 case 1:
4846 return n.AttributeSpecifier.Position()
4847 case 0:
4848 return n.TypeQualifier.Position()
4849 case 3:
4850 if p := n.TypeQualifiers.Position(); p.IsValid() {
4851 return p
4852 }
4853
4854 return n.AttributeSpecifier.Position()
4855 case 2:
4856 if p := n.TypeQualifiers.Position(); p.IsValid() {
4857 return p
4858 }
4859
4860 return n.TypeQualifier.Position()
4861 default:
4862 panic("internal error")
4863 }
4864}
4865
4866// TypeSpecifierCase represents case numbers of production TypeSpecifier
4867type TypeSpecifierCase int
4868
4869// Values of type TypeSpecifierCase
4870const (
4871 TypeSpecifierVoid TypeSpecifierCase = iota
4872 TypeSpecifierChar
4873 TypeSpecifierShort
4874 TypeSpecifierInt
4875 TypeSpecifierInt8
4876 TypeSpecifierInt16
4877 TypeSpecifierInt32
4878 TypeSpecifierInt64
4879 TypeSpecifierInt128
4880 TypeSpecifierLong
4881 TypeSpecifierFloat
4882 TypeSpecifierFloat16
4883 TypeSpecifierDecimal32
4884 TypeSpecifierDecimal64
4885 TypeSpecifierDecimal128
4886 TypeSpecifierFloat128
4887 TypeSpecifierFloat80
4888 TypeSpecifierDouble
4889 TypeSpecifierSigned
4890 TypeSpecifierUnsigned
4891 TypeSpecifierBool
4892 TypeSpecifierComplex
4893 TypeSpecifierStructOrUnion
4894 TypeSpecifierEnum
4895 TypeSpecifierTypedefName
4896 TypeSpecifierTypeofExpr
4897 TypeSpecifierTypeofType
4898 TypeSpecifierAtomic
4899 TypeSpecifierFract
4900 TypeSpecifierSat
4901 TypeSpecifierAccum
4902 TypeSpecifierFloat32
4903 TypeSpecifierFloat64
4904 TypeSpecifierFloat32x
4905 TypeSpecifierFloat64x
4906)
4907
4908// String implements fmt.Stringer
4909func (n TypeSpecifierCase) String() string {
4910 switch n {
4911 case TypeSpecifierVoid:
4912 return "TypeSpecifierVoid"
4913 case TypeSpecifierChar:
4914 return "TypeSpecifierChar"
4915 case TypeSpecifierShort:
4916 return "TypeSpecifierShort"
4917 case TypeSpecifierInt:
4918 return "TypeSpecifierInt"
4919 case TypeSpecifierInt8:
4920 return "TypeSpecifierInt8"
4921 case TypeSpecifierInt16:
4922 return "TypeSpecifierInt16"
4923 case TypeSpecifierInt32:
4924 return "TypeSpecifierInt32"
4925 case TypeSpecifierInt64:
4926 return "TypeSpecifierInt64"
4927 case TypeSpecifierInt128:
4928 return "TypeSpecifierInt128"
4929 case TypeSpecifierLong:
4930 return "TypeSpecifierLong"
4931 case TypeSpecifierFloat:
4932 return "TypeSpecifierFloat"
4933 case TypeSpecifierFloat16:
4934 return "TypeSpecifierFloat16"
4935 case TypeSpecifierDecimal32:
4936 return "TypeSpecifierDecimal32"
4937 case TypeSpecifierDecimal64:
4938 return "TypeSpecifierDecimal64"
4939 case TypeSpecifierDecimal128:
4940 return "TypeSpecifierDecimal128"
4941 case TypeSpecifierFloat128:
4942 return "TypeSpecifierFloat128"
4943 case TypeSpecifierFloat80:
4944 return "TypeSpecifierFloat80"
4945 case TypeSpecifierDouble:
4946 return "TypeSpecifierDouble"
4947 case TypeSpecifierSigned:
4948 return "TypeSpecifierSigned"
4949 case TypeSpecifierUnsigned:
4950 return "TypeSpecifierUnsigned"
4951 case TypeSpecifierBool:
4952 return "TypeSpecifierBool"
4953 case TypeSpecifierComplex:
4954 return "TypeSpecifierComplex"
4955 case TypeSpecifierStructOrUnion:
4956 return "TypeSpecifierStructOrUnion"
4957 case TypeSpecifierEnum:
4958 return "TypeSpecifierEnum"
4959 case TypeSpecifierTypedefName:
4960 return "TypeSpecifierTypedefName"
4961 case TypeSpecifierTypeofExpr:
4962 return "TypeSpecifierTypeofExpr"
4963 case TypeSpecifierTypeofType:
4964 return "TypeSpecifierTypeofType"
4965 case TypeSpecifierAtomic:
4966 return "TypeSpecifierAtomic"
4967 case TypeSpecifierFract:
4968 return "TypeSpecifierFract"
4969 case TypeSpecifierSat:
4970 return "TypeSpecifierSat"
4971 case TypeSpecifierAccum:
4972 return "TypeSpecifierAccum"
4973 case TypeSpecifierFloat32:
4974 return "TypeSpecifierFloat32"
4975 case TypeSpecifierFloat64:
4976 return "TypeSpecifierFloat64"
4977 case TypeSpecifierFloat32x:
4978 return "TypeSpecifierFloat32x"
4979 case TypeSpecifierFloat64x:
4980 return "TypeSpecifierFloat64x"
4981 default:
4982 return fmt.Sprintf("TypeSpecifierCase(%v)", int(n))
4983 }
4984}
4985
4986// TypeSpecifier represents data reduced by productions:
4987//
4988// TypeSpecifier:
4989// "void" // Case TypeSpecifierVoid
4990// | "char" // Case TypeSpecifierChar
4991// | "short" // Case TypeSpecifierShort
4992// | "int" // Case TypeSpecifierInt
4993// | "__int8" // Case TypeSpecifierInt8
4994// | "__int16" // Case TypeSpecifierInt16
4995// | "__int32" // Case TypeSpecifierInt32
4996// | "__int64" // Case TypeSpecifierInt64
4997// | "__int128" // Case TypeSpecifierInt128
4998// | "long" // Case TypeSpecifierLong
4999// | "float" // Case TypeSpecifierFloat
5000// | "__fp16" // Case TypeSpecifierFloat16
5001// | "_Decimal32" // Case TypeSpecifierDecimal32
5002// | "_Decimal64" // Case TypeSpecifierDecimal64
5003// | "_Decimal128" // Case TypeSpecifierDecimal128
5004// | "_Float128" // Case TypeSpecifierFloat128
5005// | "__float80" // Case TypeSpecifierFloat80
5006// | "double" // Case TypeSpecifierDouble
5007// | "signed" // Case TypeSpecifierSigned
5008// | "unsigned" // Case TypeSpecifierUnsigned
5009// | "_Bool" // Case TypeSpecifierBool
5010// | "_Complex" // Case TypeSpecifierComplex
5011// | StructOrUnionSpecifier // Case TypeSpecifierStructOrUnion
5012// | EnumSpecifier // Case TypeSpecifierEnum
5013// | TYPEDEFNAME // Case TypeSpecifierTypedefName
5014// | "typeof" '(' Expression ')' // Case TypeSpecifierTypeofExpr
5015// | "typeof" '(' TypeName ')' // Case TypeSpecifierTypeofType
5016// | AtomicTypeSpecifier // Case TypeSpecifierAtomic
5017// | "_Fract" // Case TypeSpecifierFract
5018// | "_Sat" // Case TypeSpecifierSat
5019// | "_Accum" // Case TypeSpecifierAccum
5020// | "_Float32" // Case TypeSpecifierFloat32
5021// | "_Float64" // Case TypeSpecifierFloat64
5022// | "_Float32x" // Case TypeSpecifierFloat32x
5023// | "_Float64x" // Case TypeSpecifierFloat64x
5024type TypeSpecifier struct {
5025 resolvedIn Scope // Case TypedefName
5026 typ Type
5027 AtomicTypeSpecifier *AtomicTypeSpecifier
5028 Case TypeSpecifierCase `PrettyPrint:"stringer,zero"`
5029 EnumSpecifier *EnumSpecifier
5030 Expression *Expression
5031 StructOrUnionSpecifier *StructOrUnionSpecifier
5032 Token Token
5033 Token2 Token
5034 Token3 Token
5035 TypeName *TypeName
5036}
5037
5038// String implements fmt.Stringer.
5039func (n *TypeSpecifier) String() string { return PrettyString(n) }
5040
5041// Position reports the position of the first component of n, if available.
5042func (n *TypeSpecifier) Position() (r token.Position) {
5043 if n == nil {
5044 return r
5045 }
5046
5047 switch n.Case {
5048 case 27:
5049 return n.AtomicTypeSpecifier.Position()
5050 case 23:
5051 return n.EnumSpecifier.Position()
5052 case 22:
5053 return n.StructOrUnionSpecifier.Position()
5054 case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 28, 29, 30, 31, 32, 33, 34:
5055 return n.Token.Position()
5056 case 25:
5057 if p := n.Token.Position(); p.IsValid() {
5058 return p
5059 }
5060
5061 if p := n.Token2.Position(); p.IsValid() {
5062 return p
5063 }
5064
5065 if p := n.Expression.Position(); p.IsValid() {
5066 return p
5067 }
5068
5069 return n.Token3.Position()
5070 case 26:
5071 if p := n.Token.Position(); p.IsValid() {
5072 return p
5073 }
5074
5075 if p := n.Token2.Position(); p.IsValid() {
5076 return p
5077 }
5078
5079 if p := n.TypeName.Position(); p.IsValid() {
5080 return p
5081 }
5082
5083 return n.Token3.Position()
5084 default:
5085 panic("internal error")
5086 }
5087}
5088
5089// UnaryExpressionCase represents case numbers of production UnaryExpression
5090type UnaryExpressionCase int
5091
5092// Values of type UnaryExpressionCase
5093const (
5094 UnaryExpressionPostfix UnaryExpressionCase = iota
5095 UnaryExpressionInc
5096 UnaryExpressionDec
5097 UnaryExpressionAddrof
5098 UnaryExpressionDeref
5099 UnaryExpressionPlus
5100 UnaryExpressionMinus
5101 UnaryExpressionCpl
5102 UnaryExpressionNot
5103 UnaryExpressionSizeofExpr
5104 UnaryExpressionSizeofType
5105 UnaryExpressionLabelAddr
5106 UnaryExpressionAlignofExpr
5107 UnaryExpressionAlignofType
5108 UnaryExpressionImag
5109 UnaryExpressionReal
5110)
5111
5112// String implements fmt.Stringer
5113func (n UnaryExpressionCase) String() string {
5114 switch n {
5115 case UnaryExpressionPostfix:
5116 return "UnaryExpressionPostfix"
5117 case UnaryExpressionInc:
5118 return "UnaryExpressionInc"
5119 case UnaryExpressionDec:
5120 return "UnaryExpressionDec"
5121 case UnaryExpressionAddrof:
5122 return "UnaryExpressionAddrof"
5123 case UnaryExpressionDeref:
5124 return "UnaryExpressionDeref"
5125 case UnaryExpressionPlus:
5126 return "UnaryExpressionPlus"
5127 case UnaryExpressionMinus:
5128 return "UnaryExpressionMinus"
5129 case UnaryExpressionCpl:
5130 return "UnaryExpressionCpl"
5131 case UnaryExpressionNot:
5132 return "UnaryExpressionNot"
5133 case UnaryExpressionSizeofExpr:
5134 return "UnaryExpressionSizeofExpr"
5135 case UnaryExpressionSizeofType:
5136 return "UnaryExpressionSizeofType"
5137 case UnaryExpressionLabelAddr:
5138 return "UnaryExpressionLabelAddr"
5139 case UnaryExpressionAlignofExpr:
5140 return "UnaryExpressionAlignofExpr"
5141 case UnaryExpressionAlignofType:
5142 return "UnaryExpressionAlignofType"
5143 case UnaryExpressionImag:
5144 return "UnaryExpressionImag"
5145 case UnaryExpressionReal:
5146 return "UnaryExpressionReal"
5147 default:
5148 return fmt.Sprintf("UnaryExpressionCase(%v)", int(n))
5149 }
5150}
5151
5152// UnaryExpression represents data reduced by productions:
5153//
5154// UnaryExpression:
5155// PostfixExpression // Case UnaryExpressionPostfix
5156// | "++" UnaryExpression // Case UnaryExpressionInc
5157// | "--" UnaryExpression // Case UnaryExpressionDec
5158// | '&' CastExpression // Case UnaryExpressionAddrof
5159// | '*' CastExpression // Case UnaryExpressionDeref
5160// | '+' CastExpression // Case UnaryExpressionPlus
5161// | '-' CastExpression // Case UnaryExpressionMinus
5162// | '~' CastExpression // Case UnaryExpressionCpl
5163// | '!' CastExpression // Case UnaryExpressionNot
5164// | "sizeof" UnaryExpression // Case UnaryExpressionSizeofExpr
5165// | "sizeof" '(' TypeName ')' // Case UnaryExpressionSizeofType
5166// | "&&" IDENTIFIER // Case UnaryExpressionLabelAddr
5167// | "_Alignof" UnaryExpression // Case UnaryExpressionAlignofExpr
5168// | "_Alignof" '(' TypeName ')' // Case UnaryExpressionAlignofType
5169// | "__imag__" UnaryExpression // Case UnaryExpressionImag
5170// | "__real__" UnaryExpression // Case UnaryExpressionReal
5171type UnaryExpression struct {
5172 Operand Operand
5173 lexicalScope Scope
5174 IsSideEffectsFree bool
5175 Case UnaryExpressionCase `PrettyPrint:"stringer,zero"`
5176 CastExpression *CastExpression
5177 PostfixExpression *PostfixExpression
5178 Token Token
5179 Token2 Token
5180 Token3 Token
5181 TypeName *TypeName
5182 UnaryExpression *UnaryExpression
5183}
5184
5185// String implements fmt.Stringer.
5186func (n *UnaryExpression) String() string { return PrettyString(n) }
5187
5188// Position reports the position of the first component of n, if available.
5189func (n *UnaryExpression) Position() (r token.Position) {
5190 if n == nil {
5191 return r
5192 }
5193
5194 switch n.Case {
5195 case 0:
5196 return n.PostfixExpression.Position()
5197 case 3, 4, 5, 6, 7, 8:
5198 if p := n.Token.Position(); p.IsValid() {
5199 return p
5200 }
5201
5202 return n.CastExpression.Position()
5203 case 11:
5204 if p := n.Token.Position(); p.IsValid() {
5205 return p
5206 }
5207
5208 return n.Token2.Position()
5209 case 10, 13:
5210 if p := n.Token.Position(); p.IsValid() {
5211 return p
5212 }
5213
5214 if p := n.Token2.Position(); p.IsValid() {
5215 return p
5216 }
5217
5218 if p := n.TypeName.Position(); p.IsValid() {
5219 return p
5220 }
5221
5222 return n.Token3.Position()
5223 case 1, 2, 9, 12, 14, 15:
5224 if p := n.Token.Position(); p.IsValid() {
5225 return p
5226 }
5227
5228 return n.UnaryExpression.Position()
5229 default:
5230 panic("internal error")
5231 }
5232}
Note: See TracBrowser for help on using the repository browser.