| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | // Code generated by yy. DO NOT EDIT. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Copyright 2019 The CC Authors. All rights reserved. | 
					
						
							|  |  |  | // Use of this source code is governed by a BSD-style | 
					
						
							|  |  |  | // license that can be found in the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package cc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"modernc.org/token" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AbstractDeclaratorCase represents case numbers of production AbstractDeclarator | 
					
						
							|  |  |  | type AbstractDeclaratorCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type AbstractDeclaratorCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	AbstractDeclaratorPtr AbstractDeclaratorCase = iota | 
					
						
							|  |  |  | 	AbstractDeclaratorDecl | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n AbstractDeclaratorCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case AbstractDeclaratorPtr: | 
					
						
							|  |  |  | 		return "AbstractDeclaratorPtr" | 
					
						
							|  |  |  | 	case AbstractDeclaratorDecl: | 
					
						
							|  |  |  | 		return "AbstractDeclaratorDecl" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("AbstractDeclaratorCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AbstractDeclarator represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AbstractDeclarator: | 
					
						
							|  |  |  | //	        Pointer                           // Case AbstractDeclaratorPtr | 
					
						
							|  |  |  | //	|       Pointer DirectAbstractDeclarator  // Case AbstractDeclaratorDecl | 
					
						
							|  |  |  | type AbstractDeclarator struct { | 
					
						
							|  |  |  | 	typ                      Type | 
					
						
							|  |  |  | 	Case                     AbstractDeclaratorCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	DirectAbstractDeclarator *DirectAbstractDeclarator | 
					
						
							|  |  |  | 	Pointer                  *Pointer | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AbstractDeclarator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AbstractDeclarator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.Pointer.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Pointer.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.DirectAbstractDeclarator.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AdditiveExpressionCase represents case numbers of production AdditiveExpression | 
					
						
							|  |  |  | type AdditiveExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type AdditiveExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	AdditiveExpressionMul AdditiveExpressionCase = iota | 
					
						
							|  |  |  | 	AdditiveExpressionAdd | 
					
						
							|  |  |  | 	AdditiveExpressionSub | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n AdditiveExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case AdditiveExpressionMul: | 
					
						
							|  |  |  | 		return "AdditiveExpressionMul" | 
					
						
							|  |  |  | 	case AdditiveExpressionAdd: | 
					
						
							|  |  |  | 		return "AdditiveExpressionAdd" | 
					
						
							|  |  |  | 	case AdditiveExpressionSub: | 
					
						
							|  |  |  | 		return "AdditiveExpressionSub" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("AdditiveExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AdditiveExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AdditiveExpression: | 
					
						
							|  |  |  | //	        MultiplicativeExpression                         // Case AdditiveExpressionMul | 
					
						
							|  |  |  | //	|       AdditiveExpression '+' MultiplicativeExpression  // Case AdditiveExpressionAdd | 
					
						
							|  |  |  | //	|       AdditiveExpression '-' MultiplicativeExpression  // Case AdditiveExpressionSub | 
					
						
							|  |  |  | type AdditiveExpression struct { | 
					
						
							|  |  |  | 	lexicalScope             Scope | 
					
						
							|  |  |  | 	Operand                  Operand | 
					
						
							|  |  |  | 	promote                  Type | 
					
						
							|  |  |  | 	IsSideEffectsFree        bool | 
					
						
							|  |  |  | 	AdditiveExpression       *AdditiveExpression | 
					
						
							|  |  |  | 	Case                     AdditiveExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	MultiplicativeExpression *MultiplicativeExpression | 
					
						
							|  |  |  | 	Token                    Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AdditiveExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AdditiveExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1, 2: | 
					
						
							|  |  |  | 		if p := n.AdditiveExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.MultiplicativeExpression.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.MultiplicativeExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AlignmentSpecifierCase represents case numbers of production AlignmentSpecifier | 
					
						
							|  |  |  | type AlignmentSpecifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type AlignmentSpecifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	AlignmentSpecifierAlignasType AlignmentSpecifierCase = iota | 
					
						
							|  |  |  | 	AlignmentSpecifierAlignasExpr | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n AlignmentSpecifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case AlignmentSpecifierAlignasType: | 
					
						
							|  |  |  | 		return "AlignmentSpecifierAlignasType" | 
					
						
							|  |  |  | 	case AlignmentSpecifierAlignasExpr: | 
					
						
							|  |  |  | 		return "AlignmentSpecifierAlignasExpr" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("AlignmentSpecifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AlignmentSpecifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AlignmentSpecifier: | 
					
						
							|  |  |  | //	        "_Alignas" '(' TypeName ')'            // Case AlignmentSpecifierAlignasType | 
					
						
							|  |  |  | //	|       "_Alignas" '(' ConstantExpression ')'  // Case AlignmentSpecifierAlignasExpr | 
					
						
							|  |  |  | type AlignmentSpecifier struct { | 
					
						
							|  |  |  | 	Case               AlignmentSpecifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ConstantExpression *ConstantExpression | 
					
						
							|  |  |  | 	Token              Token | 
					
						
							|  |  |  | 	Token2             Token | 
					
						
							|  |  |  | 	Token3             Token | 
					
						
							|  |  |  | 	TypeName           *TypeName | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AlignmentSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AlignmentSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ConstantExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeName.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AndExpressionCase represents case numbers of production AndExpression | 
					
						
							|  |  |  | type AndExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type AndExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	AndExpressionEq AndExpressionCase = iota | 
					
						
							|  |  |  | 	AndExpressionAnd | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n AndExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case AndExpressionEq: | 
					
						
							|  |  |  | 		return "AndExpressionEq" | 
					
						
							|  |  |  | 	case AndExpressionAnd: | 
					
						
							|  |  |  | 		return "AndExpressionAnd" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("AndExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AndExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AndExpression: | 
					
						
							|  |  |  | //	        EqualityExpression                    // Case AndExpressionEq | 
					
						
							|  |  |  | //	|       AndExpression '&' EqualityExpression  // Case AndExpressionAnd | 
					
						
							|  |  |  | type AndExpression struct { | 
					
						
							|  |  |  | 	Operand            Operand | 
					
						
							|  |  |  | 	promote            Type | 
					
						
							|  |  |  | 	IsSideEffectsFree  bool | 
					
						
							|  |  |  | 	AndExpression      *AndExpression | 
					
						
							|  |  |  | 	Case               AndExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	EqualityExpression *EqualityExpression | 
					
						
							|  |  |  | 	Token              Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AndExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AndExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.AndExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.EqualityExpression.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.EqualityExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ArgumentExpressionList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ArgumentExpressionList: | 
					
						
							|  |  |  | //	        AssignmentExpression | 
					
						
							|  |  |  | //	|       ArgumentExpressionList ',' AssignmentExpression | 
					
						
							|  |  |  | type ArgumentExpressionList struct { | 
					
						
							|  |  |  | 	ArgumentExpressionList *ArgumentExpressionList | 
					
						
							|  |  |  | 	AssignmentExpression   *AssignmentExpression | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ArgumentExpressionList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ArgumentExpressionList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AssignmentExpression.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Asm represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Asm: | 
					
						
							|  |  |  | //	        "__asm__" AsmQualifierList '(' STRINGLITERAL AsmArgList ')' | 
					
						
							|  |  |  | type Asm struct { | 
					
						
							|  |  |  | 	AsmArgList       *AsmArgList | 
					
						
							|  |  |  | 	AsmQualifierList *AsmQualifierList | 
					
						
							|  |  |  | 	Token            Token | 
					
						
							|  |  |  | 	Token2           Token | 
					
						
							|  |  |  | 	Token3           Token | 
					
						
							|  |  |  | 	Token4           Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Asm) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Asm) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.AsmQualifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.AsmArgList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token4.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmArgList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AsmArgList: | 
					
						
							|  |  |  | //	        ':' AsmExpressionList | 
					
						
							|  |  |  | //	|       AsmArgList ':' AsmExpressionList | 
					
						
							|  |  |  | type AsmArgList struct { | 
					
						
							|  |  |  | 	AsmArgList        *AsmArgList | 
					
						
							|  |  |  | 	AsmExpressionList *AsmExpressionList | 
					
						
							|  |  |  | 	Token             Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AsmArgList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AsmArgList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AsmExpressionList.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmExpressionList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AsmExpressionList: | 
					
						
							|  |  |  | //	        AsmIndex AssignmentExpression | 
					
						
							|  |  |  | //	|       AsmExpressionList ',' AsmIndex AssignmentExpression | 
					
						
							|  |  |  | type AsmExpressionList struct { | 
					
						
							|  |  |  | 	AsmExpressionList    *AsmExpressionList | 
					
						
							|  |  |  | 	AsmIndex             *AsmIndex | 
					
						
							|  |  |  | 	AssignmentExpression *AssignmentExpression | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AsmExpressionList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AsmExpressionList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.AsmIndex.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AssignmentExpression.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmFunctionDefinition represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AsmFunctionDefinition: | 
					
						
							|  |  |  | //	        DeclarationSpecifiers Declarator AsmStatement | 
					
						
							|  |  |  | type AsmFunctionDefinition struct { | 
					
						
							|  |  |  | 	AsmStatement          *AsmStatement | 
					
						
							|  |  |  | 	DeclarationSpecifiers *DeclarationSpecifiers | 
					
						
							|  |  |  | 	Declarator            *Declarator | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AsmFunctionDefinition) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AsmFunctionDefinition) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.DeclarationSpecifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AsmStatement.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmIndex represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AsmIndex: | 
					
						
							|  |  |  | //	        '[' Expression ']' | 
					
						
							|  |  |  | type AsmIndex struct { | 
					
						
							|  |  |  | 	Expression *Expression | 
					
						
							|  |  |  | 	Token      Token | 
					
						
							|  |  |  | 	Token2     Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AsmIndex) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AsmIndex) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token2.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmQualifierCase represents case numbers of production AsmQualifier | 
					
						
							|  |  |  | type AsmQualifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type AsmQualifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	AsmQualifierVolatile AsmQualifierCase = iota | 
					
						
							|  |  |  | 	AsmQualifierInline | 
					
						
							|  |  |  | 	AsmQualifierGoto | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n AsmQualifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case AsmQualifierVolatile: | 
					
						
							|  |  |  | 		return "AsmQualifierVolatile" | 
					
						
							|  |  |  | 	case AsmQualifierInline: | 
					
						
							|  |  |  | 		return "AsmQualifierInline" | 
					
						
							|  |  |  | 	case AsmQualifierGoto: | 
					
						
							|  |  |  | 		return "AsmQualifierGoto" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("AsmQualifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmQualifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AsmQualifier: | 
					
						
							|  |  |  | //	        "volatile"  // Case AsmQualifierVolatile | 
					
						
							|  |  |  | //	|       "inline"    // Case AsmQualifierInline | 
					
						
							|  |  |  | //	|       "goto"      // Case AsmQualifierGoto | 
					
						
							|  |  |  | type AsmQualifier struct { | 
					
						
							|  |  |  | 	Case  AsmQualifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Token Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AsmQualifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AsmQualifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmQualifierList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AsmQualifierList: | 
					
						
							|  |  |  | //	        AsmQualifier | 
					
						
							|  |  |  | //	|       AsmQualifierList AsmQualifier | 
					
						
							|  |  |  | type AsmQualifierList struct { | 
					
						
							|  |  |  | 	AsmQualifier     *AsmQualifier | 
					
						
							|  |  |  | 	AsmQualifierList *AsmQualifierList | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AsmQualifierList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AsmQualifierList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AsmQualifier.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AsmStatement represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AsmStatement: | 
					
						
							|  |  |  | //	        Asm AttributeSpecifierList ';' | 
					
						
							|  |  |  | type AsmStatement struct { | 
					
						
							|  |  |  | 	Asm                    *Asm | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AsmStatement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AsmStatement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Asm.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AssignmentExpressionCase represents case numbers of production AssignmentExpression | 
					
						
							|  |  |  | type AssignmentExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type AssignmentExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	AssignmentExpressionCond AssignmentExpressionCase = iota | 
					
						
							|  |  |  | 	AssignmentExpressionAssign | 
					
						
							|  |  |  | 	AssignmentExpressionMul | 
					
						
							|  |  |  | 	AssignmentExpressionDiv | 
					
						
							|  |  |  | 	AssignmentExpressionMod | 
					
						
							|  |  |  | 	AssignmentExpressionAdd | 
					
						
							|  |  |  | 	AssignmentExpressionSub | 
					
						
							|  |  |  | 	AssignmentExpressionLsh | 
					
						
							|  |  |  | 	AssignmentExpressionRsh | 
					
						
							|  |  |  | 	AssignmentExpressionAnd | 
					
						
							|  |  |  | 	AssignmentExpressionXor | 
					
						
							|  |  |  | 	AssignmentExpressionOr | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n AssignmentExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case AssignmentExpressionCond: | 
					
						
							|  |  |  | 		return "AssignmentExpressionCond" | 
					
						
							|  |  |  | 	case AssignmentExpressionAssign: | 
					
						
							|  |  |  | 		return "AssignmentExpressionAssign" | 
					
						
							|  |  |  | 	case AssignmentExpressionMul: | 
					
						
							|  |  |  | 		return "AssignmentExpressionMul" | 
					
						
							|  |  |  | 	case AssignmentExpressionDiv: | 
					
						
							|  |  |  | 		return "AssignmentExpressionDiv" | 
					
						
							|  |  |  | 	case AssignmentExpressionMod: | 
					
						
							|  |  |  | 		return "AssignmentExpressionMod" | 
					
						
							|  |  |  | 	case AssignmentExpressionAdd: | 
					
						
							|  |  |  | 		return "AssignmentExpressionAdd" | 
					
						
							|  |  |  | 	case AssignmentExpressionSub: | 
					
						
							|  |  |  | 		return "AssignmentExpressionSub" | 
					
						
							|  |  |  | 	case AssignmentExpressionLsh: | 
					
						
							|  |  |  | 		return "AssignmentExpressionLsh" | 
					
						
							|  |  |  | 	case AssignmentExpressionRsh: | 
					
						
							|  |  |  | 		return "AssignmentExpressionRsh" | 
					
						
							|  |  |  | 	case AssignmentExpressionAnd: | 
					
						
							|  |  |  | 		return "AssignmentExpressionAnd" | 
					
						
							|  |  |  | 	case AssignmentExpressionXor: | 
					
						
							|  |  |  | 		return "AssignmentExpressionXor" | 
					
						
							|  |  |  | 	case AssignmentExpressionOr: | 
					
						
							|  |  |  | 		return "AssignmentExpressionOr" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("AssignmentExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AssignmentExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AssignmentExpression: | 
					
						
							|  |  |  | //	        ConditionalExpression                       // Case AssignmentExpressionCond | 
					
						
							|  |  |  | //	|       UnaryExpression '=' AssignmentExpression    // Case AssignmentExpressionAssign | 
					
						
							|  |  |  | //	|       UnaryExpression "*=" AssignmentExpression   // Case AssignmentExpressionMul | 
					
						
							|  |  |  | //	|       UnaryExpression "/=" AssignmentExpression   // Case AssignmentExpressionDiv | 
					
						
							|  |  |  | //	|       UnaryExpression "%=" AssignmentExpression   // Case AssignmentExpressionMod | 
					
						
							|  |  |  | //	|       UnaryExpression "+=" AssignmentExpression   // Case AssignmentExpressionAdd | 
					
						
							|  |  |  | //	|       UnaryExpression "-=" AssignmentExpression   // Case AssignmentExpressionSub | 
					
						
							|  |  |  | //	|       UnaryExpression "<<=" AssignmentExpression  // Case AssignmentExpressionLsh | 
					
						
							|  |  |  | //	|       UnaryExpression ">>=" AssignmentExpression  // Case AssignmentExpressionRsh | 
					
						
							|  |  |  | //	|       UnaryExpression "&=" AssignmentExpression   // Case AssignmentExpressionAnd | 
					
						
							|  |  |  | //	|       UnaryExpression "^=" AssignmentExpression   // Case AssignmentExpressionXor | 
					
						
							|  |  |  | //	|       UnaryExpression "|=" AssignmentExpression   // Case AssignmentExpressionOr | 
					
						
							|  |  |  | type AssignmentExpression struct { | 
					
						
							|  |  |  | 	Operand               Operand | 
					
						
							|  |  |  | 	InitializerOperand    Operand // When the expression is used in an initializer | 
					
						
							|  |  |  | 	lexicalScope          Scope | 
					
						
							|  |  |  | 	promote               Type | 
					
						
							|  |  |  | 	IsSideEffectsFree     bool | 
					
						
							|  |  |  | 	AssignmentExpression  *AssignmentExpression | 
					
						
							|  |  |  | 	Case                  AssignmentExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ConditionalExpression *ConditionalExpression | 
					
						
							|  |  |  | 	Token                 Token | 
					
						
							|  |  |  | 	UnaryExpression       *UnaryExpression | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AssignmentExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AssignmentExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.ConditionalExpression.Position() | 
					
						
							|  |  |  | 	case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11: | 
					
						
							|  |  |  | 		if p := n.UnaryExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AssignmentExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AtomicTypeSpecifier represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AtomicTypeSpecifier: | 
					
						
							|  |  |  | //	        "_Atomic" '(' TypeName ')' | 
					
						
							|  |  |  | type AtomicTypeSpecifier struct { | 
					
						
							| 
									
										
										
										
											2021-11-27 15:26:58 +01:00
										 |  |  | 	list     []*TypeSpecifier | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 	Token    Token | 
					
						
							|  |  |  | 	Token2   Token | 
					
						
							|  |  |  | 	Token3   Token | 
					
						
							|  |  |  | 	TypeName *TypeName | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AtomicTypeSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AtomicTypeSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.TypeName.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token3.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AttributeSpecifier represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AttributeSpecifier: | 
					
						
							|  |  |  | //	        "__attribute__" '(' '(' AttributeValueList ')' ')' | 
					
						
							|  |  |  | type AttributeSpecifier struct { | 
					
						
							|  |  |  | 	AttributeValueList *AttributeValueList | 
					
						
							|  |  |  | 	Token              Token | 
					
						
							|  |  |  | 	Token2             Token | 
					
						
							|  |  |  | 	Token3             Token | 
					
						
							|  |  |  | 	Token4             Token | 
					
						
							|  |  |  | 	Token5             Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AttributeSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AttributeSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.AttributeValueList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token5.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AttributeSpecifierList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AttributeSpecifierList: | 
					
						
							|  |  |  | //	        AttributeSpecifier | 
					
						
							|  |  |  | //	|       AttributeSpecifierList AttributeSpecifier | 
					
						
							|  |  |  | type AttributeSpecifierList struct { | 
					
						
							|  |  |  | 	AttributeSpecifier     *AttributeSpecifier | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AttributeSpecifierList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AttributeSpecifierList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AttributeSpecifier.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AttributeValueCase represents case numbers of production AttributeValue | 
					
						
							|  |  |  | type AttributeValueCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type AttributeValueCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	AttributeValueIdent AttributeValueCase = iota | 
					
						
							|  |  |  | 	AttributeValueExpr | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n AttributeValueCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case AttributeValueIdent: | 
					
						
							|  |  |  | 		return "AttributeValueIdent" | 
					
						
							|  |  |  | 	case AttributeValueExpr: | 
					
						
							|  |  |  | 		return "AttributeValueExpr" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("AttributeValueCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AttributeValue represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AttributeValue: | 
					
						
							|  |  |  | //	        IDENTIFIER                         // Case AttributeValueIdent | 
					
						
							|  |  |  | //	|       IDENTIFIER '(' ExpressionList ')'  // Case AttributeValueExpr | 
					
						
							|  |  |  | type AttributeValue struct { | 
					
						
							|  |  |  | 	lexicalScope   Scope | 
					
						
							|  |  |  | 	Case           AttributeValueCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ExpressionList *ExpressionList | 
					
						
							|  |  |  | 	Token          Token | 
					
						
							|  |  |  | 	Token2         Token | 
					
						
							|  |  |  | 	Token3         Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AttributeValue) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AttributeValue) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.Token.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ExpressionList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AttributeValueList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	AttributeValueList: | 
					
						
							|  |  |  | //	        AttributeValue | 
					
						
							|  |  |  | //	|       AttributeValueList ',' AttributeValue | 
					
						
							|  |  |  | type AttributeValueList struct { | 
					
						
							|  |  |  | 	AttributeValue     *AttributeValue | 
					
						
							|  |  |  | 	AttributeValueList *AttributeValueList | 
					
						
							|  |  |  | 	Token              Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *AttributeValueList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *AttributeValueList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AttributeValue.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // BlockItemCase represents case numbers of production BlockItem | 
					
						
							|  |  |  | type BlockItemCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type BlockItemCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	BlockItemDecl BlockItemCase = iota | 
					
						
							|  |  |  | 	BlockItemStmt | 
					
						
							|  |  |  | 	BlockItemLabel | 
					
						
							|  |  |  | 	BlockItemFuncDef | 
					
						
							|  |  |  | 	BlockItemPragma | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n BlockItemCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case BlockItemDecl: | 
					
						
							|  |  |  | 		return "BlockItemDecl" | 
					
						
							|  |  |  | 	case BlockItemStmt: | 
					
						
							|  |  |  | 		return "BlockItemStmt" | 
					
						
							|  |  |  | 	case BlockItemLabel: | 
					
						
							|  |  |  | 		return "BlockItemLabel" | 
					
						
							|  |  |  | 	case BlockItemFuncDef: | 
					
						
							|  |  |  | 		return "BlockItemFuncDef" | 
					
						
							|  |  |  | 	case BlockItemPragma: | 
					
						
							|  |  |  | 		return "BlockItemPragma" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("BlockItemCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // BlockItem represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	BlockItem: | 
					
						
							|  |  |  | //	        Declaration                                         // Case BlockItemDecl | 
					
						
							|  |  |  | //	|       Statement                                           // Case BlockItemStmt | 
					
						
							|  |  |  | //	|       LabelDeclaration                                    // Case BlockItemLabel | 
					
						
							|  |  |  | //	|       DeclarationSpecifiers Declarator CompoundStatement  // Case BlockItemFuncDef | 
					
						
							|  |  |  | //	|       PragmaSTDC                                          // Case BlockItemPragma | 
					
						
							|  |  |  | type BlockItem struct { | 
					
						
							|  |  |  | 	fn                    *FunctionDefinition   // Case FuncDef | 
					
						
							|  |  |  | 	closure               map[StringID]struct{} // Case FuncDef | 
					
						
							|  |  |  | 	Last                  bool | 
					
						
							|  |  |  | 	Case                  BlockItemCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	CompoundStatement     *CompoundStatement | 
					
						
							|  |  |  | 	Declaration           *Declaration | 
					
						
							|  |  |  | 	DeclarationSpecifiers *DeclarationSpecifiers | 
					
						
							|  |  |  | 	Declarator            *Declarator | 
					
						
							|  |  |  | 	LabelDeclaration      *LabelDeclaration | 
					
						
							|  |  |  | 	PragmaSTDC            *PragmaSTDC | 
					
						
							|  |  |  | 	Statement             *Statement | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *BlockItem) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *BlockItem) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.Declaration.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.DeclarationSpecifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.CompoundStatement.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return n.LabelDeclaration.Position() | 
					
						
							|  |  |  | 	case 4: | 
					
						
							|  |  |  | 		return n.PragmaSTDC.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // BlockItemList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	BlockItemList: | 
					
						
							|  |  |  | //	        BlockItem | 
					
						
							|  |  |  | //	|       BlockItemList BlockItem | 
					
						
							|  |  |  | type BlockItemList struct { | 
					
						
							|  |  |  | 	BlockItem     *BlockItem | 
					
						
							|  |  |  | 	BlockItemList *BlockItemList | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *BlockItemList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *BlockItemList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.BlockItem.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // CastExpressionCase represents case numbers of production CastExpression | 
					
						
							|  |  |  | type CastExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type CastExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	CastExpressionUnary CastExpressionCase = iota | 
					
						
							|  |  |  | 	CastExpressionCast | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n CastExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case CastExpressionUnary: | 
					
						
							|  |  |  | 		return "CastExpressionUnary" | 
					
						
							|  |  |  | 	case CastExpressionCast: | 
					
						
							|  |  |  | 		return "CastExpressionCast" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("CastExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // CastExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	CastExpression: | 
					
						
							|  |  |  | //	        UnaryExpression                  // Case CastExpressionUnary | 
					
						
							|  |  |  | //	|       '(' TypeName ')' CastExpression  // Case CastExpressionCast | 
					
						
							|  |  |  | type CastExpression struct { | 
					
						
							|  |  |  | 	Operand           Operand | 
					
						
							|  |  |  | 	IsSideEffectsFree bool | 
					
						
							|  |  |  | 	Case              CastExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	CastExpression    *CastExpression | 
					
						
							|  |  |  | 	Token             Token | 
					
						
							|  |  |  | 	Token2            Token | 
					
						
							|  |  |  | 	TypeName          *TypeName | 
					
						
							|  |  |  | 	UnaryExpression   *UnaryExpression | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *CastExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *CastExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeName.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.CastExpression.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.UnaryExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // CompoundStatement represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	CompoundStatement: | 
					
						
							|  |  |  | //	        '{' BlockItemList '}' | 
					
						
							|  |  |  | type CompoundStatement struct { | 
					
						
							|  |  |  | 	Operand       Operand | 
					
						
							|  |  |  | 	children      []*CompoundStatement | 
					
						
							|  |  |  | 	declarations  []*Declaration | 
					
						
							|  |  |  | 	isJumpTarget  bool | 
					
						
							|  |  |  | 	labeledStmts  []*LabeledStatement | 
					
						
							|  |  |  | 	parent        *CompoundStatement | 
					
						
							|  |  |  | 	scope         Scope | 
					
						
							|  |  |  | 	BlockItemList *BlockItemList | 
					
						
							|  |  |  | 	Token         Token | 
					
						
							|  |  |  | 	Token2        Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *CompoundStatement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *CompoundStatement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.BlockItemList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token2.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ConditionalExpressionCase represents case numbers of production ConditionalExpression | 
					
						
							|  |  |  | type ConditionalExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type ConditionalExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ConditionalExpressionLOr ConditionalExpressionCase = iota | 
					
						
							|  |  |  | 	ConditionalExpressionCond | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n ConditionalExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case ConditionalExpressionLOr: | 
					
						
							|  |  |  | 		return "ConditionalExpressionLOr" | 
					
						
							|  |  |  | 	case ConditionalExpressionCond: | 
					
						
							|  |  |  | 		return "ConditionalExpressionCond" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("ConditionalExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ConditionalExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ConditionalExpression: | 
					
						
							|  |  |  | //	        LogicalOrExpression                                           // Case ConditionalExpressionLOr | 
					
						
							|  |  |  | //	|       LogicalOrExpression '?' Expression ':' ConditionalExpression  // Case ConditionalExpressionCond | 
					
						
							|  |  |  | type ConditionalExpression struct { | 
					
						
							|  |  |  | 	Operand               Operand | 
					
						
							|  |  |  | 	IsSideEffectsFree     bool | 
					
						
							|  |  |  | 	Case                  ConditionalExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ConditionalExpression *ConditionalExpression | 
					
						
							|  |  |  | 	Expression            *Expression | 
					
						
							|  |  |  | 	LogicalOrExpression   *LogicalOrExpression | 
					
						
							|  |  |  | 	Token                 Token | 
					
						
							|  |  |  | 	Token2                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ConditionalExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ConditionalExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.LogicalOrExpression.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.LogicalOrExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.ConditionalExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ConstantExpression represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ConstantExpression: | 
					
						
							|  |  |  | //	        ConditionalExpression | 
					
						
							|  |  |  | type ConstantExpression struct { | 
					
						
							|  |  |  | 	Operand               Operand | 
					
						
							|  |  |  | 	ConditionalExpression *ConditionalExpression | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ConstantExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ConstantExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.ConditionalExpression.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Declaration represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Declaration: | 
					
						
							|  |  |  | //	        DeclarationSpecifiers InitDeclaratorList ';' | 
					
						
							|  |  |  | type Declaration struct { | 
					
						
							|  |  |  | 	DeclarationSpecifiers *DeclarationSpecifiers | 
					
						
							|  |  |  | 	InitDeclaratorList    *InitDeclaratorList | 
					
						
							|  |  |  | 	Token                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Declaration) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Declaration) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.DeclarationSpecifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.InitDeclaratorList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DeclarationList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	DeclarationList: | 
					
						
							|  |  |  | //	        Declaration | 
					
						
							|  |  |  | //	|       DeclarationList Declaration | 
					
						
							|  |  |  | type DeclarationList struct { | 
					
						
							|  |  |  | 	Declaration     *Declaration | 
					
						
							|  |  |  | 	DeclarationList *DeclarationList | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *DeclarationList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *DeclarationList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Declaration.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DeclarationSpecifiersCase represents case numbers of production DeclarationSpecifiers | 
					
						
							|  |  |  | type DeclarationSpecifiersCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type DeclarationSpecifiersCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	DeclarationSpecifiersStorage DeclarationSpecifiersCase = iota | 
					
						
							|  |  |  | 	DeclarationSpecifiersTypeSpec | 
					
						
							|  |  |  | 	DeclarationSpecifiersTypeQual | 
					
						
							|  |  |  | 	DeclarationSpecifiersFunc | 
					
						
							|  |  |  | 	DeclarationSpecifiersAlignSpec | 
					
						
							|  |  |  | 	DeclarationSpecifiersAttribute | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n DeclarationSpecifiersCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case DeclarationSpecifiersStorage: | 
					
						
							|  |  |  | 		return "DeclarationSpecifiersStorage" | 
					
						
							|  |  |  | 	case DeclarationSpecifiersTypeSpec: | 
					
						
							|  |  |  | 		return "DeclarationSpecifiersTypeSpec" | 
					
						
							|  |  |  | 	case DeclarationSpecifiersTypeQual: | 
					
						
							|  |  |  | 		return "DeclarationSpecifiersTypeQual" | 
					
						
							|  |  |  | 	case DeclarationSpecifiersFunc: | 
					
						
							|  |  |  | 		return "DeclarationSpecifiersFunc" | 
					
						
							|  |  |  | 	case DeclarationSpecifiersAlignSpec: | 
					
						
							|  |  |  | 		return "DeclarationSpecifiersAlignSpec" | 
					
						
							|  |  |  | 	case DeclarationSpecifiersAttribute: | 
					
						
							|  |  |  | 		return "DeclarationSpecifiersAttribute" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("DeclarationSpecifiersCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DeclarationSpecifiers represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	DeclarationSpecifiers: | 
					
						
							|  |  |  | //	        StorageClassSpecifier DeclarationSpecifiers  // Case DeclarationSpecifiersStorage | 
					
						
							|  |  |  | //	|       TypeSpecifier DeclarationSpecifiers          // Case DeclarationSpecifiersTypeSpec | 
					
						
							|  |  |  | //	|       TypeQualifier DeclarationSpecifiers          // Case DeclarationSpecifiersTypeQual | 
					
						
							|  |  |  | //	|       FunctionSpecifier DeclarationSpecifiers      // Case DeclarationSpecifiersFunc | 
					
						
							|  |  |  | //	|       AlignmentSpecifier DeclarationSpecifiers     // Case DeclarationSpecifiersAlignSpec | 
					
						
							|  |  |  | //	|       AttributeSpecifier DeclarationSpecifiers     // Case DeclarationSpecifiersAttribute | 
					
						
							|  |  |  | type DeclarationSpecifiers struct { | 
					
						
							|  |  |  | 	class                 storageClass | 
					
						
							|  |  |  | 	AlignmentSpecifier    *AlignmentSpecifier | 
					
						
							|  |  |  | 	AttributeSpecifier    *AttributeSpecifier | 
					
						
							|  |  |  | 	Case                  DeclarationSpecifiersCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	DeclarationSpecifiers *DeclarationSpecifiers | 
					
						
							|  |  |  | 	FunctionSpecifier     *FunctionSpecifier | 
					
						
							|  |  |  | 	StorageClassSpecifier *StorageClassSpecifier | 
					
						
							|  |  |  | 	TypeQualifier         *TypeQualifier | 
					
						
							|  |  |  | 	TypeSpecifier         *TypeSpecifier | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *DeclarationSpecifiers) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *DeclarationSpecifiers) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 4: | 
					
						
							|  |  |  | 		if p := n.AlignmentSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.DeclarationSpecifiers.Position() | 
					
						
							|  |  |  | 	case 5: | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.DeclarationSpecifiers.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.FunctionSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.DeclarationSpecifiers.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.StorageClassSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.DeclarationSpecifiers.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.TypeQualifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.DeclarationSpecifiers.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.TypeSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.DeclarationSpecifiers.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Declarator represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Declarator: | 
					
						
							|  |  |  | //	        Pointer DirectDeclarator AttributeSpecifierList | 
					
						
							|  |  |  | type Declarator struct { | 
					
						
							|  |  |  | 	Linkage                Linkage | 
					
						
							|  |  |  | 	Read                   int | 
					
						
							|  |  |  | 	StorageClass           StorageClass | 
					
						
							|  |  |  | 	Write                  int | 
					
						
							|  |  |  | 	funcDefinition         *FunctionDefinition | 
					
						
							|  |  |  | 	lhs                    map[*Declarator]struct{} | 
					
						
							|  |  |  | 	td                     typeDescriptor | 
					
						
							|  |  |  | 	typ                    Type | 
					
						
							|  |  |  | 	AddressTaken           bool | 
					
						
							|  |  |  | 	IsParameter            bool | 
					
						
							|  |  |  | 	IsTypedefName          bool | 
					
						
							|  |  |  | 	SubjectOfAsgnOp        bool | 
					
						
							|  |  |  | 	SubjectOfIncDec        bool | 
					
						
							|  |  |  | 	called                 bool | 
					
						
							|  |  |  | 	fnDef                  bool | 
					
						
							|  |  |  | 	hasInitializer         bool | 
					
						
							| 
									
										
										
										
											2021-11-27 15:26:58 +01:00
										 |  |  | 	implicit               bool | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	DirectDeclarator       *DirectDeclarator | 
					
						
							|  |  |  | 	Pointer                *Pointer | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Declarator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Declarator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Pointer.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.DirectDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AttributeSpecifierList.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Designation represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Designation: | 
					
						
							|  |  |  | //	        DesignatorList '=' | 
					
						
							|  |  |  | type Designation struct { | 
					
						
							|  |  |  | 	DesignatorList *DesignatorList | 
					
						
							|  |  |  | 	Token          Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Designation) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Designation) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.DesignatorList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DesignatorCase represents case numbers of production Designator | 
					
						
							|  |  |  | type DesignatorCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type DesignatorCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	DesignatorIndex DesignatorCase = iota | 
					
						
							|  |  |  | 	DesignatorField | 
					
						
							|  |  |  | 	DesignatorField2 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n DesignatorCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case DesignatorIndex: | 
					
						
							|  |  |  | 		return "DesignatorIndex" | 
					
						
							|  |  |  | 	case DesignatorField: | 
					
						
							|  |  |  | 		return "DesignatorField" | 
					
						
							|  |  |  | 	case DesignatorField2: | 
					
						
							|  |  |  | 		return "DesignatorField2" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("DesignatorCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Designator represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Designator: | 
					
						
							|  |  |  | //	        '[' ConstantExpression ']'  // Case DesignatorIndex | 
					
						
							|  |  |  | //	|       '.' IDENTIFIER              // Case DesignatorField | 
					
						
							|  |  |  | //	|       IDENTIFIER ':'              // Case DesignatorField2 | 
					
						
							|  |  |  | type Designator struct { | 
					
						
							|  |  |  | 	lexicalScope       Scope | 
					
						
							|  |  |  | 	Case               DesignatorCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ConstantExpression *ConstantExpression | 
					
						
							|  |  |  | 	Token              Token | 
					
						
							|  |  |  | 	Token2             Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Designator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Designator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ConstantExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 1, 2: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DesignatorList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	DesignatorList: | 
					
						
							|  |  |  | //	        Designator | 
					
						
							|  |  |  | //	|       DesignatorList Designator | 
					
						
							|  |  |  | type DesignatorList struct { | 
					
						
							|  |  |  | 	Designator     *Designator | 
					
						
							|  |  |  | 	DesignatorList *DesignatorList | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *DesignatorList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *DesignatorList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Designator.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DirectAbstractDeclaratorCase represents case numbers of production DirectAbstractDeclarator | 
					
						
							|  |  |  | type DirectAbstractDeclaratorCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type DirectAbstractDeclaratorCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	DirectAbstractDeclaratorDecl DirectAbstractDeclaratorCase = iota | 
					
						
							|  |  |  | 	DirectAbstractDeclaratorArr | 
					
						
							|  |  |  | 	DirectAbstractDeclaratorStaticArr | 
					
						
							|  |  |  | 	DirectAbstractDeclaratorArrStatic | 
					
						
							|  |  |  | 	DirectAbstractDeclaratorArrStar | 
					
						
							|  |  |  | 	DirectAbstractDeclaratorFunc | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n DirectAbstractDeclaratorCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case DirectAbstractDeclaratorDecl: | 
					
						
							|  |  |  | 		return "DirectAbstractDeclaratorDecl" | 
					
						
							|  |  |  | 	case DirectAbstractDeclaratorArr: | 
					
						
							|  |  |  | 		return "DirectAbstractDeclaratorArr" | 
					
						
							|  |  |  | 	case DirectAbstractDeclaratorStaticArr: | 
					
						
							|  |  |  | 		return "DirectAbstractDeclaratorStaticArr" | 
					
						
							|  |  |  | 	case DirectAbstractDeclaratorArrStatic: | 
					
						
							|  |  |  | 		return "DirectAbstractDeclaratorArrStatic" | 
					
						
							|  |  |  | 	case DirectAbstractDeclaratorArrStar: | 
					
						
							|  |  |  | 		return "DirectAbstractDeclaratorArrStar" | 
					
						
							|  |  |  | 	case DirectAbstractDeclaratorFunc: | 
					
						
							|  |  |  | 		return "DirectAbstractDeclaratorFunc" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("DirectAbstractDeclaratorCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DirectAbstractDeclarator represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	DirectAbstractDeclarator: | 
					
						
							|  |  |  | //	        '(' AbstractDeclarator ')'                                                     // Case DirectAbstractDeclaratorDecl | 
					
						
							|  |  |  | //	|       DirectAbstractDeclarator '[' TypeQualifiers AssignmentExpression ']'           // Case DirectAbstractDeclaratorArr | 
					
						
							|  |  |  | //	|       DirectAbstractDeclarator '[' "static" TypeQualifiers AssignmentExpression ']'  // Case DirectAbstractDeclaratorStaticArr | 
					
						
							|  |  |  | //	|       DirectAbstractDeclarator '[' TypeQualifiers "static" AssignmentExpression ']'  // Case DirectAbstractDeclaratorArrStatic | 
					
						
							|  |  |  | //	|       DirectAbstractDeclarator '[' '*' ']'                                           // Case DirectAbstractDeclaratorArrStar | 
					
						
							|  |  |  | //	|       DirectAbstractDeclarator '(' ParameterTypeList ')'                             // Case DirectAbstractDeclaratorFunc | 
					
						
							|  |  |  | type DirectAbstractDeclarator struct { | 
					
						
							|  |  |  | 	paramScope               Scope | 
					
						
							|  |  |  | 	typeQualifiers           *typeBase | 
					
						
							|  |  |  | 	AbstractDeclarator       *AbstractDeclarator | 
					
						
							|  |  |  | 	AssignmentExpression     *AssignmentExpression | 
					
						
							|  |  |  | 	Case                     DirectAbstractDeclaratorCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	DirectAbstractDeclarator *DirectAbstractDeclarator | 
					
						
							|  |  |  | 	ParameterTypeList        *ParameterTypeList | 
					
						
							|  |  |  | 	Token                    Token | 
					
						
							|  |  |  | 	Token2                   Token | 
					
						
							|  |  |  | 	Token3                   Token | 
					
						
							|  |  |  | 	TypeQualifiers           *TypeQualifiers | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *DirectAbstractDeclarator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *DirectAbstractDeclarator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 5: | 
					
						
							|  |  |  | 		if p := n.DirectAbstractDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ParameterTypeList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 4: | 
					
						
							|  |  |  | 		if p := n.DirectAbstractDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.DirectAbstractDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.DirectAbstractDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.DirectAbstractDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AbstractDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DirectDeclaratorCase represents case numbers of production DirectDeclarator | 
					
						
							|  |  |  | type DirectDeclaratorCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type DirectDeclaratorCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	DirectDeclaratorIdent DirectDeclaratorCase = iota | 
					
						
							|  |  |  | 	DirectDeclaratorDecl | 
					
						
							|  |  |  | 	DirectDeclaratorArr | 
					
						
							|  |  |  | 	DirectDeclaratorStaticArr | 
					
						
							|  |  |  | 	DirectDeclaratorArrStatic | 
					
						
							|  |  |  | 	DirectDeclaratorStar | 
					
						
							|  |  |  | 	DirectDeclaratorFuncParam | 
					
						
							|  |  |  | 	DirectDeclaratorFuncIdent | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n DirectDeclaratorCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case DirectDeclaratorIdent: | 
					
						
							|  |  |  | 		return "DirectDeclaratorIdent" | 
					
						
							|  |  |  | 	case DirectDeclaratorDecl: | 
					
						
							|  |  |  | 		return "DirectDeclaratorDecl" | 
					
						
							|  |  |  | 	case DirectDeclaratorArr: | 
					
						
							|  |  |  | 		return "DirectDeclaratorArr" | 
					
						
							|  |  |  | 	case DirectDeclaratorStaticArr: | 
					
						
							|  |  |  | 		return "DirectDeclaratorStaticArr" | 
					
						
							|  |  |  | 	case DirectDeclaratorArrStatic: | 
					
						
							|  |  |  | 		return "DirectDeclaratorArrStatic" | 
					
						
							|  |  |  | 	case DirectDeclaratorStar: | 
					
						
							|  |  |  | 		return "DirectDeclaratorStar" | 
					
						
							|  |  |  | 	case DirectDeclaratorFuncParam: | 
					
						
							|  |  |  | 		return "DirectDeclaratorFuncParam" | 
					
						
							|  |  |  | 	case DirectDeclaratorFuncIdent: | 
					
						
							|  |  |  | 		return "DirectDeclaratorFuncIdent" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("DirectDeclaratorCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // DirectDeclarator represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	DirectDeclarator: | 
					
						
							|  |  |  | //	        IDENTIFIER Asm                                                         // Case DirectDeclaratorIdent | 
					
						
							|  |  |  | //	|       '(' AttributeSpecifierList Declarator ')'                              // Case DirectDeclaratorDecl | 
					
						
							|  |  |  | //	|       DirectDeclarator '[' TypeQualifiers AssignmentExpression ']'           // Case DirectDeclaratorArr | 
					
						
							|  |  |  | //	|       DirectDeclarator '[' "static" TypeQualifiers AssignmentExpression ']'  // Case DirectDeclaratorStaticArr | 
					
						
							|  |  |  | //	|       DirectDeclarator '[' TypeQualifiers "static" AssignmentExpression ']'  // Case DirectDeclaratorArrStatic | 
					
						
							|  |  |  | //	|       DirectDeclarator '[' TypeQualifiers '*' ']'                            // Case DirectDeclaratorStar | 
					
						
							|  |  |  | //	|       DirectDeclarator '(' ParameterTypeList ')'                             // Case DirectDeclaratorFuncParam | 
					
						
							|  |  |  | //	|       DirectDeclarator '(' IdentifierList ')'                                // Case DirectDeclaratorFuncIdent | 
					
						
							|  |  |  | type DirectDeclarator struct { | 
					
						
							|  |  |  | 	lexicalScope           Scope | 
					
						
							|  |  |  | 	paramScope             Scope | 
					
						
							|  |  |  | 	typeQualifiers         *typeBase | 
					
						
							|  |  |  | 	idListNoDeclList       bool | 
					
						
							|  |  |  | 	Asm                    *Asm | 
					
						
							|  |  |  | 	AssignmentExpression   *AssignmentExpression | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   DirectDeclaratorCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Declarator             *Declarator | 
					
						
							|  |  |  | 	DirectDeclarator       *DirectDeclarator | 
					
						
							|  |  |  | 	IdentifierList         *IdentifierList | 
					
						
							|  |  |  | 	ParameterTypeList      *ParameterTypeList | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | 	Token2                 Token | 
					
						
							|  |  |  | 	Token3                 Token | 
					
						
							|  |  |  | 	TypeQualifiers         *TypeQualifiers | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *DirectDeclarator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *DirectDeclarator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 7: | 
					
						
							|  |  |  | 		if p := n.DirectDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.IdentifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 6: | 
					
						
							|  |  |  | 		if p := n.DirectDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ParameterTypeList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.DirectDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.DirectDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 4: | 
					
						
							|  |  |  | 		if p := n.DirectDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 5: | 
					
						
							|  |  |  | 		if p := n.DirectDeclarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Asm.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // EnumSpecifierCase represents case numbers of production EnumSpecifier | 
					
						
							|  |  |  | type EnumSpecifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type EnumSpecifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	EnumSpecifierDef EnumSpecifierCase = iota | 
					
						
							|  |  |  | 	EnumSpecifierTag | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n EnumSpecifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case EnumSpecifierDef: | 
					
						
							|  |  |  | 		return "EnumSpecifierDef" | 
					
						
							|  |  |  | 	case EnumSpecifierTag: | 
					
						
							|  |  |  | 		return "EnumSpecifierTag" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("EnumSpecifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // EnumSpecifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	EnumSpecifier: | 
					
						
							|  |  |  | //	        "enum" AttributeSpecifierList IDENTIFIER '{' EnumeratorList ',' '}'  // Case EnumSpecifierDef | 
					
						
							|  |  |  | //	|       "enum" AttributeSpecifierList IDENTIFIER                             // Case EnumSpecifierTag | 
					
						
							|  |  |  | type EnumSpecifier struct { | 
					
						
							|  |  |  | 	lexicalScope           Scope | 
					
						
							|  |  |  | 	typ                    Type | 
					
						
							|  |  |  | 	min                    Value | 
					
						
							|  |  |  | 	max                    Value | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   EnumSpecifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	EnumeratorList         *EnumeratorList | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | 	Token2                 Token | 
					
						
							|  |  |  | 	Token3                 Token | 
					
						
							|  |  |  | 	Token4                 Token | 
					
						
							|  |  |  | 	Token5                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *EnumSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *EnumSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.EnumeratorList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token5.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // EnumeratorCase represents case numbers of production Enumerator | 
					
						
							|  |  |  | type EnumeratorCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type EnumeratorCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	EnumeratorIdent EnumeratorCase = iota | 
					
						
							|  |  |  | 	EnumeratorExpr | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n EnumeratorCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case EnumeratorIdent: | 
					
						
							|  |  |  | 		return "EnumeratorIdent" | 
					
						
							|  |  |  | 	case EnumeratorExpr: | 
					
						
							|  |  |  | 		return "EnumeratorExpr" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("EnumeratorCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Enumerator represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Enumerator: | 
					
						
							|  |  |  | //	        IDENTIFIER AttributeSpecifierList                         // Case EnumeratorIdent | 
					
						
							|  |  |  | //	|       IDENTIFIER AttributeSpecifierList '=' ConstantExpression  // Case EnumeratorExpr | 
					
						
							|  |  |  | type Enumerator struct { | 
					
						
							|  |  |  | 	lexicalScope           Scope | 
					
						
							|  |  |  | 	Operand                Operand | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   EnumeratorCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ConstantExpression     *ConstantExpression | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | 	Token2                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Enumerator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Enumerator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AttributeSpecifierList.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.ConstantExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // EnumeratorList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	EnumeratorList: | 
					
						
							|  |  |  | //	        Enumerator | 
					
						
							|  |  |  | //	|       EnumeratorList ',' Enumerator | 
					
						
							|  |  |  | type EnumeratorList struct { | 
					
						
							|  |  |  | 	Enumerator     *Enumerator | 
					
						
							|  |  |  | 	EnumeratorList *EnumeratorList | 
					
						
							|  |  |  | 	Token          Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *EnumeratorList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *EnumeratorList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Enumerator.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // EqualityExpressionCase represents case numbers of production EqualityExpression | 
					
						
							|  |  |  | type EqualityExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type EqualityExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	EqualityExpressionRel EqualityExpressionCase = iota | 
					
						
							|  |  |  | 	EqualityExpressionEq | 
					
						
							|  |  |  | 	EqualityExpressionNeq | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n EqualityExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case EqualityExpressionRel: | 
					
						
							|  |  |  | 		return "EqualityExpressionRel" | 
					
						
							|  |  |  | 	case EqualityExpressionEq: | 
					
						
							|  |  |  | 		return "EqualityExpressionEq" | 
					
						
							|  |  |  | 	case EqualityExpressionNeq: | 
					
						
							|  |  |  | 		return "EqualityExpressionNeq" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("EqualityExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // EqualityExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	EqualityExpression: | 
					
						
							|  |  |  | //	        RelationalExpression                          // Case EqualityExpressionRel | 
					
						
							|  |  |  | //	|       EqualityExpression "==" RelationalExpression  // Case EqualityExpressionEq | 
					
						
							|  |  |  | //	|       EqualityExpression "!=" RelationalExpression  // Case EqualityExpressionNeq | 
					
						
							|  |  |  | type EqualityExpression struct { | 
					
						
							|  |  |  | 	Operand              Operand | 
					
						
							|  |  |  | 	promote              Type | 
					
						
							|  |  |  | 	IsSideEffectsFree    bool | 
					
						
							|  |  |  | 	Case                 EqualityExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	EqualityExpression   *EqualityExpression | 
					
						
							|  |  |  | 	RelationalExpression *RelationalExpression | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *EqualityExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *EqualityExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1, 2: | 
					
						
							|  |  |  | 		if p := n.EqualityExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.RelationalExpression.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.RelationalExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ExclusiveOrExpressionCase represents case numbers of production ExclusiveOrExpression | 
					
						
							|  |  |  | type ExclusiveOrExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type ExclusiveOrExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ExclusiveOrExpressionAnd ExclusiveOrExpressionCase = iota | 
					
						
							|  |  |  | 	ExclusiveOrExpressionXor | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n ExclusiveOrExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case ExclusiveOrExpressionAnd: | 
					
						
							|  |  |  | 		return "ExclusiveOrExpressionAnd" | 
					
						
							|  |  |  | 	case ExclusiveOrExpressionXor: | 
					
						
							|  |  |  | 		return "ExclusiveOrExpressionXor" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("ExclusiveOrExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ExclusiveOrExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ExclusiveOrExpression: | 
					
						
							|  |  |  | //	        AndExpression                            // Case ExclusiveOrExpressionAnd | 
					
						
							|  |  |  | //	|       ExclusiveOrExpression '^' AndExpression  // Case ExclusiveOrExpressionXor | 
					
						
							|  |  |  | type ExclusiveOrExpression struct { | 
					
						
							|  |  |  | 	Operand               Operand | 
					
						
							|  |  |  | 	promote               Type | 
					
						
							|  |  |  | 	IsSideEffectsFree     bool | 
					
						
							|  |  |  | 	AndExpression         *AndExpression | 
					
						
							|  |  |  | 	Case                  ExclusiveOrExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ExclusiveOrExpression *ExclusiveOrExpression | 
					
						
							|  |  |  | 	Token                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ExclusiveOrExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ExclusiveOrExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.AndExpression.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.ExclusiveOrExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AndExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ExpressionCase represents case numbers of production Expression | 
					
						
							|  |  |  | type ExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type ExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ExpressionAssign ExpressionCase = iota | 
					
						
							|  |  |  | 	ExpressionComma | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n ExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case ExpressionAssign: | 
					
						
							|  |  |  | 		return "ExpressionAssign" | 
					
						
							|  |  |  | 	case ExpressionComma: | 
					
						
							|  |  |  | 		return "ExpressionComma" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("ExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Expression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Expression: | 
					
						
							|  |  |  | //	        AssignmentExpression                 // Case ExpressionAssign | 
					
						
							|  |  |  | //	|       Expression ',' AssignmentExpression  // Case ExpressionComma | 
					
						
							|  |  |  | type Expression struct { | 
					
						
							|  |  |  | 	Operand              Operand | 
					
						
							|  |  |  | 	IsSideEffectsFree    bool | 
					
						
							|  |  |  | 	AssignmentExpression *AssignmentExpression | 
					
						
							|  |  |  | 	Case                 ExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Expression           *Expression | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Expression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Expression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.AssignmentExpression.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AssignmentExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ExpressionList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ExpressionList: | 
					
						
							|  |  |  | //	        AssignmentExpression | 
					
						
							|  |  |  | //	|       ExpressionList ',' AssignmentExpression | 
					
						
							|  |  |  | type ExpressionList struct { | 
					
						
							|  |  |  | 	AssignmentExpression *AssignmentExpression | 
					
						
							|  |  |  | 	ExpressionList       *ExpressionList | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ExpressionList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ExpressionList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AssignmentExpression.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ExpressionStatement represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ExpressionStatement: | 
					
						
							|  |  |  | //	        Expression AttributeSpecifierList ';' | 
					
						
							|  |  |  | type ExpressionStatement struct { | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Expression             *Expression | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ExpressionStatement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ExpressionStatement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ExternalDeclarationCase represents case numbers of production ExternalDeclaration | 
					
						
							|  |  |  | type ExternalDeclarationCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type ExternalDeclarationCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ExternalDeclarationFuncDef ExternalDeclarationCase = iota | 
					
						
							|  |  |  | 	ExternalDeclarationDecl | 
					
						
							|  |  |  | 	ExternalDeclarationAsm | 
					
						
							|  |  |  | 	ExternalDeclarationAsmStmt | 
					
						
							|  |  |  | 	ExternalDeclarationEmpty | 
					
						
							|  |  |  | 	ExternalDeclarationPragma | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n ExternalDeclarationCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case ExternalDeclarationFuncDef: | 
					
						
							|  |  |  | 		return "ExternalDeclarationFuncDef" | 
					
						
							|  |  |  | 	case ExternalDeclarationDecl: | 
					
						
							|  |  |  | 		return "ExternalDeclarationDecl" | 
					
						
							|  |  |  | 	case ExternalDeclarationAsm: | 
					
						
							|  |  |  | 		return "ExternalDeclarationAsm" | 
					
						
							|  |  |  | 	case ExternalDeclarationAsmStmt: | 
					
						
							|  |  |  | 		return "ExternalDeclarationAsmStmt" | 
					
						
							|  |  |  | 	case ExternalDeclarationEmpty: | 
					
						
							|  |  |  | 		return "ExternalDeclarationEmpty" | 
					
						
							|  |  |  | 	case ExternalDeclarationPragma: | 
					
						
							|  |  |  | 		return "ExternalDeclarationPragma" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("ExternalDeclarationCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ExternalDeclaration represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ExternalDeclaration: | 
					
						
							|  |  |  | //	        FunctionDefinition     // Case ExternalDeclarationFuncDef | 
					
						
							|  |  |  | //	|       Declaration            // Case ExternalDeclarationDecl | 
					
						
							|  |  |  | //	|       AsmFunctionDefinition  // Case ExternalDeclarationAsm | 
					
						
							|  |  |  | //	|       AsmStatement           // Case ExternalDeclarationAsmStmt | 
					
						
							|  |  |  | //	|       ';'                    // Case ExternalDeclarationEmpty | 
					
						
							|  |  |  | //	|       PragmaSTDC             // Case ExternalDeclarationPragma | 
					
						
							|  |  |  | type ExternalDeclaration struct { | 
					
						
							|  |  |  | 	AsmFunctionDefinition *AsmFunctionDefinition | 
					
						
							|  |  |  | 	AsmStatement          *AsmStatement | 
					
						
							|  |  |  | 	Case                  ExternalDeclarationCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Declaration           *Declaration | 
					
						
							|  |  |  | 	FunctionDefinition    *FunctionDefinition | 
					
						
							|  |  |  | 	PragmaSTDC            *PragmaSTDC | 
					
						
							|  |  |  | 	Token                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ExternalDeclaration) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ExternalDeclaration) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return n.AsmFunctionDefinition.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		return n.AsmStatement.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		return n.Declaration.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.FunctionDefinition.Position() | 
					
						
							|  |  |  | 	case 5: | 
					
						
							|  |  |  | 		return n.PragmaSTDC.Position() | 
					
						
							|  |  |  | 	case 4: | 
					
						
							|  |  |  | 		return n.Token.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // FunctionDefinition represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	FunctionDefinition: | 
					
						
							|  |  |  | //	        DeclarationSpecifiers Declarator DeclarationList CompoundStatement | 
					
						
							|  |  |  | type FunctionDefinition struct { | 
					
						
							|  |  |  | 	CallSiteComplexExpr   []*AssignmentExpression | 
					
						
							|  |  |  | 	CompositeLiterals     []*PostfixExpression | 
					
						
							|  |  |  | 	ComputedGotos         map[StringID]*UnaryExpression | 
					
						
							|  |  |  | 	Gotos                 map[StringID]*JumpStatement | 
					
						
							|  |  |  | 	InitDeclarators       []*InitDeclarator | 
					
						
							|  |  |  | 	Labels                map[StringID]*LabeledStatement | 
					
						
							|  |  |  | 	ReturnComplexExpr     []*Expression | 
					
						
							|  |  |  | 	VLAs                  []*Declarator | 
					
						
							|  |  |  | 	compoundStatements    []*CompoundStatement | 
					
						
							|  |  |  | 	checked               bool | 
					
						
							|  |  |  | 	CompoundStatement     *CompoundStatement | 
					
						
							|  |  |  | 	DeclarationList       *DeclarationList | 
					
						
							|  |  |  | 	DeclarationSpecifiers *DeclarationSpecifiers | 
					
						
							|  |  |  | 	Declarator            *Declarator | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *FunctionDefinition) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *FunctionDefinition) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.DeclarationSpecifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.DeclarationList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.CompoundStatement.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // FunctionSpecifierCase represents case numbers of production FunctionSpecifier | 
					
						
							|  |  |  | type FunctionSpecifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type FunctionSpecifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	FunctionSpecifierInline FunctionSpecifierCase = iota | 
					
						
							|  |  |  | 	FunctionSpecifierNoreturn | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n FunctionSpecifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case FunctionSpecifierInline: | 
					
						
							|  |  |  | 		return "FunctionSpecifierInline" | 
					
						
							|  |  |  | 	case FunctionSpecifierNoreturn: | 
					
						
							|  |  |  | 		return "FunctionSpecifierNoreturn" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("FunctionSpecifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // FunctionSpecifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	FunctionSpecifier: | 
					
						
							|  |  |  | //	        "inline"     // Case FunctionSpecifierInline | 
					
						
							|  |  |  | //	|       "_Noreturn"  // Case FunctionSpecifierNoreturn | 
					
						
							|  |  |  | type FunctionSpecifier struct { | 
					
						
							|  |  |  | 	Case  FunctionSpecifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Token Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *FunctionSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *FunctionSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // IdentifierList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	IdentifierList: | 
					
						
							|  |  |  | //	        IDENTIFIER | 
					
						
							|  |  |  | //	|       IdentifierList ',' IDENTIFIER | 
					
						
							|  |  |  | type IdentifierList struct { | 
					
						
							|  |  |  | 	lexicalScope   Scope | 
					
						
							|  |  |  | 	IdentifierList *IdentifierList | 
					
						
							|  |  |  | 	Token          Token | 
					
						
							|  |  |  | 	Token2         Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *IdentifierList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *IdentifierList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // InclusiveOrExpressionCase represents case numbers of production InclusiveOrExpression | 
					
						
							|  |  |  | type InclusiveOrExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type InclusiveOrExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	InclusiveOrExpressionXor InclusiveOrExpressionCase = iota | 
					
						
							|  |  |  | 	InclusiveOrExpressionOr | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n InclusiveOrExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case InclusiveOrExpressionXor: | 
					
						
							|  |  |  | 		return "InclusiveOrExpressionXor" | 
					
						
							|  |  |  | 	case InclusiveOrExpressionOr: | 
					
						
							|  |  |  | 		return "InclusiveOrExpressionOr" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("InclusiveOrExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // InclusiveOrExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	InclusiveOrExpression: | 
					
						
							|  |  |  | //	        ExclusiveOrExpression                            // Case InclusiveOrExpressionXor | 
					
						
							|  |  |  | //	|       InclusiveOrExpression '|' ExclusiveOrExpression  // Case InclusiveOrExpressionOr | 
					
						
							|  |  |  | type InclusiveOrExpression struct { | 
					
						
							|  |  |  | 	Operand               Operand | 
					
						
							|  |  |  | 	promote               Type | 
					
						
							|  |  |  | 	IsSideEffectsFree     bool | 
					
						
							|  |  |  | 	Case                  InclusiveOrExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ExclusiveOrExpression *ExclusiveOrExpression | 
					
						
							|  |  |  | 	InclusiveOrExpression *InclusiveOrExpression | 
					
						
							|  |  |  | 	Token                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *InclusiveOrExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *InclusiveOrExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.ExclusiveOrExpression.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.InclusiveOrExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.ExclusiveOrExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // InitDeclaratorCase represents case numbers of production InitDeclarator | 
					
						
							|  |  |  | type InitDeclaratorCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type InitDeclaratorCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	InitDeclaratorDecl InitDeclaratorCase = iota | 
					
						
							|  |  |  | 	InitDeclaratorInit | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n InitDeclaratorCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case InitDeclaratorDecl: | 
					
						
							|  |  |  | 		return "InitDeclaratorDecl" | 
					
						
							|  |  |  | 	case InitDeclaratorInit: | 
					
						
							|  |  |  | 		return "InitDeclaratorInit" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("InitDeclaratorCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // InitDeclarator represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	InitDeclarator: | 
					
						
							|  |  |  | //	        Declarator AttributeSpecifierList                  // Case InitDeclaratorDecl | 
					
						
							|  |  |  | //	|       Declarator AttributeSpecifierList '=' Initializer  // Case InitDeclaratorInit | 
					
						
							|  |  |  | type InitDeclarator struct { | 
					
						
							|  |  |  | 	initializer            *InitializerValue | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   InitDeclaratorCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Declarator             *Declarator | 
					
						
							|  |  |  | 	Initializer            *Initializer | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *InitDeclarator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *InitDeclarator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AttributeSpecifierList.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Initializer.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // InitDeclaratorList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	InitDeclaratorList: | 
					
						
							|  |  |  | //	        InitDeclarator | 
					
						
							|  |  |  | //	|       InitDeclaratorList ',' AttributeSpecifierList InitDeclarator | 
					
						
							|  |  |  | type InitDeclaratorList struct { | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	InitDeclarator         *InitDeclarator | 
					
						
							|  |  |  | 	InitDeclaratorList     *InitDeclaratorList | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *InitDeclaratorList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *InitDeclaratorList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.InitDeclarator.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // InitializerCase represents case numbers of production Initializer | 
					
						
							|  |  |  | type InitializerCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type InitializerCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	InitializerExpr InitializerCase = iota | 
					
						
							|  |  |  | 	InitializerInitList | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n InitializerCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case InitializerExpr: | 
					
						
							|  |  |  | 		return "InitializerExpr" | 
					
						
							|  |  |  | 	case InitializerInitList: | 
					
						
							|  |  |  | 		return "InitializerInitList" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("InitializerCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Initializer represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Initializer: | 
					
						
							|  |  |  | //	        AssignmentExpression         // Case InitializerExpr | 
					
						
							|  |  |  | //	|       '{' InitializerList ',' '}'  // Case InitializerInitList | 
					
						
							|  |  |  | type Initializer struct { | 
					
						
							|  |  |  | 	Field                Field   // Where aplicable | 
					
						
							|  |  |  | 	Offset               uintptr // Case Expr | 
					
						
							|  |  |  | 	field0               Field | 
					
						
							|  |  |  | 	list                 []*Initializer | 
					
						
							|  |  |  | 	parent               *Initializer | 
					
						
							|  |  |  | 	trailingComma        *Token | 
					
						
							|  |  |  | 	typ                  Type | 
					
						
							|  |  |  | 	isConst              bool | 
					
						
							|  |  |  | 	isZero               bool | 
					
						
							|  |  |  | 	AssignmentExpression *AssignmentExpression | 
					
						
							|  |  |  | 	Case                 InitializerCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	InitializerList      *InitializerList | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | 	Token2               Token | 
					
						
							|  |  |  | 	Token3               Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Initializer) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Initializer) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.AssignmentExpression.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.InitializerList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // InitializerList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	InitializerList: | 
					
						
							|  |  |  | //	        Designation Initializer | 
					
						
							|  |  |  | //	|       InitializerList ',' Designation Initializer | 
					
						
							|  |  |  | type InitializerList struct { | 
					
						
							|  |  |  | 	list            []*Initializer | 
					
						
							|  |  |  | 	isConst         bool | 
					
						
							|  |  |  | 	isZero          bool | 
					
						
							|  |  |  | 	Designation     *Designation | 
					
						
							|  |  |  | 	Initializer     *Initializer | 
					
						
							|  |  |  | 	InitializerList *InitializerList | 
					
						
							|  |  |  | 	Token           Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *InitializerList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *InitializerList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Designation.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Initializer.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // IterationStatementCase represents case numbers of production IterationStatement | 
					
						
							|  |  |  | type IterationStatementCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type IterationStatementCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	IterationStatementWhile IterationStatementCase = iota | 
					
						
							|  |  |  | 	IterationStatementDo | 
					
						
							|  |  |  | 	IterationStatementFor | 
					
						
							|  |  |  | 	IterationStatementForDecl | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n IterationStatementCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case IterationStatementWhile: | 
					
						
							|  |  |  | 		return "IterationStatementWhile" | 
					
						
							|  |  |  | 	case IterationStatementDo: | 
					
						
							|  |  |  | 		return "IterationStatementDo" | 
					
						
							|  |  |  | 	case IterationStatementFor: | 
					
						
							|  |  |  | 		return "IterationStatementFor" | 
					
						
							|  |  |  | 	case IterationStatementForDecl: | 
					
						
							|  |  |  | 		return "IterationStatementForDecl" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("IterationStatementCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // IterationStatement represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	IterationStatement: | 
					
						
							|  |  |  | //	        "while" '(' Expression ')' Statement                              // Case IterationStatementWhile | 
					
						
							|  |  |  | //	|       "do" Statement "while" '(' Expression ')' ';'                     // Case IterationStatementDo | 
					
						
							|  |  |  | //	|       "for" '(' Expression ';' Expression ';' Expression ')' Statement  // Case IterationStatementFor | 
					
						
							|  |  |  | //	|       "for" '(' Declaration Expression ';' Expression ')' Statement     // Case IterationStatementForDecl | 
					
						
							|  |  |  | type IterationStatement struct { | 
					
						
							|  |  |  | 	Case        IterationStatementCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Declaration *Declaration | 
					
						
							|  |  |  | 	Expression  *Expression | 
					
						
							|  |  |  | 	Expression2 *Expression | 
					
						
							|  |  |  | 	Expression3 *Expression | 
					
						
							|  |  |  | 	Statement   *Statement | 
					
						
							|  |  |  | 	Token       Token | 
					
						
							|  |  |  | 	Token2      Token | 
					
						
							|  |  |  | 	Token3      Token | 
					
						
							|  |  |  | 	Token4      Token | 
					
						
							|  |  |  | 	Token5      Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *IterationStatement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *IterationStatement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Statement.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token5.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Declaration.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token5.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // JumpStatementCase represents case numbers of production JumpStatement | 
					
						
							|  |  |  | type JumpStatementCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type JumpStatementCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	JumpStatementGoto JumpStatementCase = iota | 
					
						
							|  |  |  | 	JumpStatementGotoExpr | 
					
						
							|  |  |  | 	JumpStatementContinue | 
					
						
							|  |  |  | 	JumpStatementBreak | 
					
						
							|  |  |  | 	JumpStatementReturn | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n JumpStatementCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case JumpStatementGoto: | 
					
						
							|  |  |  | 		return "JumpStatementGoto" | 
					
						
							|  |  |  | 	case JumpStatementGotoExpr: | 
					
						
							|  |  |  | 		return "JumpStatementGotoExpr" | 
					
						
							|  |  |  | 	case JumpStatementContinue: | 
					
						
							|  |  |  | 		return "JumpStatementContinue" | 
					
						
							|  |  |  | 	case JumpStatementBreak: | 
					
						
							|  |  |  | 		return "JumpStatementBreak" | 
					
						
							|  |  |  | 	case JumpStatementReturn: | 
					
						
							|  |  |  | 		return "JumpStatementReturn" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("JumpStatementCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // JumpStatement represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	JumpStatement: | 
					
						
							|  |  |  | //	        "goto" IDENTIFIER ';'      // Case JumpStatementGoto | 
					
						
							|  |  |  | //	|       "goto" '*' Expression ';'  // Case JumpStatementGotoExpr | 
					
						
							|  |  |  | //	|       "continue" ';'             // Case JumpStatementContinue | 
					
						
							|  |  |  | //	|       "break" ';'                // Case JumpStatementBreak | 
					
						
							|  |  |  | //	|       "return" Expression ';'    // Case JumpStatementReturn | 
					
						
							|  |  |  | type JumpStatement struct { | 
					
						
							|  |  |  | 	context      Node | 
					
						
							|  |  |  | 	lexicalScope Scope | 
					
						
							|  |  |  | 	Case         JumpStatementCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Expression   *Expression | 
					
						
							|  |  |  | 	Token        Token | 
					
						
							|  |  |  | 	Token2       Token | 
					
						
							|  |  |  | 	Token3       Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *JumpStatement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *JumpStatement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 4: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 2, 3: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // LabelDeclaration represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	LabelDeclaration: | 
					
						
							|  |  |  | //	        "__label__" IdentifierList ';' | 
					
						
							|  |  |  | type LabelDeclaration struct { | 
					
						
							|  |  |  | 	IdentifierList *IdentifierList | 
					
						
							|  |  |  | 	Token          Token | 
					
						
							|  |  |  | 	Token2         Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *LabelDeclaration) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *LabelDeclaration) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.IdentifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token2.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // LabeledStatementCase represents case numbers of production LabeledStatement | 
					
						
							|  |  |  | type LabeledStatementCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type LabeledStatementCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	LabeledStatementLabel LabeledStatementCase = iota | 
					
						
							|  |  |  | 	LabeledStatementCaseLabel | 
					
						
							|  |  |  | 	LabeledStatementRange | 
					
						
							|  |  |  | 	LabeledStatementDefault | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n LabeledStatementCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case LabeledStatementLabel: | 
					
						
							|  |  |  | 		return "LabeledStatementLabel" | 
					
						
							|  |  |  | 	case LabeledStatementCaseLabel: | 
					
						
							|  |  |  | 		return "LabeledStatementCaseLabel" | 
					
						
							|  |  |  | 	case LabeledStatementRange: | 
					
						
							|  |  |  | 		return "LabeledStatementRange" | 
					
						
							|  |  |  | 	case LabeledStatementDefault: | 
					
						
							|  |  |  | 		return "LabeledStatementDefault" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("LabeledStatementCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // LabeledStatement represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	LabeledStatement: | 
					
						
							|  |  |  | //	        IDENTIFIER ':' AttributeSpecifierList Statement                   // Case LabeledStatementLabel | 
					
						
							|  |  |  | //	|       "case" ConstantExpression ':' Statement                           // Case LabeledStatementCaseLabel | 
					
						
							|  |  |  | //	|       "case" ConstantExpression "..." ConstantExpression ':' Statement  // Case LabeledStatementRange | 
					
						
							|  |  |  | //	|       "default" ':' Statement                                           // Case LabeledStatementDefault | 
					
						
							|  |  |  | type LabeledStatement struct { | 
					
						
							|  |  |  | 	block                  *CompoundStatement | 
					
						
							|  |  |  | 	lexicalScope           Scope | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   LabeledStatementCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ConstantExpression     *ConstantExpression | 
					
						
							|  |  |  | 	ConstantExpression2    *ConstantExpression | 
					
						
							|  |  |  | 	Statement              *Statement | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | 	Token2                 Token | 
					
						
							|  |  |  | 	Token3                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *LabeledStatement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *LabeledStatement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ConstantExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ConstantExpression2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ConstantExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // LogicalAndExpressionCase represents case numbers of production LogicalAndExpression | 
					
						
							|  |  |  | type LogicalAndExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type LogicalAndExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	LogicalAndExpressionOr LogicalAndExpressionCase = iota | 
					
						
							|  |  |  | 	LogicalAndExpressionLAnd | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n LogicalAndExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case LogicalAndExpressionOr: | 
					
						
							|  |  |  | 		return "LogicalAndExpressionOr" | 
					
						
							|  |  |  | 	case LogicalAndExpressionLAnd: | 
					
						
							|  |  |  | 		return "LogicalAndExpressionLAnd" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("LogicalAndExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // LogicalAndExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	LogicalAndExpression: | 
					
						
							|  |  |  | //	        InclusiveOrExpression                            // Case LogicalAndExpressionOr | 
					
						
							|  |  |  | //	|       LogicalAndExpression "&&" InclusiveOrExpression  // Case LogicalAndExpressionLAnd | 
					
						
							|  |  |  | type LogicalAndExpression struct { | 
					
						
							|  |  |  | 	Operand               Operand | 
					
						
							|  |  |  | 	IsSideEffectsFree     bool | 
					
						
							|  |  |  | 	Case                  LogicalAndExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	InclusiveOrExpression *InclusiveOrExpression | 
					
						
							|  |  |  | 	LogicalAndExpression  *LogicalAndExpression | 
					
						
							|  |  |  | 	Token                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *LogicalAndExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *LogicalAndExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.InclusiveOrExpression.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.LogicalAndExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.InclusiveOrExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // LogicalOrExpressionCase represents case numbers of production LogicalOrExpression | 
					
						
							|  |  |  | type LogicalOrExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type LogicalOrExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	LogicalOrExpressionLAnd LogicalOrExpressionCase = iota | 
					
						
							|  |  |  | 	LogicalOrExpressionLOr | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n LogicalOrExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case LogicalOrExpressionLAnd: | 
					
						
							|  |  |  | 		return "LogicalOrExpressionLAnd" | 
					
						
							|  |  |  | 	case LogicalOrExpressionLOr: | 
					
						
							|  |  |  | 		return "LogicalOrExpressionLOr" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("LogicalOrExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // LogicalOrExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	LogicalOrExpression: | 
					
						
							|  |  |  | //	        LogicalAndExpression                           // Case LogicalOrExpressionLAnd | 
					
						
							|  |  |  | //	|       LogicalOrExpression "||" LogicalAndExpression  // Case LogicalOrExpressionLOr | 
					
						
							|  |  |  | type LogicalOrExpression struct { | 
					
						
							|  |  |  | 	Operand              Operand | 
					
						
							|  |  |  | 	IsSideEffectsFree    bool | 
					
						
							|  |  |  | 	Case                 LogicalOrExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	LogicalAndExpression *LogicalAndExpression | 
					
						
							|  |  |  | 	LogicalOrExpression  *LogicalOrExpression | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *LogicalOrExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *LogicalOrExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.LogicalAndExpression.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.LogicalOrExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.LogicalAndExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // MultiplicativeExpressionCase represents case numbers of production MultiplicativeExpression | 
					
						
							|  |  |  | type MultiplicativeExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type MultiplicativeExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	MultiplicativeExpressionCast MultiplicativeExpressionCase = iota | 
					
						
							|  |  |  | 	MultiplicativeExpressionMul | 
					
						
							|  |  |  | 	MultiplicativeExpressionDiv | 
					
						
							|  |  |  | 	MultiplicativeExpressionMod | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n MultiplicativeExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case MultiplicativeExpressionCast: | 
					
						
							|  |  |  | 		return "MultiplicativeExpressionCast" | 
					
						
							|  |  |  | 	case MultiplicativeExpressionMul: | 
					
						
							|  |  |  | 		return "MultiplicativeExpressionMul" | 
					
						
							|  |  |  | 	case MultiplicativeExpressionDiv: | 
					
						
							|  |  |  | 		return "MultiplicativeExpressionDiv" | 
					
						
							|  |  |  | 	case MultiplicativeExpressionMod: | 
					
						
							|  |  |  | 		return "MultiplicativeExpressionMod" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("MultiplicativeExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // MultiplicativeExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	MultiplicativeExpression: | 
					
						
							|  |  |  | //	        CastExpression                               // Case MultiplicativeExpressionCast | 
					
						
							|  |  |  | //	|       MultiplicativeExpression '*' CastExpression  // Case MultiplicativeExpressionMul | 
					
						
							|  |  |  | //	|       MultiplicativeExpression '/' CastExpression  // Case MultiplicativeExpressionDiv | 
					
						
							|  |  |  | //	|       MultiplicativeExpression '%' CastExpression  // Case MultiplicativeExpressionMod | 
					
						
							|  |  |  | type MultiplicativeExpression struct { | 
					
						
							|  |  |  | 	Operand                  Operand | 
					
						
							|  |  |  | 	promote                  Type | 
					
						
							|  |  |  | 	IsSideEffectsFree        bool | 
					
						
							|  |  |  | 	Case                     MultiplicativeExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	CastExpression           *CastExpression | 
					
						
							|  |  |  | 	MultiplicativeExpression *MultiplicativeExpression | 
					
						
							|  |  |  | 	Token                    Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *MultiplicativeExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *MultiplicativeExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.CastExpression.Position() | 
					
						
							|  |  |  | 	case 1, 2, 3: | 
					
						
							|  |  |  | 		if p := n.MultiplicativeExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.CastExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ParameterDeclarationCase represents case numbers of production ParameterDeclaration | 
					
						
							|  |  |  | type ParameterDeclarationCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type ParameterDeclarationCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ParameterDeclarationDecl ParameterDeclarationCase = iota | 
					
						
							|  |  |  | 	ParameterDeclarationAbstract | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n ParameterDeclarationCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case ParameterDeclarationDecl: | 
					
						
							|  |  |  | 		return "ParameterDeclarationDecl" | 
					
						
							|  |  |  | 	case ParameterDeclarationAbstract: | 
					
						
							|  |  |  | 		return "ParameterDeclarationAbstract" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("ParameterDeclarationCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ParameterDeclaration represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ParameterDeclaration: | 
					
						
							|  |  |  | //	        DeclarationSpecifiers Declarator AttributeSpecifierList  // Case ParameterDeclarationDecl | 
					
						
							|  |  |  | //	|       DeclarationSpecifiers AbstractDeclarator                 // Case ParameterDeclarationAbstract | 
					
						
							|  |  |  | type ParameterDeclaration struct { | 
					
						
							|  |  |  | 	typ                    Type | 
					
						
							|  |  |  | 	AbstractDeclarator     *AbstractDeclarator | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   ParameterDeclarationCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	DeclarationSpecifiers  *DeclarationSpecifiers | 
					
						
							|  |  |  | 	Declarator             *Declarator | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ParameterDeclaration) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ParameterDeclaration) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.DeclarationSpecifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AbstractDeclarator.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.DeclarationSpecifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AttributeSpecifierList.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ParameterList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ParameterList: | 
					
						
							|  |  |  | //	        ParameterDeclaration | 
					
						
							|  |  |  | //	|       ParameterList ',' ParameterDeclaration | 
					
						
							|  |  |  | type ParameterList struct { | 
					
						
							|  |  |  | 	ParameterDeclaration *ParameterDeclaration | 
					
						
							|  |  |  | 	ParameterList        *ParameterList | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ParameterList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ParameterList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.ParameterDeclaration.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ParameterTypeListCase represents case numbers of production ParameterTypeList | 
					
						
							|  |  |  | type ParameterTypeListCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type ParameterTypeListCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ParameterTypeListList ParameterTypeListCase = iota | 
					
						
							|  |  |  | 	ParameterTypeListVar | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n ParameterTypeListCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case ParameterTypeListList: | 
					
						
							|  |  |  | 		return "ParameterTypeListList" | 
					
						
							|  |  |  | 	case ParameterTypeListVar: | 
					
						
							|  |  |  | 		return "ParameterTypeListVar" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("ParameterTypeListCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ParameterTypeList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ParameterTypeList: | 
					
						
							|  |  |  | //	        ParameterList            // Case ParameterTypeListList | 
					
						
							|  |  |  | //	|       ParameterList ',' "..."  // Case ParameterTypeListVar | 
					
						
							|  |  |  | type ParameterTypeList struct { | 
					
						
							|  |  |  | 	Case          ParameterTypeListCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ParameterList *ParameterList | 
					
						
							|  |  |  | 	Token         Token | 
					
						
							|  |  |  | 	Token2        Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ParameterTypeList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ParameterTypeList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.ParameterList.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.ParameterList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // PointerCase represents case numbers of production Pointer | 
					
						
							|  |  |  | type PointerCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type PointerCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	PointerTypeQual PointerCase = iota | 
					
						
							|  |  |  | 	PointerPtr | 
					
						
							| 
									
										
										
										
											2022-03-07 11:08:26 +01:00
										 |  |  | 	PointerBlock | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n PointerCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case PointerTypeQual: | 
					
						
							|  |  |  | 		return "PointerTypeQual" | 
					
						
							|  |  |  | 	case PointerPtr: | 
					
						
							|  |  |  | 		return "PointerPtr" | 
					
						
							| 
									
										
										
										
											2022-03-07 11:08:26 +01:00
										 |  |  | 	case PointerBlock: | 
					
						
							|  |  |  | 		return "PointerBlock" | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("PointerCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Pointer represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Pointer: | 
					
						
							|  |  |  | //	        '*' TypeQualifiers          // Case PointerTypeQual | 
					
						
							|  |  |  | //	|       '*' TypeQualifiers Pointer  // Case PointerPtr | 
					
						
							| 
									
										
										
										
											2022-03-07 11:08:26 +01:00
										 |  |  | //	|       '^' TypeQualifiers          // Case PointerBlock | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | type Pointer struct { | 
					
						
							|  |  |  | 	typeQualifiers *typeBase | 
					
						
							|  |  |  | 	Case           PointerCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Pointer        *Pointer | 
					
						
							|  |  |  | 	Token          Token | 
					
						
							|  |  |  | 	TypeQualifiers *TypeQualifiers | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Pointer) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Pointer) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							| 
									
										
										
										
											2022-03-07 11:08:26 +01:00
										 |  |  | 	case 0, 2: | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.TypeQualifiers.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Pointer.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // PostfixExpressionCase represents case numbers of production PostfixExpression | 
					
						
							|  |  |  | type PostfixExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type PostfixExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	PostfixExpressionPrimary PostfixExpressionCase = iota | 
					
						
							|  |  |  | 	PostfixExpressionIndex | 
					
						
							|  |  |  | 	PostfixExpressionCall | 
					
						
							|  |  |  | 	PostfixExpressionSelect | 
					
						
							|  |  |  | 	PostfixExpressionPSelect | 
					
						
							|  |  |  | 	PostfixExpressionInc | 
					
						
							|  |  |  | 	PostfixExpressionDec | 
					
						
							|  |  |  | 	PostfixExpressionComplit | 
					
						
							|  |  |  | 	PostfixExpressionTypeCmp | 
					
						
							|  |  |  | 	PostfixExpressionChooseExpr | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n PostfixExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case PostfixExpressionPrimary: | 
					
						
							|  |  |  | 		return "PostfixExpressionPrimary" | 
					
						
							|  |  |  | 	case PostfixExpressionIndex: | 
					
						
							|  |  |  | 		return "PostfixExpressionIndex" | 
					
						
							|  |  |  | 	case PostfixExpressionCall: | 
					
						
							|  |  |  | 		return "PostfixExpressionCall" | 
					
						
							|  |  |  | 	case PostfixExpressionSelect: | 
					
						
							|  |  |  | 		return "PostfixExpressionSelect" | 
					
						
							|  |  |  | 	case PostfixExpressionPSelect: | 
					
						
							|  |  |  | 		return "PostfixExpressionPSelect" | 
					
						
							|  |  |  | 	case PostfixExpressionInc: | 
					
						
							|  |  |  | 		return "PostfixExpressionInc" | 
					
						
							|  |  |  | 	case PostfixExpressionDec: | 
					
						
							|  |  |  | 		return "PostfixExpressionDec" | 
					
						
							|  |  |  | 	case PostfixExpressionComplit: | 
					
						
							|  |  |  | 		return "PostfixExpressionComplit" | 
					
						
							|  |  |  | 	case PostfixExpressionTypeCmp: | 
					
						
							|  |  |  | 		return "PostfixExpressionTypeCmp" | 
					
						
							|  |  |  | 	case PostfixExpressionChooseExpr: | 
					
						
							|  |  |  | 		return "PostfixExpressionChooseExpr" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("PostfixExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // PostfixExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	PostfixExpression: | 
					
						
							|  |  |  | //	        PrimaryExpression                                                                                       // Case PostfixExpressionPrimary | 
					
						
							|  |  |  | //	|       PostfixExpression '[' Expression ']'                                                                    // Case PostfixExpressionIndex | 
					
						
							|  |  |  | //	|       PostfixExpression '(' ArgumentExpressionList ')'                                                        // Case PostfixExpressionCall | 
					
						
							|  |  |  | //	|       PostfixExpression '.' IDENTIFIER                                                                        // Case PostfixExpressionSelect | 
					
						
							|  |  |  | //	|       PostfixExpression "->" IDENTIFIER                                                                       // Case PostfixExpressionPSelect | 
					
						
							|  |  |  | //	|       PostfixExpression "++"                                                                                  // Case PostfixExpressionInc | 
					
						
							|  |  |  | //	|       PostfixExpression "--"                                                                                  // Case PostfixExpressionDec | 
					
						
							|  |  |  | //	|       '(' TypeName ')' '{' InitializerList ',' '}'                                                            // Case PostfixExpressionComplit | 
					
						
							|  |  |  | //	|       "__builtin_types_compatible_p" '(' TypeName ',' TypeName ')'                                            // Case PostfixExpressionTypeCmp | 
					
						
							|  |  |  | //	|       "__builtin_choose_expr" '(' AssignmentExpression ',' AssignmentExpression ',' AssignmentExpression ')'  // Case PostfixExpressionChooseExpr | 
					
						
							|  |  |  | type PostfixExpression struct { | 
					
						
							|  |  |  | 	Operand                Operand | 
					
						
							|  |  |  | 	Field                  Field // Case Select, PSelect | 
					
						
							|  |  |  | 	IsSideEffectsFree      bool | 
					
						
							|  |  |  | 	ArgumentExpressionList *ArgumentExpressionList | 
					
						
							|  |  |  | 	AssignmentExpression   *AssignmentExpression | 
					
						
							|  |  |  | 	AssignmentExpression2  *AssignmentExpression | 
					
						
							|  |  |  | 	AssignmentExpression3  *AssignmentExpression | 
					
						
							|  |  |  | 	Case                   PostfixExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Expression             *Expression | 
					
						
							|  |  |  | 	InitializerList        *InitializerList | 
					
						
							|  |  |  | 	PostfixExpression      *PostfixExpression | 
					
						
							|  |  |  | 	PrimaryExpression      *PrimaryExpression | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | 	Token2                 Token | 
					
						
							|  |  |  | 	Token3                 Token | 
					
						
							|  |  |  | 	Token4                 Token | 
					
						
							|  |  |  | 	Token5                 Token | 
					
						
							|  |  |  | 	TypeName               *TypeName | 
					
						
							|  |  |  | 	TypeName2              *TypeName | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *PostfixExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *PostfixExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 5, 6: | 
					
						
							|  |  |  | 		if p := n.PostfixExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.PostfixExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ArgumentExpressionList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.PostfixExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 3, 4: | 
					
						
							|  |  |  | 		if p := n.PostfixExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.PrimaryExpression.Position() | 
					
						
							|  |  |  | 	case 9: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AssignmentExpression3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token5.Position() | 
					
						
							|  |  |  | 	case 8: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeName.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeName2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token4.Position() | 
					
						
							|  |  |  | 	case 7: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeName.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.InitializerList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token5.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // PragmaSTDC represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	PragmaSTDC: | 
					
						
							|  |  |  | //	        "__pragma_stdc" IDENTIFIER IDENTIFIER IDENTIFIER | 
					
						
							|  |  |  | type PragmaSTDC struct { | 
					
						
							|  |  |  | 	Token  Token | 
					
						
							|  |  |  | 	Token2 Token | 
					
						
							|  |  |  | 	Token3 Token | 
					
						
							|  |  |  | 	Token4 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *PragmaSTDC) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *PragmaSTDC) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token4.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // PrimaryExpressionCase represents case numbers of production PrimaryExpression | 
					
						
							|  |  |  | type PrimaryExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type PrimaryExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	PrimaryExpressionIdent PrimaryExpressionCase = iota | 
					
						
							|  |  |  | 	PrimaryExpressionInt | 
					
						
							|  |  |  | 	PrimaryExpressionFloat | 
					
						
							|  |  |  | 	PrimaryExpressionEnum | 
					
						
							|  |  |  | 	PrimaryExpressionChar | 
					
						
							|  |  |  | 	PrimaryExpressionLChar | 
					
						
							|  |  |  | 	PrimaryExpressionString | 
					
						
							|  |  |  | 	PrimaryExpressionLString | 
					
						
							|  |  |  | 	PrimaryExpressionExpr | 
					
						
							|  |  |  | 	PrimaryExpressionStmt | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n PrimaryExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case PrimaryExpressionIdent: | 
					
						
							|  |  |  | 		return "PrimaryExpressionIdent" | 
					
						
							|  |  |  | 	case PrimaryExpressionInt: | 
					
						
							|  |  |  | 		return "PrimaryExpressionInt" | 
					
						
							|  |  |  | 	case PrimaryExpressionFloat: | 
					
						
							|  |  |  | 		return "PrimaryExpressionFloat" | 
					
						
							|  |  |  | 	case PrimaryExpressionEnum: | 
					
						
							|  |  |  | 		return "PrimaryExpressionEnum" | 
					
						
							|  |  |  | 	case PrimaryExpressionChar: | 
					
						
							|  |  |  | 		return "PrimaryExpressionChar" | 
					
						
							|  |  |  | 	case PrimaryExpressionLChar: | 
					
						
							|  |  |  | 		return "PrimaryExpressionLChar" | 
					
						
							|  |  |  | 	case PrimaryExpressionString: | 
					
						
							|  |  |  | 		return "PrimaryExpressionString" | 
					
						
							|  |  |  | 	case PrimaryExpressionLString: | 
					
						
							|  |  |  | 		return "PrimaryExpressionLString" | 
					
						
							|  |  |  | 	case PrimaryExpressionExpr: | 
					
						
							|  |  |  | 		return "PrimaryExpressionExpr" | 
					
						
							|  |  |  | 	case PrimaryExpressionStmt: | 
					
						
							|  |  |  | 		return "PrimaryExpressionStmt" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("PrimaryExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // PrimaryExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	PrimaryExpression: | 
					
						
							|  |  |  | //	        IDENTIFIER                 // Case PrimaryExpressionIdent | 
					
						
							|  |  |  | //	|       INTCONST                   // Case PrimaryExpressionInt | 
					
						
							|  |  |  | //	|       FLOATCONST                 // Case PrimaryExpressionFloat | 
					
						
							|  |  |  | //	|       ENUMCONST                  // Case PrimaryExpressionEnum | 
					
						
							|  |  |  | //	|       CHARCONST                  // Case PrimaryExpressionChar | 
					
						
							|  |  |  | //	|       LONGCHARCONST              // Case PrimaryExpressionLChar | 
					
						
							|  |  |  | //	|       STRINGLITERAL              // Case PrimaryExpressionString | 
					
						
							|  |  |  | //	|       LONGSTRINGLITERAL          // Case PrimaryExpressionLString | 
					
						
							|  |  |  | //	|       '(' Expression ')'         // Case PrimaryExpressionExpr | 
					
						
							|  |  |  | //	|       '(' CompoundStatement ')'  // Case PrimaryExpressionStmt | 
					
						
							|  |  |  | type PrimaryExpression struct { | 
					
						
							|  |  |  | 	Operand           Operand | 
					
						
							|  |  |  | 	lexicalScope      Scope | 
					
						
							|  |  |  | 	resolvedIn        Scope | 
					
						
							|  |  |  | 	resolvedTo        Node | 
					
						
							|  |  |  | 	IsSideEffectsFree bool | 
					
						
							|  |  |  | 	Case              PrimaryExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	CompoundStatement *CompoundStatement | 
					
						
							|  |  |  | 	Expression        *Expression | 
					
						
							|  |  |  | 	Token             Token | 
					
						
							|  |  |  | 	Token2            Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *PrimaryExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *PrimaryExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0, 1, 2, 3, 4, 5, 6, 7: | 
					
						
							|  |  |  | 		return n.Token.Position() | 
					
						
							|  |  |  | 	case 9: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.CompoundStatement.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 8: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // RelationalExpressionCase represents case numbers of production RelationalExpression | 
					
						
							|  |  |  | type RelationalExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type RelationalExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	RelationalExpressionShift RelationalExpressionCase = iota | 
					
						
							|  |  |  | 	RelationalExpressionLt | 
					
						
							|  |  |  | 	RelationalExpressionGt | 
					
						
							|  |  |  | 	RelationalExpressionLeq | 
					
						
							|  |  |  | 	RelationalExpressionGeq | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n RelationalExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case RelationalExpressionShift: | 
					
						
							|  |  |  | 		return "RelationalExpressionShift" | 
					
						
							|  |  |  | 	case RelationalExpressionLt: | 
					
						
							|  |  |  | 		return "RelationalExpressionLt" | 
					
						
							|  |  |  | 	case RelationalExpressionGt: | 
					
						
							|  |  |  | 		return "RelationalExpressionGt" | 
					
						
							|  |  |  | 	case RelationalExpressionLeq: | 
					
						
							|  |  |  | 		return "RelationalExpressionLeq" | 
					
						
							|  |  |  | 	case RelationalExpressionGeq: | 
					
						
							|  |  |  | 		return "RelationalExpressionGeq" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("RelationalExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // RelationalExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	RelationalExpression: | 
					
						
							|  |  |  | //	        ShiftExpression                            // Case RelationalExpressionShift | 
					
						
							|  |  |  | //	|       RelationalExpression '<' ShiftExpression   // Case RelationalExpressionLt | 
					
						
							|  |  |  | //	|       RelationalExpression '>' ShiftExpression   // Case RelationalExpressionGt | 
					
						
							|  |  |  | //	|       RelationalExpression "<=" ShiftExpression  // Case RelationalExpressionLeq | 
					
						
							|  |  |  | //	|       RelationalExpression ">=" ShiftExpression  // Case RelationalExpressionGeq | 
					
						
							|  |  |  | type RelationalExpression struct { | 
					
						
							|  |  |  | 	Operand              Operand | 
					
						
							|  |  |  | 	promote              Type | 
					
						
							|  |  |  | 	IsSideEffectsFree    bool | 
					
						
							|  |  |  | 	Case                 RelationalExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	RelationalExpression *RelationalExpression | 
					
						
							|  |  |  | 	ShiftExpression      *ShiftExpression | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *RelationalExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *RelationalExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1, 2, 3, 4: | 
					
						
							|  |  |  | 		if p := n.RelationalExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.ShiftExpression.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.ShiftExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SelectionStatementCase represents case numbers of production SelectionStatement | 
					
						
							|  |  |  | type SelectionStatementCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type SelectionStatementCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	SelectionStatementIf SelectionStatementCase = iota | 
					
						
							|  |  |  | 	SelectionStatementIfElse | 
					
						
							|  |  |  | 	SelectionStatementSwitch | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n SelectionStatementCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case SelectionStatementIf: | 
					
						
							|  |  |  | 		return "SelectionStatementIf" | 
					
						
							|  |  |  | 	case SelectionStatementIfElse: | 
					
						
							|  |  |  | 		return "SelectionStatementIfElse" | 
					
						
							|  |  |  | 	case SelectionStatementSwitch: | 
					
						
							|  |  |  | 		return "SelectionStatementSwitch" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("SelectionStatementCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SelectionStatement represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	SelectionStatement: | 
					
						
							|  |  |  | //	        "if" '(' Expression ')' Statement                   // Case SelectionStatementIf | 
					
						
							|  |  |  | //	|       "if" '(' Expression ')' Statement "else" Statement  // Case SelectionStatementIfElse | 
					
						
							|  |  |  | //	|       "switch" '(' Expression ')' Statement               // Case SelectionStatementSwitch | 
					
						
							|  |  |  | type SelectionStatement struct { | 
					
						
							|  |  |  | 	promote    Type // switch expression promoted type | 
					
						
							|  |  |  | 	cases      []*LabeledStatement | 
					
						
							|  |  |  | 	Case       SelectionStatementCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Expression *Expression | 
					
						
							|  |  |  | 	Statement  *Statement | 
					
						
							|  |  |  | 	Statement2 *Statement | 
					
						
							|  |  |  | 	Token      Token | 
					
						
							|  |  |  | 	Token2     Token | 
					
						
							|  |  |  | 	Token3     Token | 
					
						
							|  |  |  | 	Token4     Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *SelectionStatement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *SelectionStatement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0, 2: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token3.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Statement.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token4.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Statement2.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ShiftExpressionCase represents case numbers of production ShiftExpression | 
					
						
							|  |  |  | type ShiftExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type ShiftExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	ShiftExpressionAdd ShiftExpressionCase = iota | 
					
						
							|  |  |  | 	ShiftExpressionLsh | 
					
						
							|  |  |  | 	ShiftExpressionRsh | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n ShiftExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case ShiftExpressionAdd: | 
					
						
							|  |  |  | 		return "ShiftExpressionAdd" | 
					
						
							|  |  |  | 	case ShiftExpressionLsh: | 
					
						
							|  |  |  | 		return "ShiftExpressionLsh" | 
					
						
							|  |  |  | 	case ShiftExpressionRsh: | 
					
						
							|  |  |  | 		return "ShiftExpressionRsh" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("ShiftExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ShiftExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	ShiftExpression: | 
					
						
							|  |  |  | //	        AdditiveExpression                       // Case ShiftExpressionAdd | 
					
						
							|  |  |  | //	|       ShiftExpression "<<" AdditiveExpression  // Case ShiftExpressionLsh | 
					
						
							|  |  |  | //	|       ShiftExpression ">>" AdditiveExpression  // Case ShiftExpressionRsh | 
					
						
							|  |  |  | type ShiftExpression struct { | 
					
						
							|  |  |  | 	Operand            Operand | 
					
						
							|  |  |  | 	promote            Type // shift count promoted type | 
					
						
							|  |  |  | 	IsSideEffectsFree  bool | 
					
						
							|  |  |  | 	AdditiveExpression *AdditiveExpression | 
					
						
							|  |  |  | 	Case               ShiftExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ShiftExpression    *ShiftExpression | 
					
						
							|  |  |  | 	Token              Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *ShiftExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *ShiftExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.AdditiveExpression.Position() | 
					
						
							|  |  |  | 	case 1, 2: | 
					
						
							|  |  |  | 		if p := n.ShiftExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AdditiveExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SpecifierQualifierListCase represents case numbers of production SpecifierQualifierList | 
					
						
							|  |  |  | type SpecifierQualifierListCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type SpecifierQualifierListCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	SpecifierQualifierListTypeSpec SpecifierQualifierListCase = iota | 
					
						
							|  |  |  | 	SpecifierQualifierListTypeQual | 
					
						
							|  |  |  | 	SpecifierQualifierListAlignSpec | 
					
						
							|  |  |  | 	SpecifierQualifierListAttribute | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n SpecifierQualifierListCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case SpecifierQualifierListTypeSpec: | 
					
						
							|  |  |  | 		return "SpecifierQualifierListTypeSpec" | 
					
						
							|  |  |  | 	case SpecifierQualifierListTypeQual: | 
					
						
							|  |  |  | 		return "SpecifierQualifierListTypeQual" | 
					
						
							|  |  |  | 	case SpecifierQualifierListAlignSpec: | 
					
						
							|  |  |  | 		return "SpecifierQualifierListAlignSpec" | 
					
						
							|  |  |  | 	case SpecifierQualifierListAttribute: | 
					
						
							|  |  |  | 		return "SpecifierQualifierListAttribute" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("SpecifierQualifierListCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // SpecifierQualifierList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	SpecifierQualifierList: | 
					
						
							|  |  |  | //	        TypeSpecifier SpecifierQualifierList       // Case SpecifierQualifierListTypeSpec | 
					
						
							|  |  |  | //	|       TypeQualifier SpecifierQualifierList       // Case SpecifierQualifierListTypeQual | 
					
						
							|  |  |  | //	|       AlignmentSpecifier SpecifierQualifierList  // Case SpecifierQualifierListAlignSpec | 
					
						
							|  |  |  | //	|       AttributeSpecifier SpecifierQualifierList  // Case SpecifierQualifierListAttribute | 
					
						
							|  |  |  | type SpecifierQualifierList struct { | 
					
						
							|  |  |  | 	noStorageClass | 
					
						
							|  |  |  | 	AlignmentSpecifier     *AlignmentSpecifier | 
					
						
							|  |  |  | 	AttributeSpecifier     *AttributeSpecifier | 
					
						
							|  |  |  | 	Case                   SpecifierQualifierListCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	SpecifierQualifierList *SpecifierQualifierList | 
					
						
							|  |  |  | 	TypeQualifier          *TypeQualifier | 
					
						
							|  |  |  | 	TypeSpecifier          *TypeSpecifier | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *SpecifierQualifierList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *SpecifierQualifierList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.AlignmentSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.SpecifierQualifierList.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.SpecifierQualifierList.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.TypeQualifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.SpecifierQualifierList.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.TypeSpecifier.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.SpecifierQualifierList.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StatementCase represents case numbers of production Statement | 
					
						
							|  |  |  | type StatementCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type StatementCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	StatementLabeled StatementCase = iota | 
					
						
							|  |  |  | 	StatementCompound | 
					
						
							|  |  |  | 	StatementExpr | 
					
						
							|  |  |  | 	StatementSelection | 
					
						
							|  |  |  | 	StatementIteration | 
					
						
							|  |  |  | 	StatementJump | 
					
						
							|  |  |  | 	StatementAsm | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n StatementCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case StatementLabeled: | 
					
						
							|  |  |  | 		return "StatementLabeled" | 
					
						
							|  |  |  | 	case StatementCompound: | 
					
						
							|  |  |  | 		return "StatementCompound" | 
					
						
							|  |  |  | 	case StatementExpr: | 
					
						
							|  |  |  | 		return "StatementExpr" | 
					
						
							|  |  |  | 	case StatementSelection: | 
					
						
							|  |  |  | 		return "StatementSelection" | 
					
						
							|  |  |  | 	case StatementIteration: | 
					
						
							|  |  |  | 		return "StatementIteration" | 
					
						
							|  |  |  | 	case StatementJump: | 
					
						
							|  |  |  | 		return "StatementJump" | 
					
						
							|  |  |  | 	case StatementAsm: | 
					
						
							|  |  |  | 		return "StatementAsm" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("StatementCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Statement represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	Statement: | 
					
						
							|  |  |  | //	        LabeledStatement     // Case StatementLabeled | 
					
						
							|  |  |  | //	|       CompoundStatement    // Case StatementCompound | 
					
						
							|  |  |  | //	|       ExpressionStatement  // Case StatementExpr | 
					
						
							|  |  |  | //	|       SelectionStatement   // Case StatementSelection | 
					
						
							|  |  |  | //	|       IterationStatement   // Case StatementIteration | 
					
						
							|  |  |  | //	|       JumpStatement        // Case StatementJump | 
					
						
							|  |  |  | //	|       AsmStatement         // Case StatementAsm | 
					
						
							|  |  |  | type Statement struct { | 
					
						
							|  |  |  | 	Operand             Operand // Case CompoundStatement, ExpressionStatement | 
					
						
							|  |  |  | 	AsmStatement        *AsmStatement | 
					
						
							|  |  |  | 	Case                StatementCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	CompoundStatement   *CompoundStatement | 
					
						
							|  |  |  | 	ExpressionStatement *ExpressionStatement | 
					
						
							|  |  |  | 	IterationStatement  *IterationStatement | 
					
						
							|  |  |  | 	JumpStatement       *JumpStatement | 
					
						
							|  |  |  | 	LabeledStatement    *LabeledStatement | 
					
						
							|  |  |  | 	SelectionStatement  *SelectionStatement | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *Statement) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *Statement) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 6: | 
					
						
							|  |  |  | 		return n.AsmStatement.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		return n.CompoundStatement.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return n.ExpressionStatement.Position() | 
					
						
							|  |  |  | 	case 4: | 
					
						
							|  |  |  | 		return n.IterationStatement.Position() | 
					
						
							|  |  |  | 	case 5: | 
					
						
							|  |  |  | 		return n.JumpStatement.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.LabeledStatement.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		return n.SelectionStatement.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StorageClassSpecifierCase represents case numbers of production StorageClassSpecifier | 
					
						
							|  |  |  | type StorageClassSpecifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type StorageClassSpecifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	StorageClassSpecifierTypedef StorageClassSpecifierCase = iota | 
					
						
							|  |  |  | 	StorageClassSpecifierExtern | 
					
						
							|  |  |  | 	StorageClassSpecifierStatic | 
					
						
							|  |  |  | 	StorageClassSpecifierAuto | 
					
						
							|  |  |  | 	StorageClassSpecifierRegister | 
					
						
							|  |  |  | 	StorageClassSpecifierThreadLocal | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n StorageClassSpecifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case StorageClassSpecifierTypedef: | 
					
						
							|  |  |  | 		return "StorageClassSpecifierTypedef" | 
					
						
							|  |  |  | 	case StorageClassSpecifierExtern: | 
					
						
							|  |  |  | 		return "StorageClassSpecifierExtern" | 
					
						
							|  |  |  | 	case StorageClassSpecifierStatic: | 
					
						
							|  |  |  | 		return "StorageClassSpecifierStatic" | 
					
						
							|  |  |  | 	case StorageClassSpecifierAuto: | 
					
						
							|  |  |  | 		return "StorageClassSpecifierAuto" | 
					
						
							|  |  |  | 	case StorageClassSpecifierRegister: | 
					
						
							|  |  |  | 		return "StorageClassSpecifierRegister" | 
					
						
							|  |  |  | 	case StorageClassSpecifierThreadLocal: | 
					
						
							|  |  |  | 		return "StorageClassSpecifierThreadLocal" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("StorageClassSpecifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StorageClassSpecifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	StorageClassSpecifier: | 
					
						
							|  |  |  | //	        "typedef"        // Case StorageClassSpecifierTypedef | 
					
						
							|  |  |  | //	|       "extern"         // Case StorageClassSpecifierExtern | 
					
						
							|  |  |  | //	|       "static"         // Case StorageClassSpecifierStatic | 
					
						
							|  |  |  | //	|       "auto"           // Case StorageClassSpecifierAuto | 
					
						
							|  |  |  | //	|       "register"       // Case StorageClassSpecifierRegister | 
					
						
							|  |  |  | //	|       "_Thread_local"  // Case StorageClassSpecifierThreadLocal | 
					
						
							|  |  |  | type StorageClassSpecifier struct { | 
					
						
							|  |  |  | 	Case  StorageClassSpecifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Token Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *StorageClassSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *StorageClassSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructDeclaration represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	StructDeclaration: | 
					
						
							|  |  |  | //	        SpecifierQualifierList StructDeclaratorList ';' | 
					
						
							|  |  |  | type StructDeclaration struct { | 
					
						
							|  |  |  | 	Empty                  bool // TCC extension | 
					
						
							|  |  |  | 	SpecifierQualifierList *SpecifierQualifierList | 
					
						
							|  |  |  | 	StructDeclaratorList   *StructDeclaratorList | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *StructDeclaration) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *StructDeclaration) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.SpecifierQualifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.StructDeclaratorList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructDeclarationList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	StructDeclarationList: | 
					
						
							|  |  |  | //	        StructDeclaration | 
					
						
							|  |  |  | //	|       StructDeclarationList StructDeclaration | 
					
						
							|  |  |  | type StructDeclarationList struct { | 
					
						
							|  |  |  | 	StructDeclaration     *StructDeclaration | 
					
						
							|  |  |  | 	StructDeclarationList *StructDeclarationList | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *StructDeclarationList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *StructDeclarationList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.StructDeclaration.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructDeclaratorCase represents case numbers of production StructDeclarator | 
					
						
							|  |  |  | type StructDeclaratorCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type StructDeclaratorCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	StructDeclaratorDecl StructDeclaratorCase = iota | 
					
						
							|  |  |  | 	StructDeclaratorBitField | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n StructDeclaratorCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case StructDeclaratorDecl: | 
					
						
							|  |  |  | 		return "StructDeclaratorDecl" | 
					
						
							|  |  |  | 	case StructDeclaratorBitField: | 
					
						
							|  |  |  | 		return "StructDeclaratorBitField" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("StructDeclaratorCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructDeclarator represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	StructDeclarator: | 
					
						
							|  |  |  | //	        Declarator                                                // Case StructDeclaratorDecl | 
					
						
							|  |  |  | //	|       Declarator ':' ConstantExpression AttributeSpecifierList  // Case StructDeclaratorBitField | 
					
						
							|  |  |  | type StructDeclarator struct { | 
					
						
							|  |  |  | 	decl                   *StructDeclaration | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   StructDeclaratorCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	ConstantExpression     *ConstantExpression | 
					
						
							|  |  |  | 	Declarator             *Declarator | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *StructDeclarator) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *StructDeclarator) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.Declarator.Position() | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.Declarator.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.ConstantExpression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AttributeSpecifierList.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructDeclaratorList represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	StructDeclaratorList: | 
					
						
							|  |  |  | //	        StructDeclarator | 
					
						
							|  |  |  | //	|       StructDeclaratorList ',' StructDeclarator | 
					
						
							|  |  |  | type StructDeclaratorList struct { | 
					
						
							|  |  |  | 	StructDeclarator     *StructDeclarator | 
					
						
							|  |  |  | 	StructDeclaratorList *StructDeclaratorList | 
					
						
							|  |  |  | 	Token                Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *StructDeclaratorList) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *StructDeclaratorList) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.StructDeclarator.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructOrUnionCase represents case numbers of production StructOrUnion | 
					
						
							|  |  |  | type StructOrUnionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type StructOrUnionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	StructOrUnionStruct StructOrUnionCase = iota | 
					
						
							|  |  |  | 	StructOrUnionUnion | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n StructOrUnionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case StructOrUnionStruct: | 
					
						
							|  |  |  | 		return "StructOrUnionStruct" | 
					
						
							|  |  |  | 	case StructOrUnionUnion: | 
					
						
							|  |  |  | 		return "StructOrUnionUnion" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("StructOrUnionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructOrUnion represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	StructOrUnion: | 
					
						
							|  |  |  | //	        "struct"  // Case StructOrUnionStruct | 
					
						
							|  |  |  | //	|       "union"   // Case StructOrUnionUnion | 
					
						
							|  |  |  | type StructOrUnion struct { | 
					
						
							|  |  |  | 	Case  StructOrUnionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Token Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *StructOrUnion) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *StructOrUnion) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructOrUnionSpecifierCase represents case numbers of production StructOrUnionSpecifier | 
					
						
							|  |  |  | type StructOrUnionSpecifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type StructOrUnionSpecifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	StructOrUnionSpecifierDef StructOrUnionSpecifierCase = iota | 
					
						
							|  |  |  | 	StructOrUnionSpecifierTag | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n StructOrUnionSpecifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case StructOrUnionSpecifierDef: | 
					
						
							|  |  |  | 		return "StructOrUnionSpecifierDef" | 
					
						
							|  |  |  | 	case StructOrUnionSpecifierTag: | 
					
						
							|  |  |  | 		return "StructOrUnionSpecifierTag" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("StructOrUnionSpecifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // StructOrUnionSpecifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	StructOrUnionSpecifier: | 
					
						
							|  |  |  | //	        StructOrUnion AttributeSpecifierList IDENTIFIER '{' StructDeclarationList '}'  // Case StructOrUnionSpecifierDef | 
					
						
							|  |  |  | //	|       StructOrUnion AttributeSpecifierList IDENTIFIER                                // Case StructOrUnionSpecifierTag | 
					
						
							|  |  |  | type StructOrUnionSpecifier struct { | 
					
						
							|  |  |  | 	lexicalScope           Scope | 
					
						
							|  |  |  | 	maxAlign               int | 
					
						
							|  |  |  | 	typ                    Type | 
					
						
							|  |  |  | 	AttributeSpecifierList *AttributeSpecifierList | 
					
						
							|  |  |  | 	Case                   StructOrUnionSpecifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	StructDeclarationList  *StructDeclarationList | 
					
						
							|  |  |  | 	StructOrUnion          *StructOrUnion | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | 	Token2                 Token | 
					
						
							|  |  |  | 	Token3                 Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *StructOrUnionSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *StructOrUnionSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		if p := n.StructOrUnion.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		if p := n.StructOrUnion.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.AttributeSpecifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.StructDeclarationList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TranslationUnit represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	TranslationUnit: | 
					
						
							|  |  |  | //	        ExternalDeclaration | 
					
						
							|  |  |  | //	|       TranslationUnit ExternalDeclaration | 
					
						
							|  |  |  | type TranslationUnit struct { | 
					
						
							|  |  |  | 	ExternalDeclaration *ExternalDeclaration | 
					
						
							|  |  |  | 	TranslationUnit     *TranslationUnit | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *TranslationUnit) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *TranslationUnit) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.ExternalDeclaration.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TypeName represents data reduced by production: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	TypeName: | 
					
						
							|  |  |  | //	        SpecifierQualifierList AbstractDeclarator | 
					
						
							|  |  |  | type TypeName struct { | 
					
						
							|  |  |  | 	typ                    Type | 
					
						
							|  |  |  | 	AbstractDeclarator     *AbstractDeclarator | 
					
						
							|  |  |  | 	SpecifierQualifierList *SpecifierQualifierList | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *TypeName) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *TypeName) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if p := n.SpecifierQualifierList.Position(); p.IsValid() { | 
					
						
							|  |  |  | 		return p | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.AbstractDeclarator.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TypeQualifierCase represents case numbers of production TypeQualifier | 
					
						
							|  |  |  | type TypeQualifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type TypeQualifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	TypeQualifierConst TypeQualifierCase = iota | 
					
						
							|  |  |  | 	TypeQualifierRestrict | 
					
						
							|  |  |  | 	TypeQualifierVolatile | 
					
						
							|  |  |  | 	TypeQualifierAtomic | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n TypeQualifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case TypeQualifierConst: | 
					
						
							|  |  |  | 		return "TypeQualifierConst" | 
					
						
							|  |  |  | 	case TypeQualifierRestrict: | 
					
						
							|  |  |  | 		return "TypeQualifierRestrict" | 
					
						
							|  |  |  | 	case TypeQualifierVolatile: | 
					
						
							|  |  |  | 		return "TypeQualifierVolatile" | 
					
						
							|  |  |  | 	case TypeQualifierAtomic: | 
					
						
							|  |  |  | 		return "TypeQualifierAtomic" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("TypeQualifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TypeQualifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	TypeQualifier: | 
					
						
							|  |  |  | //	        "const"     // Case TypeQualifierConst | 
					
						
							|  |  |  | //	|       "restrict"  // Case TypeQualifierRestrict | 
					
						
							|  |  |  | //	|       "volatile"  // Case TypeQualifierVolatile | 
					
						
							|  |  |  | //	|       "_Atomic"   // Case TypeQualifierAtomic | 
					
						
							|  |  |  | type TypeQualifier struct { | 
					
						
							|  |  |  | 	Case  TypeQualifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	Token Token | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *TypeQualifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *TypeQualifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return n.Token.Position() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TypeQualifiersCase represents case numbers of production TypeQualifiers | 
					
						
							|  |  |  | type TypeQualifiersCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type TypeQualifiersCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	TypeQualifiersTypeQual TypeQualifiersCase = iota | 
					
						
							|  |  |  | 	TypeQualifiersAttribute | 
					
						
							|  |  |  | 	_ | 
					
						
							|  |  |  | 	_ | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n TypeQualifiersCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case TypeQualifiersTypeQual: | 
					
						
							|  |  |  | 		return "TypeQualifiersTypeQual" | 
					
						
							|  |  |  | 	case TypeQualifiersAttribute: | 
					
						
							|  |  |  | 		return "TypeQualifiersAttribute" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("TypeQualifiersCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TypeQualifiers represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	TypeQualifiers: | 
					
						
							|  |  |  | //	        TypeQualifier                      // Case TypeQualifiersTypeQual | 
					
						
							|  |  |  | //	|       AttributeSpecifier                 // Case TypeQualifiersAttribute | 
					
						
							|  |  |  | //	|       TypeQualifiers TypeQualifier       // Case 2 | 
					
						
							|  |  |  | //	|       TypeQualifiers AttributeSpecifier  // Case 3 | 
					
						
							|  |  |  | type TypeQualifiers struct { | 
					
						
							|  |  |  | 	noStorageClass | 
					
						
							|  |  |  | 	AttributeSpecifier *AttributeSpecifier | 
					
						
							|  |  |  | 	Case               TypeQualifiersCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	TypeQualifier      *TypeQualifier | 
					
						
							|  |  |  | 	TypeQualifiers     *TypeQualifiers | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *TypeQualifiers) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *TypeQualifiers) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		return n.AttributeSpecifier.Position() | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.TypeQualifier.Position() | 
					
						
							|  |  |  | 	case 3: | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.AttributeSpecifier.Position() | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		if p := n.TypeQualifiers.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.TypeQualifier.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TypeSpecifierCase represents case numbers of production TypeSpecifier | 
					
						
							|  |  |  | type TypeSpecifierCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type TypeSpecifierCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	TypeSpecifierVoid TypeSpecifierCase = iota | 
					
						
							|  |  |  | 	TypeSpecifierChar | 
					
						
							|  |  |  | 	TypeSpecifierShort | 
					
						
							|  |  |  | 	TypeSpecifierInt | 
					
						
							|  |  |  | 	TypeSpecifierInt8 | 
					
						
							|  |  |  | 	TypeSpecifierInt16 | 
					
						
							|  |  |  | 	TypeSpecifierInt32 | 
					
						
							|  |  |  | 	TypeSpecifierInt64 | 
					
						
							|  |  |  | 	TypeSpecifierInt128 | 
					
						
							|  |  |  | 	TypeSpecifierLong | 
					
						
							|  |  |  | 	TypeSpecifierFloat | 
					
						
							|  |  |  | 	TypeSpecifierFloat16 | 
					
						
							|  |  |  | 	TypeSpecifierDecimal32 | 
					
						
							|  |  |  | 	TypeSpecifierDecimal64 | 
					
						
							|  |  |  | 	TypeSpecifierDecimal128 | 
					
						
							|  |  |  | 	TypeSpecifierFloat128 | 
					
						
							|  |  |  | 	TypeSpecifierFloat80 | 
					
						
							|  |  |  | 	TypeSpecifierDouble | 
					
						
							|  |  |  | 	TypeSpecifierSigned | 
					
						
							|  |  |  | 	TypeSpecifierUnsigned | 
					
						
							|  |  |  | 	TypeSpecifierBool | 
					
						
							|  |  |  | 	TypeSpecifierComplex | 
					
						
							|  |  |  | 	TypeSpecifierStructOrUnion | 
					
						
							|  |  |  | 	TypeSpecifierEnum | 
					
						
							|  |  |  | 	TypeSpecifierTypedefName | 
					
						
							|  |  |  | 	TypeSpecifierTypeofExpr | 
					
						
							|  |  |  | 	TypeSpecifierTypeofType | 
					
						
							|  |  |  | 	TypeSpecifierAtomic | 
					
						
							|  |  |  | 	TypeSpecifierFract | 
					
						
							|  |  |  | 	TypeSpecifierSat | 
					
						
							|  |  |  | 	TypeSpecifierAccum | 
					
						
							|  |  |  | 	TypeSpecifierFloat32 | 
					
						
							|  |  |  | 	TypeSpecifierFloat64 | 
					
						
							|  |  |  | 	TypeSpecifierFloat32x | 
					
						
							|  |  |  | 	TypeSpecifierFloat64x | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n TypeSpecifierCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case TypeSpecifierVoid: | 
					
						
							|  |  |  | 		return "TypeSpecifierVoid" | 
					
						
							|  |  |  | 	case TypeSpecifierChar: | 
					
						
							|  |  |  | 		return "TypeSpecifierChar" | 
					
						
							|  |  |  | 	case TypeSpecifierShort: | 
					
						
							|  |  |  | 		return "TypeSpecifierShort" | 
					
						
							|  |  |  | 	case TypeSpecifierInt: | 
					
						
							|  |  |  | 		return "TypeSpecifierInt" | 
					
						
							|  |  |  | 	case TypeSpecifierInt8: | 
					
						
							|  |  |  | 		return "TypeSpecifierInt8" | 
					
						
							|  |  |  | 	case TypeSpecifierInt16: | 
					
						
							|  |  |  | 		return "TypeSpecifierInt16" | 
					
						
							|  |  |  | 	case TypeSpecifierInt32: | 
					
						
							|  |  |  | 		return "TypeSpecifierInt32" | 
					
						
							|  |  |  | 	case TypeSpecifierInt64: | 
					
						
							|  |  |  | 		return "TypeSpecifierInt64" | 
					
						
							|  |  |  | 	case TypeSpecifierInt128: | 
					
						
							|  |  |  | 		return "TypeSpecifierInt128" | 
					
						
							|  |  |  | 	case TypeSpecifierLong: | 
					
						
							|  |  |  | 		return "TypeSpecifierLong" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat16: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat16" | 
					
						
							|  |  |  | 	case TypeSpecifierDecimal32: | 
					
						
							|  |  |  | 		return "TypeSpecifierDecimal32" | 
					
						
							|  |  |  | 	case TypeSpecifierDecimal64: | 
					
						
							|  |  |  | 		return "TypeSpecifierDecimal64" | 
					
						
							|  |  |  | 	case TypeSpecifierDecimal128: | 
					
						
							|  |  |  | 		return "TypeSpecifierDecimal128" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat128: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat128" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat80: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat80" | 
					
						
							|  |  |  | 	case TypeSpecifierDouble: | 
					
						
							|  |  |  | 		return "TypeSpecifierDouble" | 
					
						
							|  |  |  | 	case TypeSpecifierSigned: | 
					
						
							|  |  |  | 		return "TypeSpecifierSigned" | 
					
						
							|  |  |  | 	case TypeSpecifierUnsigned: | 
					
						
							|  |  |  | 		return "TypeSpecifierUnsigned" | 
					
						
							|  |  |  | 	case TypeSpecifierBool: | 
					
						
							|  |  |  | 		return "TypeSpecifierBool" | 
					
						
							|  |  |  | 	case TypeSpecifierComplex: | 
					
						
							|  |  |  | 		return "TypeSpecifierComplex" | 
					
						
							|  |  |  | 	case TypeSpecifierStructOrUnion: | 
					
						
							|  |  |  | 		return "TypeSpecifierStructOrUnion" | 
					
						
							|  |  |  | 	case TypeSpecifierEnum: | 
					
						
							|  |  |  | 		return "TypeSpecifierEnum" | 
					
						
							|  |  |  | 	case TypeSpecifierTypedefName: | 
					
						
							|  |  |  | 		return "TypeSpecifierTypedefName" | 
					
						
							|  |  |  | 	case TypeSpecifierTypeofExpr: | 
					
						
							|  |  |  | 		return "TypeSpecifierTypeofExpr" | 
					
						
							|  |  |  | 	case TypeSpecifierTypeofType: | 
					
						
							|  |  |  | 		return "TypeSpecifierTypeofType" | 
					
						
							|  |  |  | 	case TypeSpecifierAtomic: | 
					
						
							|  |  |  | 		return "TypeSpecifierAtomic" | 
					
						
							|  |  |  | 	case TypeSpecifierFract: | 
					
						
							|  |  |  | 		return "TypeSpecifierFract" | 
					
						
							|  |  |  | 	case TypeSpecifierSat: | 
					
						
							|  |  |  | 		return "TypeSpecifierSat" | 
					
						
							|  |  |  | 	case TypeSpecifierAccum: | 
					
						
							|  |  |  | 		return "TypeSpecifierAccum" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat32: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat32" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat64: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat64" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat32x: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat32x" | 
					
						
							|  |  |  | 	case TypeSpecifierFloat64x: | 
					
						
							|  |  |  | 		return "TypeSpecifierFloat64x" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("TypeSpecifierCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // TypeSpecifier represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	TypeSpecifier: | 
					
						
							|  |  |  | //	        "void"                       // Case TypeSpecifierVoid | 
					
						
							|  |  |  | //	|       "char"                       // Case TypeSpecifierChar | 
					
						
							|  |  |  | //	|       "short"                      // Case TypeSpecifierShort | 
					
						
							|  |  |  | //	|       "int"                        // Case TypeSpecifierInt | 
					
						
							|  |  |  | //	|       "__int8"                     // Case TypeSpecifierInt8 | 
					
						
							|  |  |  | //	|       "__int16"                    // Case TypeSpecifierInt16 | 
					
						
							|  |  |  | //	|       "__int32"                    // Case TypeSpecifierInt32 | 
					
						
							|  |  |  | //	|       "__int64"                    // Case TypeSpecifierInt64 | 
					
						
							|  |  |  | //	|       "__int128"                   // Case TypeSpecifierInt128 | 
					
						
							|  |  |  | //	|       "long"                       // Case TypeSpecifierLong | 
					
						
							|  |  |  | //	|       "float"                      // Case TypeSpecifierFloat | 
					
						
							|  |  |  | //	|       "__fp16"                     // Case TypeSpecifierFloat16 | 
					
						
							|  |  |  | //	|       "_Decimal32"                 // Case TypeSpecifierDecimal32 | 
					
						
							|  |  |  | //	|       "_Decimal64"                 // Case TypeSpecifierDecimal64 | 
					
						
							|  |  |  | //	|       "_Decimal128"                // Case TypeSpecifierDecimal128 | 
					
						
							|  |  |  | //	|       "_Float128"                  // Case TypeSpecifierFloat128 | 
					
						
							|  |  |  | //	|       "__float80"                  // Case TypeSpecifierFloat80 | 
					
						
							|  |  |  | //	|       "double"                     // Case TypeSpecifierDouble | 
					
						
							|  |  |  | //	|       "signed"                     // Case TypeSpecifierSigned | 
					
						
							|  |  |  | //	|       "unsigned"                   // Case TypeSpecifierUnsigned | 
					
						
							|  |  |  | //	|       "_Bool"                      // Case TypeSpecifierBool | 
					
						
							|  |  |  | //	|       "_Complex"                   // Case TypeSpecifierComplex | 
					
						
							|  |  |  | //	|       StructOrUnionSpecifier       // Case TypeSpecifierStructOrUnion | 
					
						
							|  |  |  | //	|       EnumSpecifier                // Case TypeSpecifierEnum | 
					
						
							|  |  |  | //	|       TYPEDEFNAME                  // Case TypeSpecifierTypedefName | 
					
						
							|  |  |  | //	|       "typeof" '(' Expression ')'  // Case TypeSpecifierTypeofExpr | 
					
						
							|  |  |  | //	|       "typeof" '(' TypeName ')'    // Case TypeSpecifierTypeofType | 
					
						
							|  |  |  | //	|       AtomicTypeSpecifier          // Case TypeSpecifierAtomic | 
					
						
							|  |  |  | //	|       "_Fract"                     // Case TypeSpecifierFract | 
					
						
							|  |  |  | //	|       "_Sat"                       // Case TypeSpecifierSat | 
					
						
							|  |  |  | //	|       "_Accum"                     // Case TypeSpecifierAccum | 
					
						
							|  |  |  | //	|       "_Float32"                   // Case TypeSpecifierFloat32 | 
					
						
							|  |  |  | //	|       "_Float64"                   // Case TypeSpecifierFloat64 | 
					
						
							|  |  |  | //	|       "_Float32x"                  // Case TypeSpecifierFloat32x | 
					
						
							|  |  |  | //	|       "_Float64x"                  // Case TypeSpecifierFloat64x | 
					
						
							|  |  |  | type TypeSpecifier struct { | 
					
						
							|  |  |  | 	resolvedIn             Scope // Case TypedefName | 
					
						
							|  |  |  | 	typ                    Type | 
					
						
							|  |  |  | 	AtomicTypeSpecifier    *AtomicTypeSpecifier | 
					
						
							|  |  |  | 	Case                   TypeSpecifierCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	EnumSpecifier          *EnumSpecifier | 
					
						
							|  |  |  | 	Expression             *Expression | 
					
						
							|  |  |  | 	StructOrUnionSpecifier *StructOrUnionSpecifier | 
					
						
							|  |  |  | 	Token                  Token | 
					
						
							|  |  |  | 	Token2                 Token | 
					
						
							|  |  |  | 	Token3                 Token | 
					
						
							|  |  |  | 	TypeName               *TypeName | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *TypeSpecifier) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *TypeSpecifier) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 27: | 
					
						
							|  |  |  | 		return n.AtomicTypeSpecifier.Position() | 
					
						
							|  |  |  | 	case 23: | 
					
						
							|  |  |  | 		return n.EnumSpecifier.Position() | 
					
						
							|  |  |  | 	case 22: | 
					
						
							|  |  |  | 		return n.StructOrUnionSpecifier.Position() | 
					
						
							|  |  |  | 	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: | 
					
						
							|  |  |  | 		return n.Token.Position() | 
					
						
							|  |  |  | 	case 25: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Expression.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 26: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeName.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // UnaryExpressionCase represents case numbers of production UnaryExpression | 
					
						
							|  |  |  | type UnaryExpressionCase int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Values of type UnaryExpressionCase | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	UnaryExpressionPostfix UnaryExpressionCase = iota | 
					
						
							|  |  |  | 	UnaryExpressionInc | 
					
						
							|  |  |  | 	UnaryExpressionDec | 
					
						
							|  |  |  | 	UnaryExpressionAddrof | 
					
						
							|  |  |  | 	UnaryExpressionDeref | 
					
						
							|  |  |  | 	UnaryExpressionPlus | 
					
						
							|  |  |  | 	UnaryExpressionMinus | 
					
						
							|  |  |  | 	UnaryExpressionCpl | 
					
						
							|  |  |  | 	UnaryExpressionNot | 
					
						
							|  |  |  | 	UnaryExpressionSizeofExpr | 
					
						
							|  |  |  | 	UnaryExpressionSizeofType | 
					
						
							|  |  |  | 	UnaryExpressionLabelAddr | 
					
						
							|  |  |  | 	UnaryExpressionAlignofExpr | 
					
						
							|  |  |  | 	UnaryExpressionAlignofType | 
					
						
							|  |  |  | 	UnaryExpressionImag | 
					
						
							|  |  |  | 	UnaryExpressionReal | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer | 
					
						
							|  |  |  | func (n UnaryExpressionCase) String() string { | 
					
						
							|  |  |  | 	switch n { | 
					
						
							|  |  |  | 	case UnaryExpressionPostfix: | 
					
						
							|  |  |  | 		return "UnaryExpressionPostfix" | 
					
						
							|  |  |  | 	case UnaryExpressionInc: | 
					
						
							|  |  |  | 		return "UnaryExpressionInc" | 
					
						
							|  |  |  | 	case UnaryExpressionDec: | 
					
						
							|  |  |  | 		return "UnaryExpressionDec" | 
					
						
							|  |  |  | 	case UnaryExpressionAddrof: | 
					
						
							|  |  |  | 		return "UnaryExpressionAddrof" | 
					
						
							|  |  |  | 	case UnaryExpressionDeref: | 
					
						
							|  |  |  | 		return "UnaryExpressionDeref" | 
					
						
							|  |  |  | 	case UnaryExpressionPlus: | 
					
						
							|  |  |  | 		return "UnaryExpressionPlus" | 
					
						
							|  |  |  | 	case UnaryExpressionMinus: | 
					
						
							|  |  |  | 		return "UnaryExpressionMinus" | 
					
						
							|  |  |  | 	case UnaryExpressionCpl: | 
					
						
							|  |  |  | 		return "UnaryExpressionCpl" | 
					
						
							|  |  |  | 	case UnaryExpressionNot: | 
					
						
							|  |  |  | 		return "UnaryExpressionNot" | 
					
						
							|  |  |  | 	case UnaryExpressionSizeofExpr: | 
					
						
							|  |  |  | 		return "UnaryExpressionSizeofExpr" | 
					
						
							|  |  |  | 	case UnaryExpressionSizeofType: | 
					
						
							|  |  |  | 		return "UnaryExpressionSizeofType" | 
					
						
							|  |  |  | 	case UnaryExpressionLabelAddr: | 
					
						
							|  |  |  | 		return "UnaryExpressionLabelAddr" | 
					
						
							|  |  |  | 	case UnaryExpressionAlignofExpr: | 
					
						
							|  |  |  | 		return "UnaryExpressionAlignofExpr" | 
					
						
							|  |  |  | 	case UnaryExpressionAlignofType: | 
					
						
							|  |  |  | 		return "UnaryExpressionAlignofType" | 
					
						
							|  |  |  | 	case UnaryExpressionImag: | 
					
						
							|  |  |  | 		return "UnaryExpressionImag" | 
					
						
							|  |  |  | 	case UnaryExpressionReal: | 
					
						
							|  |  |  | 		return "UnaryExpressionReal" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return fmt.Sprintf("UnaryExpressionCase(%v)", int(n)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // UnaryExpression represents data reduced by productions: | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | //	UnaryExpression: | 
					
						
							|  |  |  | //	        PostfixExpression            // Case UnaryExpressionPostfix | 
					
						
							|  |  |  | //	|       "++" UnaryExpression         // Case UnaryExpressionInc | 
					
						
							|  |  |  | //	|       "--" UnaryExpression         // Case UnaryExpressionDec | 
					
						
							|  |  |  | //	|       '&' CastExpression           // Case UnaryExpressionAddrof | 
					
						
							|  |  |  | //	|       '*' CastExpression           // Case UnaryExpressionDeref | 
					
						
							|  |  |  | //	|       '+' CastExpression           // Case UnaryExpressionPlus | 
					
						
							|  |  |  | //	|       '-' CastExpression           // Case UnaryExpressionMinus | 
					
						
							|  |  |  | //	|       '~' CastExpression           // Case UnaryExpressionCpl | 
					
						
							|  |  |  | //	|       '!' CastExpression           // Case UnaryExpressionNot | 
					
						
							|  |  |  | //	|       "sizeof" UnaryExpression     // Case UnaryExpressionSizeofExpr | 
					
						
							|  |  |  | //	|       "sizeof" '(' TypeName ')'    // Case UnaryExpressionSizeofType | 
					
						
							|  |  |  | //	|       "&&" IDENTIFIER              // Case UnaryExpressionLabelAddr | 
					
						
							|  |  |  | //	|       "_Alignof" UnaryExpression   // Case UnaryExpressionAlignofExpr | 
					
						
							|  |  |  | //	|       "_Alignof" '(' TypeName ')'  // Case UnaryExpressionAlignofType | 
					
						
							|  |  |  | //	|       "__imag__" UnaryExpression   // Case UnaryExpressionImag | 
					
						
							|  |  |  | //	|       "__real__" UnaryExpression   // Case UnaryExpressionReal | 
					
						
							|  |  |  | type UnaryExpression struct { | 
					
						
							|  |  |  | 	Operand           Operand | 
					
						
							|  |  |  | 	lexicalScope      Scope | 
					
						
							|  |  |  | 	IsSideEffectsFree bool | 
					
						
							|  |  |  | 	Case              UnaryExpressionCase `PrettyPrint:"stringer,zero"` | 
					
						
							|  |  |  | 	CastExpression    *CastExpression | 
					
						
							|  |  |  | 	PostfixExpression *PostfixExpression | 
					
						
							|  |  |  | 	Token             Token | 
					
						
							|  |  |  | 	Token2            Token | 
					
						
							|  |  |  | 	Token3            Token | 
					
						
							|  |  |  | 	TypeName          *TypeName | 
					
						
							|  |  |  | 	UnaryExpression   *UnaryExpression | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // String implements fmt.Stringer. | 
					
						
							|  |  |  | func (n *UnaryExpression) String() string { return PrettyString(n) } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Position reports the position of the first component of n, if available. | 
					
						
							|  |  |  | func (n *UnaryExpression) Position() (r token.Position) { | 
					
						
							|  |  |  | 	if n == nil { | 
					
						
							|  |  |  | 		return r | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch n.Case { | 
					
						
							|  |  |  | 	case 0: | 
					
						
							|  |  |  | 		return n.PostfixExpression.Position() | 
					
						
							|  |  |  | 	case 3, 4, 5, 6, 7, 8: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.CastExpression.Position() | 
					
						
							|  |  |  | 	case 11: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token2.Position() | 
					
						
							|  |  |  | 	case 10, 13: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.Token2.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if p := n.TypeName.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.Token3.Position() | 
					
						
							|  |  |  | 	case 1, 2, 9, 12, 14, 15: | 
					
						
							|  |  |  | 		if p := n.Token.Position(); p.IsValid() { | 
					
						
							|  |  |  | 			return p | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return n.UnaryExpression.Position() | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		panic("internal error") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |