Changeset 80722d0


Ignore:
Timestamp:
Aug 20, 2016, 7:06:26 PM (8 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
ab57786, d30790f
Parents:
e6955b1 (diff), 4a7d895 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg2:software/cfa/cfa-cc

Files:
11 edited

Legend:

Unmodified
Added
Removed
  • doc/aaron_comp_II/comp_II.tex

    re6955b1 r80722d0  
    9191\CFA\footnote{Pronounced ``C-for-all'', and written \CFA or \CFL.} is an evolutionary modernization of the C programming language currently being designed and built at the University of Waterloo by a team led by Peter Buhr.
    9292\CFA both fixes existing design problems and adds multiple new features to C, including name overloading, user-defined operators, parametric-polymorphic routines, and type constructors and destructors, among others.
    93 The new features make \CFA significantly more powerful and expressive than C, but impose a significant compile-time cost, particularly in the expression resolver, which must evaluate the typing rules of a much more complex type-system.
     93The new features make \CFA more powerful and expressive than C, but impose a compile-time cost, particularly in the expression resolver, which must evaluate the typing rules of a significantly more complex type-system.
    9494
    9595The primary goal of this research project is to develop a sufficiently performant expression resolution algorithm, experimentally validate its performance, and integrate it into CFA, the \CFA reference compiler.
     
    104104
    105105It is important to note that \CFA is not an object-oriented language.
    106 \CFA does have a system of (possibly implicit) type conversions derived from C's type conversions; while these conversions may be thought of as something like an inheritance hierarchy the underlying semantics are significantly different and such an analogy is loose at best.
     106\CFA does have a system of (possibly implicit) type conversions derived from C's type conversions; while these conversions may be thought of as something like an inheritance hierarchy, the underlying semantics are significantly different and such an analogy is loose at best.
    107107Particularly, \CFA has no concept of ``subclass'', and thus no need to integrate an inheritance-based form of polymorphism with its parametric and overloading-based polymorphism.
    108108The graph structure of the \CFA type conversions is also markedly different than an inheritance graph; it has neither a top nor a bottom type, and does not satisfy the lattice properties typical of inheritance graphs.
     
    120120\end{lstlisting}
    121121The ©identity© function above can be applied to any complete object type (or ``©otype©'').
    122 The type variable ©T© is transformed into a set of additional implicit parameters to ©identity© which encode sufficient information about ©T© to create and return a variable of that type.
     122The type variable ©T© is transformed into a set of additional implicit parameters to ©identity©, which encode sufficient information about ©T© to create and return a variable of that type.
    123123The current \CFA implementation passes the size and alignment of the type represented by an ©otype© parameter, as well as an assignment operator, constructor, copy constructor and destructor.
    124124Here, the runtime cost of polymorphism is spread over each polymorphic call, due to passing more arguments to polymorphic functions; preliminary experiments have shown this overhead to be similar to \CC virtual function calls.
    125125Determining if packaging all polymorphic arguments to a function into a virtual function table would reduce the runtime overhead of polymorphic calls is an open research question.
    126126
    127 Since bare polymorphic types do not provide a great range of available operations, \CFA also provides a \emph{type assertion} mechanism to provide further information about a type:
     127Since bare polymorphic types do not provide a great range of available operations, \CFA provides a \emph{type assertion} mechanism to provide further information about a type:
    128128\begin{lstlisting}
    129129forall(otype T ®| { T twice(T); }®)
     
    137137\end{lstlisting}
    138138These type assertions may be either variable or function declarations that depend on a polymorphic type variable.
    139 ©four_times© can only be called with an argument for which there exists a function named ©twice© that can take that argument and return another value of the same type; a pointer to the appropriate ©twice© function is passed as an additional implicit parameter to the call to ©four_times©.
     139©four_times© can only be called with an argument for which there exists a function named ©twice© that can take that argument and return another value of the same type; a pointer to the appropriate ©twice© function is passed as an additional implicit parameter to the call of ©four_times©.
    140140
    141141Monomorphic specializations of polymorphic functions can themselves be used to satisfy type assertions.
     
    148148The compiler accomplishes this by creating a wrapper function calling ©twice // (2)© with ©S© bound to ©double©, then providing this wrapper function to ©four_times©\footnote{©twice // (2)© could also have had a type parameter named ©T©; \CFA specifies renaming of the type parameters, which would avoid the name conflict with the type variable ©T© of ©four_times©.}.
    149149
    150 Finding appropriate functions to satisfy type assertions is essentially a recursive case of expression resolution, as it takes a name (that of the type assertion) and attempts to match it to a suitable declaration in the current scope.
     150Finding appropriate functions to satisfy type assertions is essentially a recursive case of expression resolution, as it takes a name (that of the type assertion) and attempts to match it to a suitable declaration \emph{in the current scope}.
    151151If a polymorphic function can be used to satisfy one of its own type assertions, this recursion may not terminate, as it is possible that function is examined as a candidate for its own type assertion unboundedly repeatedly.
    152152To avoid infinite loops, the current CFA compiler imposes a fixed limit on the possible depth of recursion, similar to that employed by most \CC compilers for template expansion; this restriction means that there are some semantically well-typed expressions that cannot be resolved by CFA.
     
    170170forall(otype M | has_magnitude(M))
    171171M max_magnitude( M a, M b ) {
    172     M aa = abs(a), ab = abs(b);
    173     return aa < ab ? b : a;
     172    return abs(a) < abs(b) ? b : a;
    174173}
    175174\end{lstlisting}
    176175
    177176Semantically, traits are simply a named lists of type assertions, but they may be used for many of the same purposes that interfaces in Java or abstract base classes in \CC are used for.
    178 Unlike Java interfaces or \CC base classes, \CFA types do not explicitly state any inheritance relationship to traits they satisfy; this can be considered a form of structural inheritance, similar to interface implementation in Go, as opposed to the nominal inheritance model of Java and \CC.
     177Unlike Java interfaces or \CC base classes, \CFA types do not explicitly state any inheritance relationship to traits they satisfy; this can be considered a form of structural inheritance, similar to implementation of an interface in Go, as opposed to the nominal inheritance model of Java and \CC.
    179178Nominal inheritance can be simulated with traits using marker variables or functions:
    180179\begin{lstlisting}
     
    190189\end{lstlisting}
    191190
    192 Traits, however, are significantly more powerful than nominal-inheritance interfaces; firstly, due to the scoping rules of the declarations which satisfy a trait's type assertions, a type may not satisfy a trait everywhere that the type is declared, as with ©char© and the ©nominal© trait above.
    193 Secondly, traits may be used to declare a relationship between multiple types, a property which may be difficult or impossible to represent in nominal-inheritance type systems:
     191Traits, however, are significantly more powerful than nominal-inheritance interfaces; firstly, due to the scoping rules of the declarations that satisfy a trait's type assertions, a type may not satisfy a trait everywhere that the type is declared, as with ©char© and the ©nominal© trait above.
     192Secondly, traits may be used to declare a relationship among multiple types, a property that may be difficult or impossible to represent in nominal-inheritance type systems:
    194193\begin{lstlisting}
    195194trait pointer_like(®otype Ptr, otype El®) {
     
    202201};
    203202
    204 typedef list* list_iterator;
     203typedef list *list_iterator;
    205204
    206205lvalue int *?( list_iterator it ) {
     
    209208\end{lstlisting}
    210209
    211 In the example above, ©(list_iterator, int)© satisfies ©pointer_like© by the given function, and ©(list_iterator, list)© also satisfies ©pointer_like© by the built-in pointer dereference operator.
     210In the example above, ©(list_iterator, int)© satisfies ©pointer_like© by the user-defined dereference function, and ©(list_iterator, list)© also satisfies ©pointer_like© by the built-in dereference operator for pointers.
     211Given a declaration ©list_iterator it©, ©*it© can be either an ©int© or a ©list©, with the meaning disambiguated by context (\eg ©int x = *it;© interprets ©*it© as an ©int©, while ©(*it).value = 42;© interprets ©*it© as a ©list©).
    212212While a nominal-inheritance system with associated types could model one of those two relationships by making ©El© an associated type of ©Ptr© in the ©pointer_like© implementation, few such systems could model both relationships simultaneously.
    213213
    214 The flexibility of \CFA's implicit trait satisfaction mechanism provides programmers with a great deal of power, but also blocks some optimization approaches for expression resolution.
    215 The ability of types to begin to or cease to satisfy traits when declarations go into or out of scope makes caching of trait satisfaction judgements difficult, and the ability of traits to take multiple type parameters could lead to a combinatorial explosion of work in any attempt to pre-compute trait satisfaction relationships.
     214The flexibility of \CFA's implicit trait-satisfaction mechanism provides programmers with a great deal of power, but also blocks some optimization approaches for expression resolution.
     215The ability of types to begin to or cease to satisfy traits when declarations go into or out of scope makes caching of trait satisfaction judgements difficult, and the ability of traits to take multiple type parameters can lead to a combinatorial explosion of work in any attempt to pre-compute trait satisfaction relationships.
    216216On the other hand, the addition of a nominal inheritance mechanism to \CFA's type system or replacement of \CFA's trait satisfaction system with a more object-oriented inheritance model and investigation of possible expression resolution optimizations for such a system may be an interesting avenue of further research.
    217217
    218218\subsection{Name Overloading}
    219219In C, no more than one variable or function in the same scope may share the same name\footnote{Technically, C has multiple separated namespaces, one holding ©struct©, ©union©, and ©enum© tags, one holding labels, one holding typedef names, variable, function, and enumerator identifiers, and one for each ©struct© or ©union© type holding the field names.}, and variable or function declarations in inner scopes with the same name as a declaration in an outer scope hide the outer declaration.
    220 This makes finding the proper declaration to match to a variable expression or function application a simple matter of symbol table lookup, which can be easily and efficiently implemented.
     220This restriction makes finding the proper declaration to match to a variable expression or function application a simple matter of symbol-table lookup, which can be easily and efficiently implemented.
    221221\CFA, on the other hand, allows overloading of variable and function names, so long as the overloaded declarations do not have the same type, avoiding the multiplication of variable and function names for different types common in the C standard library, as in the following example:
    222222\begin{lstlisting}
     
    229229double max = DBL_MAX;  // (4)
    230230
    231 max(7, -max);   // uses (1) and (3), by matching int type of 7
    232 max(max, 3.14); // uses (2) and (4), by matching double type of 3.14
     231max(7, -max);   // uses (1) and (3), by matching int type of the constant 7
     232max(max, 3.14); // uses (2) and (4), by matching double type of the constant 3.14
    233233
    234234max(max, -max);  // ERROR: ambiguous
    235 int m = max(max, -max); // uses (1) and (3) twice, by return type
     235int m = max(max, -max); // uses (1) once and (3) twice, by matching return type
    236236\end{lstlisting}
    237237
     
    239239
    240240\subsection{Implicit Conversions}
    241 In addition to the multiple interpretations of an expression produced by name overloading, \CFA also supports all of the implicit conversions present in C, producing further candidate interpretations for expressions.
    242 C does not have a traditionally-defined inheritance hierarchy of types, but the C standard's rules for the ``usual arithmetic conversions'' define which of the built-in types are implicitly convertable to which other types, and the relative cost of any pair of such conversions from a single source type.
    243 \CFA adds to the usual arithmetic conversions rules for determining the cost of binding a polymorphic type variable in a function call; such bindings are cheaper than any \emph{unsafe} (narrowing) conversion, \eg ©int© to ©char©, but more expensive than any \emph{safe} (widening) conversion, \eg ©int© to ©double©.
    244 
    245 The expression resolution problem, then, is to find the unique minimal-cost interpretation of each expression in the program, where all identifiers must be matched to a declaration and implicit conversions or polymorphic bindings of the result of an expression may increase the cost of the expression.
     241In addition to the multiple interpretations of an expression produced by name overloading, \CFA must support all of the implicit conversions present in C for backward compatibility, producing further candidate interpretations for expressions.
     242C does not have a inheritance hierarchy of types, but the C standard's rules for the ``usual arithmetic conversions'' define which of the built-in types are implicitly convertable to which other types, and the relative cost of any pair of such conversions from a single source type.
     243\CFA adds to the usual arithmetic conversions rules defining the cost of binding a polymorphic type variable in a function call; such bindings are cheaper than any \emph{unsafe} (narrowing) conversion, \eg ©int© to ©char©, but more expensive than any \emph{safe} (widening) conversion, \eg ©int© to ©double©.
     244
     245The expression resolution problem, then, is to find the unique minimal-cost interpretation of each expression in the program, where all identifiers must be matched to a declaration, and implicit conversions or polymorphic bindings of the result of an expression may increase the cost of the expression.
    246246Note that which subexpression interpretation is minimal-cost may require contextual information to disambiguate.
    247 For instance, in the example in the previous subsection, ©max(max, -max)© cannot be unambiguously resolved, but ©int m = max(max, -max);© has a single minimal-cost resolution.
    248 ©int m = (int)max((double)max, -(double)max)© is also be a valid interpretation, but is not minimal-cost due to the unsafe cast from the ©double© result of ©max© to ©int© (the two ©double© casts function as type ascriptions selecting ©double max© rather than casts from ©int max© to ©double©, and as such are zero-cost).
     247For instance, in the example in the previous subsection, ©max(max, -max)© cannot be unambiguously resolved, but ©int m = max(max, -max)© has a single minimal-cost resolution.
     248While the interpretation ©int m = (int)max((double)max, -(double)max)© is also a valid interpretation, it is not minimal-cost due to the unsafe cast from the ©double© result of ©max© to ©int© (the two ©double© casts function as type ascriptions selecting ©double max© rather than casts from ©int max© to ©double©, and as such are zero-cost).
    249249
    250250\subsubsection{User-generated Implicit Conversions}
     
    252252Such a conversion system should be simple for programmers to utilize, and fit naturally with the existing design of implicit conversions in C; ideally it would also be sufficiently powerful to encode C's usual arithmetic conversions itself, so that \CFA only has one set of rules for conversions.
    253253
    254 Ditchfield~\cite{Ditchfield:conversions} has laid out a framework for using polymorphic-conversion-constructor functions to create a directed acyclic graph (DAG) of conversions.
     254Ditchfield~\cite{Ditchfield:conversions} laid out a framework for using polymorphic-conversion-constructor functions to create a directed acyclic graph (DAG) of conversions.
    255255A monomorphic variant of these functions can be used to mark a conversion arc in the DAG as only usable as the final step in a conversion.
    256 With these two types of conversion arcs, separate DAGs can be created for the safe and the unsafe conversions, and conversion cost can be represented as path length through the DAG.
     256With these two types of conversion arcs, separate DAGs can be created for the safe and the unsafe conversions, and conversion cost can be represented the length of the shortest path through the DAG from one type to another.
    257257\begin{figure}[h]
    258258\centering
    259259\includegraphics{conversion_dag}
    260 \caption{A portion of the implicit conversion DAG for built-in types.}
     260\caption{A portion of the implicit conversion DAG for built-in types.}\label{fig:conv_dag}
    261261\end{figure}
    262 As can be seen in the example DAG above, there are either safe or unsafe paths between each of the arithmetic types listed; the ``final'' arcs are important both to avoid creating cycles in the signed-unsigned conversions, and to disambiguate potential diamond conversions (\eg, if the ©int© to ©unsigned int© conversion was not marked final there would be two length-two paths from ©int© to ©unsigned long©, and it would be impossible to choose which one; however, since the ©unsigned int© to ©unsigned long© arc can not be traversed after the final ©int© to ©unsigned int© arc, there is a single unambiguous conversion path from ©int© to ©unsigned long©).
     262As can be seen in Figure~\ref{fig:conv_dag}, there are either safe or unsafe paths between each of the arithmetic types listed; the ``final'' arcs are important both to avoid creating cycles in the signed-unsigned conversions, and to disambiguate potential diamond conversions (\eg, if the ©int© to ©unsigned int© conversion was not marked final there would be two length-two paths from ©int© to ©unsigned long©, making it impossible to choose which one; however, since the ©unsigned int© to ©unsigned long© arc can not be traversed after the final ©int© to ©unsigned int© arc, there is a single unambiguous conversion path from ©int© to ©unsigned long©).
    263263
    264264Open research questions on this topic include:
    265265\begin{itemize}
    266266\item Can a conversion graph be generated that represents each allowable conversion in C with a unique minimal-length path such that the path lengths accurately represent the relative costs of the conversions?
    267 \item Can such a graph representation can be usefully augmented to include user-defined types as well as built-in types?
    268 \item Can the graph can be efficiently represented and used in the expression resolver?
     267\item Can such a graph representation be usefully augmented to include user-defined types as well as built-in types?
     268\item Can the graph be efficiently represented and used in the expression resolver?
    269269\end{itemize}
    270270
    271271\subsection{Constructors and Destructors}
    272272Rob Shluntz, a current member of the \CFA research team, has added constructors and destructors to \CFA.
    273 Each type has an overridable default-generated zero-argument constructor, copy constructor, assignment operator, and destructor; for ©struct© types these functions each call their equivalents on each field of the ©struct©.
    274 This affects expression resolution because an ©otype© type variable ©T© implicitly adds four type assertions, one for each of these four functions, so assertion resolution is pervasive in \CFA polymorphic functions, even those without any explicit type assertions.
     273Each type has an overridable default-generated zero-argument constructor, copy constructor, assignment operator, and destructor.
     274For ©struct© types these functions each call their equivalents on each field of the ©struct©.
     275This feature affects expression resolution because an ©otype© type variable ©T© implicitly adds four type assertions, one for each of these four functions, so assertion resolution is pervasive in \CFA polymorphic functions, even those without any explicit type assertions.
    275276The following example shows the implicitly-generated code in green:
    276277\begin{lstlisting}
     
    280281};
    281282
    282 ¢void ?{}(kv *this) {
    283     ?{}(&this->key);
    284     ?{}(&this->value);
    285 }
    286 void ?{}(kv *this, kv that) {
    287     ?{}(&this->key, that.key);
    288     ?{}(&this->value, that.value);
    289 }
    290 kv ?=?(kv *this, kv that) {
    291     ?=?(&this->key, that.key);
    292     ?=?(&this->value, that.value);
     283¢void ?{}(kv *this) {  // default constructor
     284    ?{}(&(this->key));  // call recursively on members
     285    ?{}(&(this->value));
     286}
     287void ?{}(kv *this, kv that) {  // copy constructor
     288    ?{}(&(this->key), that.key);
     289    ?{}(&(this->value), that.value);
     290}
     291kv ?=?(kv *this, kv that) {  // assignment operator
     292    ?=?(&(this->key), that.key);
     293    ?=?(&(this->value), that.value);
    293294    return *this;
    294295}
    295 void ^?{}(kv *this) {
    296     ^?{}(&this->key);
    297     ^?{}(&this->value);
     296void ^?{}(kv *this) {  // destructor
     297    ^?{}(&(this->key));
     298    ^?{}(&(this->value));
    298299
    299300
     
    335336\begin{itemize}
    336337\item Since there is an implicit conversion from ©void*© to any pointer type, the highlighted expression can be interpreted as either a ©void*©, matching ©f // (1)©, or a ©box(S)*© for some type ©S©, matching ©f // (2)©.
    337 \item To determine the cost of the ©box(S)© interpretation, a type must be found for ©S© which satisfies the ©otype© implicit type assertions (assignment operator, default and copy constructors, and destructor); one option is ©box(S2)© for some type ©S2©.
     338\item To determine the cost of the ©box(S)© interpretation, a type must be found for ©S© that satisfies the ©otype© implicit type assertions (assignment operator, default and copy constructors, and destructor); one option is ©box(S2)© for some type ©S2©.
    338339\item The assignment operator, default and copy constructors, and destructor of ©box(T)© are also polymorphic functions, each of which require the type parameter ©T© to have an assignment operator, default and copy constructors, and destructor. When choosing an interpretation for ©S2©, one option is ©box(S3)©, for some type ©S3©.
    339340\item The previous step repeats until stopped, with four times as much work performed at each step.
    340341\end{itemize}
    341 This problem can occur in any resolution context where a polymorphic function that can satisfy its own type assertions is required for a possible interpretation of an expression with no constraints on its type, and is thus not limited to combinations of generic types with ©void*© conversions, though constructors for generic types often satisfy their own assertions and a polymorphic conversion such as the ©void*© conversion to a polymorphic variable can create an expression with no constraints on its type.
     342This problem can occur in any resolution context where a polymorphic function can satisfy its own type assertions is required for a possible interpretation of an expression with no constraints on its type, and is thus not limited to combinations of generic types with ©void*© conversions.
     343However, constructors for generic types often satisfy their own assertions and a polymorphic conversion such as the ©void*© conversion to a polymorphic variable is a common way to create an expression with no constraints on its type.
    342344As discussed above, the \CFA expression resolver must handle this possible infinite recursion somehow, and it occurs fairly naturally in code like the above that uses generic types.
    343345
     
    345347\CFA adds \emph{tuple types} to C, a syntactic facility for referring to lists of values anonymously or with a single identifier.
    346348An identifier may name a tuple, and a function may return one.
    347 Particularly relevantly for resolution, a tuple may be implicitly \emph{destructured} into a list of values, as in the call to ©swap© below:
    348 \begin{lstlisting}
    349 [char, char] x = [ '!', '?' ];
    350 int x = 42;
    351 
    352 forall(otype T) [T, T] swap( T a, T b ) { return [b, a]; }
     349Particularly relevantly for resolution, a tuple may be implicitly \emph{destructured} into a list of values, as in the call to ©swap©:
     350\begin{lstlisting}
     351[char, char] x = [ '!', '?' ];  // (1)
     352int x = 42;  // (2)
     353
     354forall(otype T) [T, T] swap( T a, T b ) { return [b, a]; }  // (3)
    353355
    354356x = swap( x ); // destructure [char, char] x into two elements of parameter list
    355357// cannot use int x for parameter, not enough arguments to swap
    356 \end{lstlisting}
    357 Tuple destructuring means that the mapping from the position of a subexpression in the argument list to the position of a paramter in the function declaration is not straightforward, as some arguments may be expandable to different numbers of parameters, like ©x© above.
     358
     359void swap( int, char, char ); // (4)
     360
     361swap( x, x ); // resolved as (4) on (2) and (1)
     362// (3) on (2) and (2) is close, but the polymorphic binding makes it not minimal-cost
     363\end{lstlisting}
     364Tuple destructuring means that the mapping from the position of a subexpression in the argument list to the position of a paramter in the function declaration is not straightforward, as some arguments may be expandable to different numbers of parameters, like ©x© above.
     365In the second example, the second ©x© argument can be resolved starting at the second or third parameter of ©swap©, depending which interpretation of ©x© was chosen for the first argument.
    358366
    359367\subsection{Reference Types}
    360368I have been designing \emph{reference types} for \CFA, in collaboration with the rest of the \CFA research team.
    361369Given some type ©T©, a ©T&© (``reference to ©T©'') is essentially an automatically dereferenced pointer; with these semantics most of the C standard's discussions of lvalues can be expressed in terms of references instead, with the benefit of being able to express the difference between the reference and non-reference version of a type in user code.
    362 References preserve C's existing qualifier-dropping lvalue-to-rvalue conversion (\eg a ©const volatile int&© can be implicitly converted to a bare ©int©); the reference proposal also adds a rvalue-to-lvalue conversion to \CFA, implemented by storing the value in a new compiler-generated temporary and passing a reference to the temporary.
    363 These two conversions can chain, producing a qualifier-dropping conversion for references, for instance converting a reference to a ©const int© into a reference to a non-©const int© by copying the originally refered to value into a fresh temporary and taking a reference to this temporary, as below:
     370References preserve C's existing qualifier-dropping lvalue-to-rvalue conversion (\eg a ©const volatile int&© can be implicitly converted to a bare ©int©).
     371The reference proposal also adds a rvalue-to-lvalue conversion to \CFA, implemented by storing the value in a new compiler-generated temporary and passing a reference to the temporary.
     372These two conversions can chain, producing a qualifier-dropping conversion for references, for instance converting a reference to a ©const int© into a reference to a non-©const int© by copying the originally refered to value into a fresh temporary and taking a reference to this temporary, as in:
    364373\begin{lstlisting}
    365374const int magic = 42;
     
    369378print_inc( magic ); // legal; implicitly generated code in green below:
    370379
    371 ¢int tmp = magic;¢ // copies to safely strip const-qualifier
     380¢int tmp = magic;¢ // to safely strip const-qualifier
    372381¢print_inc( tmp );¢ // tmp is incremented, magic is unchanged
    373382\end{lstlisting}
    374 These reference conversions may also chain with the other implicit type conversions.
    375 The main implication of this for expression resolution is the multiplication of available implicit conversions, though in a restricted context that may be able to be treated efficiently as a special case.
     383These reference conversions may also chain with the other implicit type-conversions.
     384The main implication of the reference conversions for expression resolution is the multiplication of available implicit conversions, though given the restricted context reference conversions may be able to be treated efficiently as a special case of implicit conversions.
    376385
    377386\subsection{Special Literal Types}
    378387Another proposal currently under consideration for the \CFA type-system is assigning special types to the literal values ©0© and ©1©.
    379 Implicit conversions from these types allow ©0© and ©1© to be considered as values of many different types, depending on context, allowing expression desugarings like ©if ( x ) {}© $\Rightarrow$ ©if ( x != 0 ) {}© to be implemented efficiently and precicely.
     388Implicit conversions from these types allow ©0© and ©1© to be considered as values of many different types, depending on context, allowing expression desugarings like ©if ( x ) {}© $\Rightarrow$ ©if ( x != 0 ) {}© to be implemented efficiently and precisely.
    380389This approach is a generalization of C's existing behaviour of treating ©0© as either an integer zero or a null pointer constant, and treating either of those values as boolean false.
    381390The main implication for expression resolution is that the frequently encountered expressions ©0© and ©1© may have a large number of valid interpretations.
     
    386395int somefn(char) = delete;
    387396\end{lstlisting}
    388 This feature is typically used in \CCeleven to make a type non-copyable by deleting its copy constructor and assignment operator, or forbidding some interpretations of a polymorphic function by specifically deleting the forbidden overloads.
    389 To add a similar feature to \CFA would involve including the deleted function declarations in expression resolution along with the normal declarations, but producing a compiler error if the deleted function was the best resolution.
     397This feature is typically used in \CCeleven to make a type non-copyable by deleting its copy constructor and assignment operator\footnote{In previous versions of \CC a type could be made non-copyable by declaring a private copy constructor and assignment operator, but not defining either. This idiom is well-known, but depends on some rather subtle and \CC-specific rules about private members and implicitly-generated functions; the deleted-function form is both clearer and less verbose.}, or forbidding some interpretations of a polymorphic function by specifically deleting the forbidden overloads\footnote{Specific polymorphic function overloads can also be forbidden in previous \CC versions through use of template metaprogramming techniques, though this advanced usage is beyond the skills of many programmers. A similar effect can be produced on an ad-hoc basis at the appropriate call sites through use of casts to determine the function type. In both cases, the deleted-function form is clearer and more concise.}.
     398To add a similar feature to \CFA involves including the deleted function declarations in expression resolution along with the normal declarations, but producing a compiler error if the deleted function is the best resolution.
    390399How conflicts should be handled between resolution of an expression to both a deleted and a non-deleted function is a small but open research question.
    391400
     
    404413%TODO: look up and lit review
    405414The second area of investigation is minimizing dependencies between argument-parameter matches; the current CFA compiler attempts to match entire argument combinations against functions at once, potentially attempting to match the same argument against the same parameter multiple times.
    406 Whether the feature set of \CFA admits an expression resolution algorithm where arguments can be matched to parameters independently of other arguments in the same function application is an area of open research; polymorphic type paramters produce enough of a cross-argument dependency that the problem is not trivial.
     415Whether the feature set of \CFA admits an expression resolution algorithm where arguments can be matched to parameters independently of other arguments in the same function application is an area of open research; polymorphic type paramters produce enough cross-argument dependencies that the problem is not trivial.
    407416If cross-argument resolution dependencies cannot be completely eliminated, effective caching strategies to reduce duplicated work between equivalent argument-parameter matches in different combinations may mitigate the asymptotic defecits of the whole-combination matching approach.
    408417The final area of investigation is heuristics and algorithmic approaches to reduce the number of argument interpretations considered in the common case; if argument-parameter matches cannot be made independent, even small reductions in $i$ should yield significant reductions in the $i^{p+1}$ resolver runtime factor.
     
    412421
    413422\subsection{Argument-Parameter Matching}
    414 The first axis for consideration is argument-parameter matching direction --- whether the type matching for a candidate function to a set of candidate arguments is directed by the argument types or the parameter types.
     423The first axis for consideration is the argument-parameter matching direction --- whether the type matching for a candidate function to a set of candidate arguments is directed by the argument types or the parameter types.
    415424For programming languages without implicit conversions, argument-parameter matching is essentially the entirety of the expression resolution problem, and is generally referred to as ``overload resolution'' in the literature.
    416 All expression resolution algorithms form a DAG of interpretations, some explicitly, some implicitly; in this DAG, arcs point from function-call interpretations to argument interpretations, as below:
     425All expression-resolution algorithms form a DAG of interpretations, some explicitly, some implicitly; in this DAG, arcs point from function-call interpretations to argument interpretations, as in Figure~\ref{fig:res_dag}:
    417426\begin{figure}[h]
    418427\centering
     
    433442\end{figure}
    434443
    435 Note that some interpretations may be part of more than one super-interpretation, as with $p_i$ in the bottom row, while some valid subexpression interpretations, like $f_d$ in the middle row, are not used in any interpretation of their containing expression.
     444Note that some interpretations may be part of more than one super-interpretation, as with the second $p_i$ in the bottom row, while some valid subexpression interpretations, like $f_d$ in the middle row, are not used in any interpretation of their superexpression.
    436445
    437446\subsubsection{Argument-directed (Bottom-up)}
     
    451460A reasonable hybrid approach might take a top-down approach when the expression to be matched has a fixed type, and a bottom-up approach in untyped contexts.
    452461This approach may involve switching from one type to another at different levels of the expression tree.
    453 For instance:
     462For instance, in:
    454463\begin{lstlisting}
    455464forall(otype T)
     
    460469int x = f( f( '!' ) );
    461470\end{lstlisting}
    462 The outer call to ©f© must have a return type that is (implicitly convertable to) ©int©, so a top-down approach is used to select \textit{(1)} as the proper interpretation of ©f©. \textit{(1)}'s parameter ©x©, however, is an unbound type variable, and can thus take a value of any complete type, providing no guidance for the choice of candidate for the inner call to ©f©. The leaf expression ©'!'©, however, determines a zero-cost interpretation of the inner ©f© as \textit{(2)}, providing a minimal-cost expression resolution where ©T© is bound to ©void*©.
    463 
    464 Deciding when to switch between bottom-up and top-down resolution to minimize wasted work in a hybrid algorithm is a necessarily heuristic process, and though finding good heuristics for which subexpressions to swich matching strategies on is an open question, one reasonable approach might be to set a threshold $t$ for the number of candidate functions, and to use top-down resolution for any subexpression with fewer than $t$ candidate functions, to minimize the number of unmatchable argument interpretations computed, but to use bottom-up resolution for any subexpression with at least $t$ candidate functions, to reduce duplication in argument interpretation computation between the different candidate functions.
     471the outer call to ©f© must have a return type that is (implicitly convertable to) ©int©, so a top-down approach is used to select \textit{(1)} as the proper interpretation of ©f©. \textit{(1)}'s parameter ©x©, however, is an unbound type variable, and can thus take a value of any complete type, providing no guidance for the choice of candidate for the inner call to ©f©. The leaf expression ©'!'©, however, determines a zero-cost interpretation of the inner ©f© as \textit{(2)}, providing a minimal-cost expression resolution where ©T© is bound to ©void*©.
     472
     473Deciding when to switch between bottom-up and top-down resolution to minimize wasted work in a hybrid algorithm is a necessarily heuristic process, and finding good heuristics for which subexpressions to swich matching strategies on is an open question.
     474One reasonable approach might be to set a threshold $t$ for the number of candidate functions, and to use top-down resolution for any subexpression with fewer than $t$ candidate functions, to minimize the number of unmatchable argument interpretations computed, but to use bottom-up resolution for any subexpression with at least $t$ candidate functions, to reduce duplication in argument interpretation computation between the different candidate functions.
    465475
    466476Ganzinger and Ripken~\cite{Ganzinger80} propose an approach (later refined by Pennello~\etal~\cite{Pennello80}) that uses a top-down filtering pass followed by a bottom-up filtering pass to reduce the number of candidate interpretations; they prove that for the Ada programming language a small number of such iterations is sufficient to converge to a solution for the expression resolution problem.
    467477Persch~\etal~\cite{PW:overload} developed a similar two-pass approach where the bottom-up pass is followed by the top-down pass.
    468 These algorithms differ from the hybrid approach under investigation in that they take multiple passes over the expression tree to yield a solution, and also in that they apply both filtering heuristics to all expression nodes; \CFA's polymorphic functions and implicit conversions make the approach of filtering out invalid types taken by all of these algorithms infeasible.
     478These algorithms differ from the hybrid approach under investigation in that they take multiple passes over the expression tree to yield a solution, and that they also apply both filtering heuristics to all expression nodes; \CFA's polymorphic functions and implicit conversions make the approach of filtering out invalid types taken by all of these algorithms infeasible.
    469479
    470480\subsubsection{Common Subexpression Caching}
     
    480490\CC~\cite{ANSI98:C++} includes both name overloading and implicit conversions in its expression resolution specification, though unlike \CFA it does complete type-checking on a generated monomorphization of template functions, where \CFA simply checks a list of type constraints.
    481491The upcoming Concepts standard~\cite{C++concepts} defines a system of type constraints similar in principle to \CFA's.
    482 Cormack and Wright~\cite{Cormack90} present an algorithm which integrates overload resolution with a polymorphic type inference approach very similar to \CFA's.
     492Cormack and Wright~\cite{Cormack90} present an algorithm that integrates overload resolution with a polymorphic type inference approach very similar to \CFA's.
    483493However, their algorithm does not account for implicit conversions other than polymorphic type binding and their discussion of their overload resolution algorithm is not sufficiently detailed to classify it with the other argument-parameter matching approaches\footnote{Their overload resolution algorithm is possibly a variant of Ganzinger and Ripken~\cite{Ganzinger80} or Pennello~\etal~\cite{Pennello80}, modified to allow for polymorphic type binding.}.
    484494
     
    486496Bilson does account for implicit conversions in his algorithm, but it is unclear if the approach is optimal.
    487497His algorithm integrates checking for valid implicit conversions into the argument-parameter-matching step, essentially trading more expensive matching for a smaller number of argument interpretations.
    488 This approach may result in the same subexpression being checked for a type match with the same type multiple times, though again memoization may mitigate this cost, and this approach does not generate implicit conversions that are not useful to match the containing function.
    489 Calculating implicit conversions on parameters pairs naturally with a top-down approach to expression resolution, though it can also be used in a bottom-up approach, as Bilson demonstrates.
     498This approach may result in the same subexpression being checked for a type match with the same type multiple times, though again memoization may mitigate this cost; however, this approach does not generate implicit conversions that are not useful to match the containing function.
    490499
    491500\subsubsection{On Arguments}
    492501Another approach is to generate a set of possible implicit conversions for each set of interpretations of a given argument.
    493502This approach has the benefit of detecting ambiguous interpretations of arguments at the level of the argument rather than its containing call, never finds more than one interpretation of the argument with a given type, and re-uses calculation of implicit conversions between function candidates.
    494 On the other hand, this approach may unncessarily generate argument interpretations that never match any parameter, wasting work.
    495 Further, in the presence of tuple types this approach may lead to a combinatorial explosion of argument interpretations considered, unless the tuple can be considered as a sequence of elements rather than a unified whole.
    496 Calculating implicit conversions on arguments is a viable approach for bottom-up expression resolution, though it may be difficult to apply in a top-down approach due to the presence of a target type for the expression interpretation.
     503On the other hand, this approach may unnecessarily generate argument interpretations that never match any parameter, wasting work.
     504Furthermore, in the presence of tuple types, this approach may lead to a combinatorial explosion of argument interpretations considered, unless the tuple can be considered as a sequence of elements rather than a unified whole.
    497505
    498506\subsection{Candidate Set Generation}
    499 All the algorithms discussed to this point generate the complete set of candidate argument interpretations before attempting to match the containing function call expression.
    500 However, given that the top-level expression interpretation that is ultimately chosen is the minimal-cost valid interpretation, any consideration of non-minimal-cost interpretations is in some sense wasted work.
    501 Under the assumption that that programmers generally write function calls with relatively low-cost interpretations, a possible work-saving heuristic is to generate only the lowest-cost argument interpretations first, attempt to find a valid top-level interpretation using them, and only if that fails generate the next higher-cost argument interpretations.
     507All the algorithms discussed to this point generate the complete set of candidate argument interpretations before attempting to match the containing function-call expression.
     508However, given that the top-level expression interpretation that is ultimately chosen is the minimal-cost valid interpretation, any consideration of non-minimal-cost interpretations is wasted work.
     509Under the assumption that programmers generally write function calls with relatively low-cost interpretations, a possible work-saving heuristic is to generate only the lowest-cost argument interpretations first, attempt to find a valid top-level interpretation using them, and only if that fails generate the next higher-cost argument interpretations.
    502510
    503511\subsubsection{Eager}
     
    563571This comparison closes Baker's open research question, as well as potentially improving Bilson's \CFA compiler.
    564572
    565 Rather than testing all of these algorithms in-place in the \CFA compiler, a resolver prototype is being developed which acts on a simplified input language encapsulating the essential details of the \CFA type-system\footnote{Note this simplified input language is not a usable programming language.}.
     573Rather than testing all of these algorithms in-place in the \CFA compiler, a resolver prototype is being developed that acts on a simplified input language encapsulating the essential details of the \CFA type-system\footnote{Note this simplified input language is not a usable programming language.}.
    566574Multiple variants of this resolver prototype will be implemented, each encapsulating a different expression resolution variant, sharing as much code as feasible.
    567575These variants will be instrumented to test runtime performance, and run on a variety of input files; the input files may be generated programmatically or from exisiting code in \CFA or similar languages.
     
    571579As an example, there are currently multiple open proposals for how implicit conversions should interact with polymorphic type binding in \CFA, each with distinct levels of expressive power; if the resolver prototype is modified to support each proposal, the optimal algorithm for each proposal can be compared, providing an empirical demonstration of the trade-off between expressive power and compiler runtime.
    572580
    573 This proposed project should provide valuable data on how to implement a performant compiler for modern programming languages such as \CFA with powerful static type-systems, specifically targeting the feature interaction between name overloading and implicit conversions.
     581This proposed project should provide valuable data on how to implement a performant compiler for programming languages such as \CFA with powerful static type-systems, specifically targeting the feature interaction between name overloading and implicit conversions.
    574582This work is not limited in applicability to \CFA, but may also be useful for supporting efficient compilation of the upcoming Concepts standard~\cite{C++concepts} for \CC template constraints, for instance.
    575583
  • src/Parser/DeclarationNode.cc

    re6955b1 r80722d0  
    300300        newnode->type->array->dimension = size;
    301301        newnode->type->array->isStatic = isStatic;
    302         if ( newnode->type->array->dimension == 0 || dynamic_cast< ConstantExpr * >( newnode->type->array->dimension->build() ) ) {
     302        if ( newnode->type->array->dimension == 0 || newnode->type->array->dimension->isExpressionType<ConstantExpr *>() ) {
    303303                newnode->type->array->isVarLen = false;
    304304        } else {
     
    776776                } // if
    777777        } // if
     778        delete o;
    778779        return o;
    779780}
  • src/Parser/ExpressionNode.cc

    re6955b1 r80722d0  
    5757static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
    5858
    59 Expression *build_constantInteger( std::string & str ) {
     59Expression *build_constantInteger( const std::string & str ) {
    6060        static const BasicType::Kind kind[2][3] = {
    6161                { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
     
    123123} // build_constantInteger
    124124
    125 Expression *build_constantFloat( std::string & str ) {
     125Expression *build_constantFloat( const std::string & str ) {
    126126        static const BasicType::Kind kind[2][3] = {
    127127                { BasicType::Float, BasicType::Double, BasicType::LongDouble },
     
    153153} // build_constantFloat
    154154
    155 Expression *build_constantChar( std::string & str ) {
     155Expression *build_constantChar( const std::string & str ) {
    156156        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
    157157} // build_constantChar
    158158
    159 ConstantExpr *build_constantStr( std::string & str ) {
     159ConstantExpr *build_constantStr( const std::string & str ) {
    160160        // string should probably be a primitive type
    161161        ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
     
    213213}
    214214Expression *build_sizeOftype( DeclarationNode *decl_node ) {
    215         return new SizeofExpr( decl_node->buildType() );
     215        Expression* ret = new SizeofExpr( decl_node->buildType() );
     216        delete decl_node;
     217        return ret;
    216218}
    217219Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
     
    222224}
    223225Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
    224         return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
     226        Expression* ret = new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
     227        delete decl_node;
     228        delete member;
     229        return ret;
    225230}
    226231
  • src/Parser/ParseNode.h

    re6955b1 r80722d0  
    103103//##############################################################################
    104104
    105 class ExpressionNode : public ParseNode {
     105class ExpressionNode final : public ParseNode {
    106106  public:
    107107        ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
     
    114114        ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
    115115
    116         virtual void print( std::ostream &os, int indent = 0 ) const {}
    117         virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
    118 
    119         virtual Expression *build() const { return expr; }
     116        void print( std::ostream &os, int indent = 0 ) const {}
     117        void printOneLine( std::ostream &os, int indent = 0 ) const {}
     118
     119        template<typename T>
     120        bool isExpressionType() const {
     121                return nullptr != dynamic_cast<T>(expr.get());
     122        }
     123
     124        Expression *build() const { return const_cast<ExpressionNode*>(this)->expr.release(); }
    120125  private:
    121126        bool extension = false;
    122         Expression *expr;
     127        std::unique_ptr<Expression> expr;
    123128};
    124129
     
    151156};
    152157
    153 Expression *build_constantInteger( std::string &str );
    154 Expression *build_constantFloat( std::string &str );
    155 Expression *build_constantChar( std::string &str );
    156 ConstantExpr *build_constantStr( std::string &str );
     158Expression *build_constantInteger( const std::string &str );
     159Expression *build_constantFloat( const std::string &str );
     160Expression *build_constantChar( const std::string &str );
     161ConstantExpr *build_constantStr( const std::string &str );
    157162
    158163NameExpr *build_varref( const std::string *name, bool labelp = false );
     
    304309//##############################################################################
    305310
    306 class StatementNode : public ParseNode {
     311class StatementNode final : public ParseNode {
    307312  public:
    308313        StatementNode() { stmt = nullptr; }
     
    311316        virtual ~StatementNode() {}
    312317
    313         virtual StatementNode *clone() const { assert( false ); return nullptr; }
    314         virtual Statement *build() const { return stmt; }
     318        virtual StatementNode *clone() const final { assert( false ); return nullptr; }
     319        Statement *build() const { return const_cast<StatementNode*>(this)->stmt.release(); }
    315320
    316321        virtual StatementNode *add_label( const std::string * name ) {
    317322                stmt->get_labels().emplace_back( *name );
     323                delete name;
    318324                return this;
    319325        }
     
    324330        virtual void printList( std::ostream &os, int indent = 0 ) {}
    325331  private:
    326         Statement *stmt;
     332        std::unique_ptr<Statement> stmt;
    327333}; // StatementNode
    328334
  • src/Parser/StatementNode.cc

    re6955b1 r80722d0  
    4444                        agg = decl;
    4545                } // if
    46                 stmt = new DeclStmt( noLabels, maybeBuild< Declaration >(agg) );
     46                stmt.reset( new DeclStmt( noLabels, maybeBuild< Declaration >(agg) ) );
    4747        } else {
    4848                assert( false );
     
    5656                StatementNode *node = dynamic_cast< StatementNode * >(curr);
    5757                assert( node );
    58                 assert( dynamic_cast< CaseStmt * >(node->stmt) );
     58                assert( dynamic_cast< CaseStmt * >(node->stmt.get()) );
    5959                prev = curr;
    6060        } // for
     
    6464        buildMoveList( stmt, stmts );
    6565        // splice any new Statements to end of current Statements
    66         CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt);
     66        CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt.get());
    6767        caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
    6868        return this;
     
    153153        std::list< Expression * > exps;
    154154        buildMoveList( ctl, exps );
    155         return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr, true );
     155        assertf( exps.size() < 2, "This means we are leaking memory");
     156        return new ReturnStmt( noLabels, !exps.empty() ? exps.back() : nullptr, true );
    156157}
    157158
  • src/Parser/parser.cc

    re6955b1 r80722d0  
    1 /* A Bison parser, made by GNU Bison 2.5.  */
     1/* A Bison parser, made by GNU Bison 3.0.2.  */
    22
    33/* Bison implementation for Yacc-like parsers in C
    4    
    5       Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
    6    
     4
     5   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
     6
    77   This program is free software: you can redistribute it and/or modify
    88   it under the terms of the GNU General Public License as published by
    99   the Free Software Foundation, either version 3 of the License, or
    1010   (at your option) any later version.
    11    
     11
    1212   This program is distributed in the hope that it will be useful,
    1313   but WITHOUT ANY WARRANTY; without even the implied warranty of
    1414   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1515   GNU General Public License for more details.
    16    
     16
    1717   You should have received a copy of the GNU General Public License
    1818   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     
    2727   Bison output files to be licensed under the GNU General Public
    2828   License without this special exception.
    29    
     29
    3030   This special exception was added by the Free Software Foundation in
    3131   version 2.2 of Bison.  */
     
    4545
    4646/* Bison version.  */
    47 #define YYBISON_VERSION "2.5"
     47#define YYBISON_VERSION "3.0.2"
    4848
    4949/* Skeleton name.  */
     
    5959#define YYPULL 1
    6060
    61 /* Using locations.  */
    62 #define YYLSP_NEEDED 0
    6361
    6462
    6563
    6664/* Copy the first part of user declarations.  */
    67 
    68 /* Line 268 of yacc.c  */
    69 #line 42 "parser.yy"
     65#line 42 "parser.yy" /* yacc.c:339  */
    7066
    7167#define YYDEBUG_LEXER_TEXT (yylval)                                             // lexer loads this up each time
     
    9490} // appendStr
    9591
    96 
    97 /* Line 268 of yacc.c  */
    98 #line 99 "Parser/parser.cc"
    99 
    100 /* Enabling traces.  */
    101 #ifndef YYDEBUG
    102 # define YYDEBUG 1
    103 #endif
     92#line 93 "Parser/parser.cc" /* yacc.c:339  */
     93
     94# ifndef YY_NULLPTR
     95#  if defined __cplusplus && 201103L <= __cplusplus
     96#   define YY_NULLPTR nullptr
     97#  else
     98#   define YY_NULLPTR 0
     99#  endif
     100# endif
    104101
    105102/* Enabling verbose error messages.  */
     
    111108#endif
    112109
    113 /* Enabling the token table.  */
    114 #ifndef YYTOKEN_TABLE
    115 # define YYTOKEN_TABLE 0
     110/* In a future release of Bison, this section will be replaced
     111   by #include "y.tab.h".  */
     112#ifndef YY_YY_Y_TAB_H_INCLUDED
     113# define YY_YY_Y_TAB_H_INCLUDED
     114/* Debug traces.  */
     115#ifndef YYDEBUG
     116# define YYDEBUG 1
    116117#endif
    117 
    118 
    119 /* Tokens.  */
     118#if YYDEBUG
     119extern int yydebug;
     120#endif
     121
     122/* Token type.  */
    120123#ifndef YYTOKENTYPE
    121124# define YYTOKENTYPE
    122    /* Put the tokens into the symbol table, so that GDB and other debuggers
    123       know about them.  */
    124    enum yytokentype {
    125      TYPEDEF = 258,
    126      AUTO = 259,
    127      EXTERN = 260,
    128      REGISTER = 261,
    129      STATIC = 262,
    130      INLINE = 263,
    131      FORTRAN = 264,
    132      CONST = 265,
    133      VOLATILE = 266,
    134      RESTRICT = 267,
    135      FORALL = 268,
    136      LVALUE = 269,
    137      VOID = 270,
    138      CHAR = 271,
    139      SHORT = 272,
    140      INT = 273,
    141      LONG = 274,
    142      FLOAT = 275,
    143      DOUBLE = 276,
    144      SIGNED = 277,
    145      UNSIGNED = 278,
    146      VALIST = 279,
    147      BOOL = 280,
    148      COMPLEX = 281,
    149      IMAGINARY = 282,
    150      TYPEOF = 283,
    151      LABEL = 284,
    152      ENUM = 285,
    153      STRUCT = 286,
    154      UNION = 287,
    155      OTYPE = 288,
    156      FTYPE = 289,
    157      DTYPE = 290,
    158      TRAIT = 291,
    159      SIZEOF = 292,
    160      OFFSETOF = 293,
    161      ATTRIBUTE = 294,
    162      EXTENSION = 295,
    163      IF = 296,
    164      ELSE = 297,
    165      SWITCH = 298,
    166      CASE = 299,
    167      DEFAULT = 300,
    168      DO = 301,
    169      WHILE = 302,
    170      FOR = 303,
    171      BREAK = 304,
    172      CONTINUE = 305,
    173      GOTO = 306,
    174      RETURN = 307,
    175      CHOOSE = 308,
    176      DISABLE = 309,
    177      ENABLE = 310,
    178      FALLTHRU = 311,
    179      TRY = 312,
    180      CATCH = 313,
    181      CATCHRESUME = 314,
    182      FINALLY = 315,
    183      THROW = 316,
    184      THROWRESUME = 317,
    185      AT = 318,
    186      ASM = 319,
    187      ALIGNAS = 320,
    188      ALIGNOF = 321,
    189      ATOMIC = 322,
    190      GENERIC = 323,
    191      NORETURN = 324,
    192      STATICASSERT = 325,
    193      THREADLOCAL = 326,
    194      IDENTIFIER = 327,
    195      QUOTED_IDENTIFIER = 328,
    196      TYPEDEFname = 329,
    197      TYPEGENname = 330,
    198      ATTR_IDENTIFIER = 331,
    199      ATTR_TYPEDEFname = 332,
    200      ATTR_TYPEGENname = 333,
    201      INTEGERconstant = 334,
    202      FLOATINGconstant = 335,
    203      CHARACTERconstant = 336,
    204      STRINGliteral = 337,
    205      ZERO = 338,
    206      ONE = 339,
    207      ARROW = 340,
    208      ICR = 341,
    209      DECR = 342,
    210      LS = 343,
    211      RS = 344,
    212      LE = 345,
    213      GE = 346,
    214      EQ = 347,
    215      NE = 348,
    216      ANDAND = 349,
    217      OROR = 350,
    218      ELLIPSIS = 351,
    219      MULTassign = 352,
    220      DIVassign = 353,
    221      MODassign = 354,
    222      PLUSassign = 355,
    223      MINUSassign = 356,
    224      LSassign = 357,
    225      RSassign = 358,
    226      ANDassign = 359,
    227      ERassign = 360,
    228      ORassign = 361,
    229      ATassign = 362,
    230      THEN = 363
    231    };
     125  enum yytokentype
     126  {
     127    TYPEDEF = 258,
     128    AUTO = 259,
     129    EXTERN = 260,
     130    REGISTER = 261,
     131    STATIC = 262,
     132    INLINE = 263,
     133    FORTRAN = 264,
     134    CONST = 265,
     135    VOLATILE = 266,
     136    RESTRICT = 267,
     137    FORALL = 268,
     138    LVALUE = 269,
     139    VOID = 270,
     140    CHAR = 271,
     141    SHORT = 272,
     142    INT = 273,
     143    LONG = 274,
     144    FLOAT = 275,
     145    DOUBLE = 276,
     146    SIGNED = 277,
     147    UNSIGNED = 278,
     148    VALIST = 279,
     149    BOOL = 280,
     150    COMPLEX = 281,
     151    IMAGINARY = 282,
     152    TYPEOF = 283,
     153    LABEL = 284,
     154    ENUM = 285,
     155    STRUCT = 286,
     156    UNION = 287,
     157    OTYPE = 288,
     158    FTYPE = 289,
     159    DTYPE = 290,
     160    TRAIT = 291,
     161    SIZEOF = 292,
     162    OFFSETOF = 293,
     163    ATTRIBUTE = 294,
     164    EXTENSION = 295,
     165    IF = 296,
     166    ELSE = 297,
     167    SWITCH = 298,
     168    CASE = 299,
     169    DEFAULT = 300,
     170    DO = 301,
     171    WHILE = 302,
     172    FOR = 303,
     173    BREAK = 304,
     174    CONTINUE = 305,
     175    GOTO = 306,
     176    RETURN = 307,
     177    CHOOSE = 308,
     178    DISABLE = 309,
     179    ENABLE = 310,
     180    FALLTHRU = 311,
     181    TRY = 312,
     182    CATCH = 313,
     183    CATCHRESUME = 314,
     184    FINALLY = 315,
     185    THROW = 316,
     186    THROWRESUME = 317,
     187    AT = 318,
     188    ASM = 319,
     189    ALIGNAS = 320,
     190    ALIGNOF = 321,
     191    ATOMIC = 322,
     192    GENERIC = 323,
     193    NORETURN = 324,
     194    STATICASSERT = 325,
     195    THREADLOCAL = 326,
     196    IDENTIFIER = 327,
     197    QUOTED_IDENTIFIER = 328,
     198    TYPEDEFname = 329,
     199    TYPEGENname = 330,
     200    ATTR_IDENTIFIER = 331,
     201    ATTR_TYPEDEFname = 332,
     202    ATTR_TYPEGENname = 333,
     203    INTEGERconstant = 334,
     204    FLOATINGconstant = 335,
     205    CHARACTERconstant = 336,
     206    STRINGliteral = 337,
     207    ZERO = 338,
     208    ONE = 339,
     209    ARROW = 340,
     210    ICR = 341,
     211    DECR = 342,
     212    LS = 343,
     213    RS = 344,
     214    LE = 345,
     215    GE = 346,
     216    EQ = 347,
     217    NE = 348,
     218    ANDAND = 349,
     219    OROR = 350,
     220    ELLIPSIS = 351,
     221    MULTassign = 352,
     222    DIVassign = 353,
     223    MODassign = 354,
     224    PLUSassign = 355,
     225    MINUSassign = 356,
     226    LSassign = 357,
     227    RSassign = 358,
     228    ANDassign = 359,
     229    ERassign = 360,
     230    ORassign = 361,
     231    ATassign = 362,
     232    THEN = 363
     233  };
    232234#endif
    233235/* Tokens.  */
     
    339341#define THEN 363
    340342
    341 
    342 
    343 
     343/* Value type.  */
    344344#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    345 typedef union YYSTYPE
     345typedef union YYSTYPE YYSTYPE;
     346union YYSTYPE
    346347{
    347 
    348 /* Line 293 of yacc.c  */
    349 #line 115 "parser.yy"
     348#line 115 "parser.yy" /* yacc.c:355  */
    350349
    351350        Token tok;
     
    363362        bool flag;
    364363
    365 
    366 
    367 /* Line 293 of yacc.c  */
    368 #line 369 "Parser/parser.cc"
    369 } YYSTYPE;
     364#line 365 "Parser/parser.cc" /* yacc.c:355  */
     365};
    370366# define YYSTYPE_IS_TRIVIAL 1
    371 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
    372367# define YYSTYPE_IS_DECLARED 1
    373368#endif
    374369
    375370
     371extern YYSTYPE yylval;
     372
     373int yyparse (void);
     374
     375#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
     376
    376377/* Copy the second part of user declarations.  */
    377378
    378 
    379 /* Line 343 of yacc.c  */
    380 #line 381 "Parser/parser.cc"
     379#line 380 "Parser/parser.cc" /* yacc.c:358  */
    381380
    382381#ifdef short
     
    392391#ifdef YYTYPE_INT8
    393392typedef YYTYPE_INT8 yytype_int8;
    394 #elif (defined __STDC__ || defined __C99__FUNC__ \
    395      || defined __cplusplus || defined _MSC_VER)
     393#else
    396394typedef signed char yytype_int8;
    397 #else
    398 typedef short int yytype_int8;
    399395#endif
    400396
     
    416412# elif defined size_t
    417413#  define YYSIZE_T size_t
    418 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
    419      || defined __cplusplus || defined _MSC_VER)
     414# elif ! defined YYSIZE_T
    420415#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    421416#  define YYSIZE_T size_t
     
    431426#  if ENABLE_NLS
    432427#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
    433 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
     428#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
    434429#  endif
    435430# endif
    436431# ifndef YY_
    437 #  define YY_(msgid) msgid
     432#  define YY_(Msgid) Msgid
    438433# endif
    439434#endif
    440435
     436#ifndef YY_ATTRIBUTE
     437# if (defined __GNUC__                                               \
     438      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
     439     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
     440#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
     441# else
     442#  define YY_ATTRIBUTE(Spec) /* empty */
     443# endif
     444#endif
     445
     446#ifndef YY_ATTRIBUTE_PURE
     447# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
     448#endif
     449
     450#ifndef YY_ATTRIBUTE_UNUSED
     451# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
     452#endif
     453
     454#if !defined _Noreturn \
     455     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
     456# if defined _MSC_VER && 1200 <= _MSC_VER
     457#  define _Noreturn __declspec (noreturn)
     458# else
     459#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
     460# endif
     461#endif
     462
    441463/* Suppress unused-variable warnings by "using" E.  */
    442464#if ! defined lint || defined __GNUC__
    443 # define YYUSE(e) ((void) (e))
     465# define YYUSE(E) ((void) (E))
    444466#else
    445 # define YYUSE(e) /* empty */
     467# define YYUSE(E) /* empty */
    446468#endif
    447469
    448 /* Identity function, used to suppress warnings about constant conditions.  */
    449 #ifndef lint
    450 # define YYID(n) (n)
     470#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
     471/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
     472# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
     473    _Pragma ("GCC diagnostic push") \
     474    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
     475    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
     476# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
     477    _Pragma ("GCC diagnostic pop")
    451478#else
    452 #if (defined __STDC__ || defined __C99__FUNC__ \
    453      || defined __cplusplus || defined _MSC_VER)
    454 static int
    455 YYID (int yyi)
    456 #else
    457 static int
    458 YYID (yyi)
    459     int yyi;
     479# define YY_INITIAL_VALUE(Value) Value
    460480#endif
    461 {
    462   return yyi;
    463 }
     481#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
     482# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
     483# define YY_IGNORE_MAYBE_UNINITIALIZED_END
    464484#endif
     485#ifndef YY_INITIAL_VALUE
     486# define YY_INITIAL_VALUE(Value) /* Nothing. */
     487#endif
     488
    465489
    466490#if ! defined yyoverflow || YYERROR_VERBOSE
     
    481505#   else
    482506#    define YYSTACK_ALLOC alloca
    483 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
    484      || defined __cplusplus || defined _MSC_VER)
     507#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
    485508#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
     509      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
    486510#     ifndef EXIT_SUCCESS
    487511#      define EXIT_SUCCESS 0
     
    493517
    494518# ifdef YYSTACK_ALLOC
    495    /* Pacify GCC's `empty if-body' warning.  */
    496 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
     519   /* Pacify GCC's 'empty if-body' warning.  */
     520#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
    497521#  ifndef YYSTACK_ALLOC_MAXIMUM
    498522    /* The OS might guarantee only one guard page at the bottom of the stack,
     
    510534#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
    511535       && ! ((defined YYMALLOC || defined malloc) \
    512              && (defined YYFREE || defined free)))
     536             && (defined YYFREE || defined free)))
    513537#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    514538#   ifndef EXIT_SUCCESS
     
    518542#  ifndef YYMALLOC
    519543#   define YYMALLOC malloc
    520 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
    521      || defined __cplusplus || defined _MSC_VER)
     544#   if ! defined malloc && ! defined EXIT_SUCCESS
    522545void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    523546#   endif
     
    525548#  ifndef YYFREE
    526549#   define YYFREE free
    527 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
    528      || defined __cplusplus || defined _MSC_VER)
     550#   if ! defined free && ! defined EXIT_SUCCESS
    529551void free (void *); /* INFRINGES ON USER NAME SPACE */
    530552#   endif
     
    536558#if (! defined yyoverflow \
    537559     && (! defined __cplusplus \
    538         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
     560        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
    539561
    540562/* A type that is properly aligned for any stack member.  */
     
    561583   stack.  Advance YYPTR to a properly aligned location for the next
    562584   stack.  */
    563 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
    564     do                                                                  \
    565       {                                                                 \
    566         YYSIZE_T yynewbytes;                                            \
    567         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
    568         Stack = &yyptr->Stack_alloc;                                    \
    569         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
    570         yyptr += yynewbytes / sizeof (*yyptr);                          \
    571       }                                                                 \
    572     while (YYID (0))
     585# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
     586    do                                                                  \
     587      {                                                                 \
     588        YYSIZE_T yynewbytes;                                            \
     589        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
     590        Stack = &yyptr->Stack_alloc;                                    \
     591        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
     592        yyptr += yynewbytes / sizeof (*yyptr);                          \
     593      }                                                                 \
     594    while (0)
    573595
    574596#endif
    575597
    576598#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
    577 /* Copy COUNT objects from FROM to TO.  The source and destination do
     599/* Copy COUNT objects from SRC to DST.  The source and destination do
    578600   not overlap.  */
    579601# ifndef YYCOPY
    580602#  if defined __GNUC__ && 1 < __GNUC__
    581 #   define YYCOPY(To, From, Count) \
    582       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
     603#   define YYCOPY(Dst, Src, Count) \
     604      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
    583605#  else
    584 #   define YYCOPY(To, From, Count)              \
    585       do                                        \
    586         {                                       \
    587           YYSIZE_T yyi;                         \
    588           for (yyi = 0; yyi < (Count); yyi++)   \
    589             (To)[yyi] = (From)[yyi];            \
    590         }                                       \
    591       while (YYID (0))
     606#   define YYCOPY(Dst, Src, Count)              \
     607      do                                        \
     608        {                                       \
     609          YYSIZE_T yyi;                         \
     610          for (yyi = 0; yyi < (Count); yyi++)   \
     611            (Dst)[yyi] = (Src)[yyi];            \
     612        }                                       \
     613      while (0)
    592614#  endif
    593615# endif
     
    605627/* YYNRULES -- Number of rules.  */
    606628#define YYNRULES  749
    607 /* YYNRULES -- Number of states.  */
     629/* YYNSTATES -- Number of states.  */
    608630#define YYNSTATES  1553
    609631
    610 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     632/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
     633   by yylex, with out-of-bounds checking.  */
    611634#define YYUNDEFTOK  2
    612635#define YYMAXUTOK   363
    613636
    614 #define YYTRANSLATE(YYX)                                                \
     637#define YYTRANSLATE(YYX)                                                \
    615638  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
    616639
    617 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
     640/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
     641   as returned by yylex, without out-of-bounds checking.  */
    618642static const yytype_uint8 yytranslate[] =
    619643{
     
    658682
    659683#if YYDEBUG
    660 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    661    YYRHS.  */
    662 static const yytype_uint16 yyprhs[] =
    663 {
    664        0,     0,     3,     4,     5,     7,     9,    11,    13,    15,
    665       17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
    666       38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
    667       87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
    668      120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
    669      159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
    670      200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
    671      226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
    672      260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
    673      294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
    674      329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
    675      355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
    676      380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
    677      414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
    678      449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
    679      479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
    680      533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
    681      559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
    682      591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
    683      641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
    684      687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
    685      753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
    686      817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
    687      851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
    688      874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
    689      909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
    690      948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
    691     1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
    692     1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
    693     1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
    694     1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
    695     1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
    696     1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
    697     1177,  1179,  1182,  1185,  1189,  1193,  1195,  1199,  1201,  1204,
    698     1207,  1210,  1215,  1220,  1225,  1230,  1232,  1235,  1238,  1242,
    699     1244,  1247,  1250,  1252,  1255,  1258,  1262,  1264,  1267,  1270,
    700     1272,  1274,  1279,  1282,  1283,  1290,  1298,  1301,  1304,  1307,
    701     1308,  1311,  1314,  1318,  1321,  1325,  1327,  1330,  1334,  1337,
    702     1340,  1345,  1346,  1348,  1351,  1354,  1356,  1357,  1359,  1362,
    703     1365,  1371,  1374,  1375,  1383,  1386,  1391,  1392,  1395,  1396,
    704     1398,  1400,  1402,  1408,  1414,  1420,  1422,  1428,  1434,  1444,
    705     1446,  1452,  1453,  1455,  1457,  1463,  1465,  1467,  1473,  1479,
    706     1481,  1485,  1489,  1494,  1496,  1498,  1500,  1502,  1505,  1507,
    707     1511,  1515,  1517,  1520,  1522,  1526,  1528,  1530,  1532,  1534,
    708     1536,  1538,  1540,  1542,  1544,  1546,  1548,  1551,  1553,  1555,
    709     1557,  1560,  1561,  1564,  1567,  1569,  1574,  1575,  1577,  1580,
    710     1584,  1589,  1592,  1595,  1597,  1600,  1603,  1609,  1615,  1623,
    711     1630,  1632,  1635,  1638,  1642,  1644,  1647,  1650,  1655,  1658,
    712     1663,  1664,  1669,  1672,  1674,  1676,  1678,  1679,  1682,  1688,
    713     1694,  1708,  1710,  1712,  1716,  1720,  1723,  1727,  1731,  1734,
    714     1739,  1741,  1748,  1758,  1759,  1771,  1773,  1777,  1781,  1785,
    715     1787,  1789,  1795,  1798,  1804,  1805,  1807,  1809,  1813,  1814,
    716     1816,  1818,  1820,  1822,  1823,  1830,  1833,  1835,  1838,  1843,
    717     1846,  1850,  1854,  1858,  1863,  1869,  1875,  1881,  1888,  1890,
    718     1892,  1894,  1898,  1899,  1905,  1906,  1908,  1910,  1913,  1920,
    719     1922,  1926,  1927,  1929,  1934,  1936,  1938,  1940,  1942,  1945,
    720     1947,  1950,  1953,  1955,  1959,  1962,  1966,  1970,  1973,  1978,
    721     1983,  1987,  1996,  2000,  2003,  2005,  2008,  2015,  2024,  2028,
    722     2031,  2035,  2039,  2044,  2049,  2053,  2055,  2057,  2059,  2064,
    723     2071,  2075,  2078,  2082,  2086,  2091,  2096,  2100,  2103,  2105,
    724     2108,  2111,  2113,  2117,  2120,  2124,  2128,  2131,  2136,  2141,
    725     2145,  2152,  2161,  2165,  2168,  2170,  2173,  2176,  2179,  2183,
    726     2187,  2190,  2195,  2200,  2204,  2211,  2220,  2224,  2227,  2229,
    727     2232,  2235,  2237,  2239,  2242,  2246,  2250,  2253,  2258,  2265,
    728     2274,  2276,  2279,  2282,  2284,  2287,  2290,  2294,  2298,  2300,
    729     2305,  2310,  2314,  2320,  2329,  2333,  2336,  2340,  2342,  2348,
    730     2354,  2361,  2368,  2370,  2373,  2376,  2378,  2381,  2384,  2388,
    731     2392,  2394,  2399,  2404,  2408,  2414,  2423,  2427,  2429,  2432,
    732     2434,  2437,  2444,  2450,  2457,  2465,  2473,  2475,  2478,  2481,
    733     2483,  2486,  2489,  2493,  2497,  2499,  2504,  2509,  2513,  2522,
    734     2526,  2528,  2530,  2533,  2535,  2537,  2540,  2544,  2547,  2551,
    735     2554,  2558,  2562,  2565,  2570,  2574,  2577,  2581,  2584,  2589,
    736     2593,  2596,  2603,  2610,  2617,  2625,  2627,  2630,  2632,  2634,
    737     2636,  2639,  2643,  2646,  2650,  2653,  2657,  2661,  2666,  2669,
    738     2673,  2678,  2681,  2687,  2693,  2700,  2707,  2708,  2710,  2711
    739 };
    740 
    741 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
    742 static const yytype_int16 yyrhs[] =
    743 {
    744      301,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
    745       -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
    746       -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
    747       -1,   141,    82,    -1,    72,    -1,   140,    -1,   109,   169,
    748      110,    -1,   109,   173,   110,    -1,   142,    -1,   143,   111,
    749      134,   164,   135,   112,    -1,   143,   109,   144,   110,    -1,
    750      143,   113,   139,    -1,   143,   113,   111,   134,   146,   135,
    751      112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
    752      146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
    753      109,   274,   110,   114,   278,   371,   115,    -1,   143,   114,
    754      144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    755      164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
    756      139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
    757      112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
    758      146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
    759       40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
    760      148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
    761      274,   110,    -1,    66,   148,    -1,    66,   109,   274,   110,
    762       -1,    38,   109,   274,   116,   139,   110,    -1,    76,    -1,
    763       76,   109,   145,   110,    -1,    76,   109,   275,   110,    -1,
    764      117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
    765      122,    -1,   148,    -1,   109,   274,   110,   151,    -1,   109,
    766      274,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
    767      152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
    768      153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
    769      154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
    770      155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
    771      154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
    772      155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
    773      156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
    774      159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
    775      160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
    776      169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
    777      129,   169,   130,   167,    -1,   162,    -1,   162,    -1,   148,
    778      166,   164,    -1,   167,   372,    -1,    -1,   164,    -1,   131,
    779       -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
    780       -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
    781       -1,   111,   112,    -1,   111,   134,   164,   135,   112,    -1,
    782      111,   134,   116,   168,   135,   112,    -1,   111,   134,   164,
    783      116,   168,   135,   112,    -1,   165,    -1,   168,   116,   165,
    784       -1,   164,    -1,   169,   116,   164,    -1,    -1,   169,    -1,
    785      172,    -1,   173,    -1,   177,    -1,   178,    -1,   190,    -1,
    786      192,    -1,   193,    -1,   198,    -1,   127,   143,   114,   144,
    787      115,   132,    -1,    72,   130,   311,   171,    -1,   114,   115,
    788       -1,   114,   134,   134,   209,   174,   135,   115,    -1,   175,
    789       -1,   174,   134,   175,    -1,   212,    -1,    40,   212,    -1,
    790      307,    -1,   171,   135,    -1,   171,    -1,   176,   171,    -1,
    791      170,   132,    -1,    41,   109,   169,   110,   171,    -1,    41,
    792      109,   169,   110,   171,    42,   171,    -1,    43,   109,   169,
    793      110,   183,    -1,    43,   109,   169,   110,   114,   134,   205,
    794      184,   115,    -1,    53,   109,   169,   110,   183,    -1,    53,
    795      109,   169,   110,   114,   134,   205,   186,   115,    -1,   163,
    796       -1,   163,    96,   163,    -1,   309,    -1,   179,    -1,   180,
    797      116,   179,    -1,    44,   180,   130,    -1,    45,   130,    -1,
    798      181,    -1,   182,   181,    -1,   182,   171,    -1,    -1,   185,
    799       -1,   182,   176,    -1,   185,   182,   176,    -1,    -1,   187,
    800       -1,   182,   189,    -1,   182,   176,   188,    -1,   187,   182,
    801      189,    -1,   187,   182,   176,   188,    -1,    -1,   189,    -1,
    802       56,    -1,    56,   132,    -1,    47,   109,   169,   110,   171,
    803       -1,    46,   171,    47,   109,   169,   110,   132,    -1,    48,
    804      109,   134,   191,   110,   171,    -1,   170,   135,   132,   170,
    805      132,   170,    -1,   212,   170,   132,   170,    -1,    51,    72,
    806      132,    -1,    51,   117,   169,   132,    -1,    50,   132,    -1,
    807       50,    72,   132,    -1,    49,   132,    -1,    49,    72,   132,
    808       -1,    52,   170,   132,    -1,    61,   165,   132,    -1,    62,
    809      165,   132,    -1,    62,   165,    63,   164,   132,    -1,    57,
    810      173,   194,    -1,    57,   173,   196,    -1,    57,   173,   194,
    811      196,    -1,   195,    -1,    58,   109,    96,   110,   173,    -1,
    812      195,    58,   109,    96,   110,   173,    -1,    59,   109,    96,
    813      110,   173,    -1,   195,    59,   109,    96,   110,   173,    -1,
    814       58,   109,   134,   134,   197,   135,   110,   173,   135,    -1,
    815      195,    58,   109,   134,   134,   197,   135,   110,   173,   135,
    816       -1,    59,   109,   134,   134,   197,   135,   110,   173,   135,
    817       -1,   195,    59,   109,   134,   134,   197,   135,   110,   173,
    818      135,    -1,    60,   173,    -1,   225,    -1,   225,   308,    -1,
    819      225,   356,    -1,   365,   139,    -1,   365,    -1,    64,   199,
    820      109,   141,   110,   132,    -1,    64,   199,   109,   141,   130,
    821      200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
    822      130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
    823      200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
    824       51,   109,   141,   130,   130,   200,   130,   203,   130,   204,
    825      110,   132,    -1,    -1,    11,    -1,    -1,   201,    -1,   202,
    826       -1,   201,   116,   202,    -1,   141,   109,   163,   110,    -1,
    827      111,   163,   112,   141,   109,   163,   110,    -1,    -1,   141,
    828       -1,   203,   116,   141,    -1,   139,    -1,   204,   116,   139,
    829       -1,   135,    -1,   206,    -1,   212,    -1,   206,   134,   212,
    830       -1,   135,    -1,   208,    -1,   222,    -1,   208,   134,   222,
    831       -1,    -1,   210,    -1,    29,   211,   132,    -1,   210,    29,
    832      211,   132,    -1,   273,    -1,   211,   116,   273,    -1,   213,
    833       -1,   222,    -1,   214,   135,   132,    -1,   219,   135,   132,
    834       -1,   216,   135,   132,    -1,   292,   135,   132,    -1,   295,
    835      135,   132,    -1,   215,   276,    -1,   231,   215,   276,    -1,
    836      214,   135,   116,   134,   271,   276,    -1,   366,   271,   310,
    837       -1,   369,   271,   310,    -1,   227,   369,   271,   310,    -1,
    838      217,    -1,   227,   217,    -1,   231,   217,    -1,   231,   227,
    839      217,    -1,   216,   135,   116,   134,   271,    -1,   111,   112,
    840      271,   109,   134,   259,   135,   110,    -1,   369,   271,   109,
    841      134,   259,   135,   110,    -1,   218,   271,   109,   134,   259,
    842      135,   110,    -1,   111,   134,   261,   135,   112,    -1,   111,
    843      134,   261,   135,   116,   134,   262,   135,   112,    -1,     3,
    844      215,    -1,     3,   217,    -1,   219,   135,   116,   134,   139,
    845       -1,     3,   225,   308,    -1,   220,   135,   116,   134,   308,
    846       -1,   227,     3,   225,   308,    -1,   225,     3,   308,    -1,
    847      225,     3,   227,   308,    -1,     3,   139,   131,   164,    -1,
    848      221,   135,   116,   134,   139,   131,   164,    -1,   223,   135,
    849      132,    -1,   220,   135,   132,    -1,   221,   135,   132,    -1,
    850      239,   135,   132,    -1,   224,   308,   310,   276,    -1,   223,
    851      116,   311,   308,   310,   276,    -1,   235,    -1,   239,    -1,
    852      241,    -1,   282,    -1,   236,    -1,   240,    -1,   242,    -1,
    853      283,    -1,    -1,   227,    -1,   228,    -1,   227,   228,    -1,
    854      229,    -1,   313,    -1,    10,    -1,    12,    -1,    11,    -1,
    855       14,    -1,    67,    -1,    -1,    13,   109,   230,   285,   110,
    856       -1,   232,    -1,   227,   232,    -1,   231,   227,   232,    -1,
    857      233,    -1,   232,   233,    -1,     5,    -1,     7,    -1,     4,
    858       -1,     6,    -1,     8,    -1,     9,    -1,    69,    -1,    71,
    859       -1,    16,    -1,    21,    -1,    20,    -1,    18,    -1,    19,
    860       -1,    17,    -1,    22,    -1,    23,    -1,    15,    -1,    25,
    861       -1,    26,    -1,    27,    -1,    24,    -1,   236,    -1,   231,
    862      236,    -1,   235,   233,    -1,   235,   233,   227,    -1,   235,
    863      233,   236,    -1,   237,    -1,   226,   238,   226,    -1,   234,
    864       -1,   227,   234,    -1,   237,   228,    -1,   237,   234,    -1,
    865       28,   109,   275,   110,    -1,    28,   109,   169,   110,    -1,
    866       78,   109,   275,   110,    -1,    78,   109,   169,   110,    -1,
    867      240,    -1,   231,   240,    -1,   239,   233,    -1,   239,   233,
    868      227,    -1,   243,    -1,   227,   243,    -1,   240,   228,    -1,
    869      242,    -1,   231,   242,    -1,   241,   233,    -1,   241,   233,
    870      227,    -1,    74,    -1,   227,    74,    -1,   242,   228,    -1,
    871      244,    -1,   255,    -1,   246,   114,   247,   115,    -1,   246,
    872      273,    -1,    -1,   246,   273,   245,   114,   247,   115,    -1,
    873      246,   109,   291,   110,   114,   247,   115,    -1,   246,   284,
    874       -1,    31,   311,    -1,    32,   311,    -1,    -1,   247,   248,
    875       -1,   249,   132,    -1,    40,   249,   132,    -1,   250,   132,
    876       -1,    40,   250,   132,    -1,   365,    -1,   365,   273,    -1,
    877      249,   116,   273,    -1,   249,   116,    -1,   225,   251,    -1,
    878      250,   116,   311,   251,    -1,    -1,   253,    -1,   317,   252,
    879       -1,   330,   252,    -1,   356,    -1,    -1,   253,    -1,   130,
    880      163,    -1,    30,   311,    -1,   254,   114,   257,   371,   115,
    881       -1,   254,   273,    -1,    -1,   254,   273,   256,   114,   257,
    882      371,   115,    -1,   273,   258,    -1,   257,   116,   273,   258,
    883       -1,    -1,   131,   163,    -1,    -1,   260,    -1,   262,    -1,
    884      261,    -1,   261,   135,   116,   134,   262,    -1,   262,   135,
    885      116,   134,    96,    -1,   261,   135,   116,   134,    96,    -1,
    886      266,    -1,   262,   135,   116,   134,   266,    -1,   261,   135,
    887      116,   134,   266,    -1,   261,   135,   116,   134,   262,   135,
    888      116,   134,   266,    -1,   267,    -1,   262,   135,   116,   134,
    889      267,    -1,    -1,   264,    -1,   265,    -1,   265,   135,   116,
    890      134,    96,    -1,   269,    -1,   268,    -1,   265,   135,   116,
    891      134,   269,    -1,   265,   135,   116,   134,   268,    -1,   268,
    892       -1,   361,   271,   372,    -1,   369,   271,   372,    -1,   227,
    893      369,   271,   372,    -1,   217,    -1,   269,    -1,   361,    -1,
    894      369,    -1,   227,   369,    -1,   370,    -1,   224,   335,   372,
    895       -1,   224,   339,   372,    -1,   224,    -1,   224,   350,    -1,
    896      139,    -1,   270,   116,   139,    -1,   137,    -1,    74,    -1,
    897       75,    -1,   138,    -1,    74,    -1,    75,    -1,   139,    -1,
    898       74,    -1,    75,    -1,   365,    -1,   225,    -1,   225,   356,
    899       -1,   365,    -1,   370,    -1,   225,    -1,   225,   344,    -1,
    900       -1,   131,   277,    -1,   107,   277,    -1,   164,    -1,   114,
    901      278,   371,   115,    -1,    -1,   277,    -1,   279,   277,    -1,
    902      278,   116,   277,    -1,   278,   116,   279,   277,    -1,   280,
    903      130,    -1,   273,   130,    -1,   281,    -1,   280,   281,    -1,
    904      113,   273,    -1,   111,   134,   164,   135,   112,    -1,   111,
    905      134,   309,   135,   112,    -1,   111,   134,   163,    96,   163,
    906      135,   112,    -1,   113,   111,   134,   146,   135,   112,    -1,
    907      283,    -1,   231,   283,    -1,   282,   233,    -1,   282,   233,
    908      227,    -1,   284,    -1,   227,   284,    -1,   283,   228,    -1,
    909       75,   109,   291,   110,    -1,   286,   372,    -1,   285,   116,
    910      286,   372,    -1,    -1,   288,   273,   287,   289,    -1,   225,
    911      335,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,   289,
    912      290,    -1,   128,   273,   109,   291,   110,    -1,   128,   114,
    913      134,   297,   115,    -1,   128,   109,   134,   285,   135,   110,
    914      114,   134,   297,   115,   109,   291,   110,    -1,   275,    -1,
    915      164,    -1,   291,   116,   275,    -1,   291,   116,   164,    -1,
    916       33,   293,    -1,   232,    33,   293,    -1,   292,   116,   293,
    917       -1,   294,   289,    -1,   294,   289,   131,   275,    -1,   273,
    918       -1,   272,   109,   134,   285,   135,   110,    -1,    36,   273,
    919      109,   134,   285,   135,   110,   114,   115,    -1,    -1,    36,
    920      273,   109,   134,   285,   135,   110,   114,   296,   297,   115,
    921       -1,   298,    -1,   297,   134,   298,    -1,   299,   135,   132,
    922       -1,   300,   135,   132,    -1,   215,    -1,   217,    -1,   299,
    923      135,   116,   134,   271,    -1,   225,   308,    -1,   300,   135,
    924      116,   134,   308,    -1,    -1,   302,    -1,   304,    -1,   302,
    925      134,   304,    -1,    -1,   302,    -1,   212,    -1,   306,    -1,
    926      198,    -1,    -1,     5,    82,   305,   114,   303,   115,    -1,
    927       40,   304,    -1,   307,    -1,   322,   173,    -1,   326,   134,
    928      207,   173,    -1,   216,   173,    -1,   224,   322,   173,    -1,
    929      227,   322,   173,    -1,   231,   322,   173,    -1,   231,   227,
    930      322,   173,    -1,   224,   326,   134,   207,   173,    -1,   227,
    931      326,   134,   207,   173,    -1,   231,   326,   134,   207,   173,
    932       -1,   231,   227,   326,   134,   207,   173,    -1,   317,    -1,
    933      330,    -1,   322,    -1,   163,   122,   163,    -1,    -1,    64,
    934      109,   141,   110,   311,    -1,    -1,   312,    -1,   313,    -1,
    935      312,   313,    -1,    39,   109,   109,   314,   110,   110,    -1,
    936      315,    -1,   314,   116,   315,    -1,    -1,   316,    -1,   316,
    937      109,   170,   110,    -1,   271,    -1,   233,    -1,   234,    -1,
    938      228,    -1,   318,   311,    -1,   319,    -1,   320,   311,    -1,
    939      321,   311,    -1,   137,    -1,   109,   318,   110,    -1,   149,
    940      317,    -1,   149,   227,   317,    -1,   109,   319,   110,    -1,
    941      318,   348,    -1,   109,   319,   110,   348,    -1,   109,   320,
    942      110,   349,    -1,   109,   320,   110,    -1,   109,   319,   110,
    943      109,   134,   263,   135,   110,    -1,   109,   321,   110,    -1,
    944      323,   311,    -1,   324,    -1,   325,   311,    -1,   318,   109,
    945      134,   263,   135,   110,    -1,   109,   324,   110,   109,   134,
    946      263,   135,   110,    -1,   109,   323,   110,    -1,   149,   322,
    947       -1,   149,   227,   322,    -1,   109,   324,   110,    -1,   109,
    948      324,   110,   348,    -1,   109,   325,   110,   349,    -1,   109,
    949      325,   110,    -1,   327,    -1,   328,    -1,   329,    -1,   318,
    950      109,   270,   110,    -1,   109,   328,   110,   109,   270,   110,
    951       -1,   109,   327,   110,    -1,   149,   326,    -1,   149,   227,
    952      326,    -1,   109,   328,   110,    -1,   109,   328,   110,   348,
    953       -1,   109,   329,   110,   349,    -1,   109,   329,   110,    -1,
    954      331,   311,    -1,   332,    -1,   333,   311,    -1,   334,   311,
    955       -1,   340,    -1,   109,   331,   110,    -1,   149,   330,    -1,
    956      149,   227,   330,    -1,   109,   332,   110,    -1,   331,   348,
    957       -1,   109,   332,   110,   348,    -1,   109,   333,   110,   349,
    958       -1,   109,   333,   110,    -1,   331,   109,   134,   263,   135,
    959      110,    -1,   109,   332,   110,   109,   134,   263,   135,   110,
    960       -1,   109,   334,   110,    -1,   318,   311,    -1,   336,    -1,
    961      337,   311,    -1,   338,   311,    -1,   149,   335,    -1,   149,
    962      227,   335,    -1,   109,   336,   110,    -1,   318,   354,    -1,
    963      109,   336,   110,   348,    -1,   109,   337,   110,   349,    -1,
    964      109,   337,   110,    -1,   318,   109,   134,   263,   135,   110,
    965       -1,   109,   336,   110,   109,   134,   263,   135,   110,    -1,
    966      109,   338,   110,    -1,   340,   311,    -1,   341,    -1,   342,
    967      311,    -1,   343,   311,    -1,    74,    -1,    75,    -1,   149,
    968      339,    -1,   149,   227,   339,    -1,   109,   341,   110,    -1,
    969      340,   354,    -1,   109,   341,   110,   354,    -1,   340,   109,
    970      134,   263,   135,   110,    -1,   109,   341,   110,   109,   134,
    971      263,   135,   110,    -1,   345,    -1,   346,   311,    -1,   347,
    972      311,    -1,   149,    -1,   149,   227,    -1,   149,   344,    -1,
    973      149,   227,   344,    -1,   109,   345,   110,    -1,   348,    -1,
    974      109,   345,   110,   348,    -1,   109,   346,   110,   349,    -1,
    975      109,   346,   110,    -1,   109,   134,   263,   135,   110,    -1,
    976      109,   345,   110,   109,   134,   263,   135,   110,    -1,   109,
    977      347,   110,    -1,   111,   112,    -1,   111,   112,   349,    -1,
    978      349,    -1,   111,   134,   164,   135,   112,    -1,   111,   134,
    979      117,   135,   112,    -1,   349,   111,   134,   164,   135,   112,
    980       -1,   349,   111,   134,   117,   135,   112,    -1,   351,    -1,
    981      352,   311,    -1,   353,   311,    -1,   149,    -1,   149,   227,
    982       -1,   149,   350,    -1,   149,   227,   350,    -1,   109,   351,
    983      110,    -1,   354,    -1,   109,   351,   110,   354,    -1,   109,
    984      352,   110,   349,    -1,   109,   352,   110,    -1,   109,   134,
    985      263,   135,   110,    -1,   109,   351,   110,   109,   134,   263,
    986      135,   110,    -1,   109,   353,   110,    -1,   355,    -1,   355,
    987      349,    -1,   349,    -1,   111,   112,    -1,   111,   134,   227,
    988      117,   135,   112,    -1,   111,   134,   227,   135,   112,    -1,
    989      111,   134,   227,   164,   135,   112,    -1,   111,   134,     7,
    990      226,   164,   135,   112,    -1,   111,   134,   227,     7,   164,
    991      135,   112,    -1,   357,    -1,   358,   311,    -1,   359,   311,
    992       -1,   149,    -1,   149,   227,    -1,   149,   356,    -1,   149,
    993      227,   356,    -1,   109,   357,   110,    -1,   348,    -1,   109,
    994      357,   110,   348,    -1,   109,   358,   110,   349,    -1,   109,
    995      358,   110,    -1,   109,   357,   110,   109,   134,   263,   135,
    996      110,    -1,   109,   359,   110,    -1,   361,    -1,   369,    -1,
    997      227,   369,    -1,   362,    -1,   363,    -1,   149,   225,    -1,
    998      227,   149,   225,    -1,   149,   370,    -1,   227,   149,   370,
    999       -1,   149,   360,    -1,   227,   149,   360,    -1,   111,   112,
    1000      225,    -1,   364,   225,    -1,   111,   112,   349,   225,    -1,
    1001      364,   349,   225,    -1,   349,   225,    -1,   111,   112,   362,
    1002       -1,   364,   362,    -1,   111,   112,   349,   362,    -1,   364,
    1003      349,   362,    -1,   349,   362,    -1,   111,   134,   227,   117,
    1004      135,   112,    -1,   111,   134,   227,   164,   135,   112,    -1,
    1005      111,   134,   231,   164,   135,   112,    -1,   111,   134,   231,
    1006      227,   164,   135,   112,    -1,   369,    -1,   227,   369,    -1,
    1007      366,    -1,   367,    -1,   368,    -1,   149,   225,    -1,   227,
    1008      149,   225,    -1,   149,   370,    -1,   227,   149,   370,    -1,
    1009      149,   365,    -1,   227,   149,   365,    -1,   111,   112,   225,
    1010       -1,   111,   112,   349,   225,    -1,   349,   225,    -1,   111,
    1011      112,   367,    -1,   111,   112,   349,   367,    -1,   349,   367,
    1012       -1,   111,   134,   262,   135,   112,    -1,   111,   112,   109,
    1013      259,   110,    -1,   369,   109,   134,   259,   135,   110,    -1,
    1014      218,   109,   134,   259,   135,   110,    -1,    -1,   116,    -1,
    1015       -1,   131,   164,    -1
    1016 };
    1017 
    1018 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
     684  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
    1019685static const yytype_uint16 yyrline[] =
    1020686{
     
    1097763#endif
    1098764
    1099 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
     765#if YYDEBUG || YYERROR_VERBOSE || 0
    1100766/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    1101767   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
     
    1205871  "new_abstract_declarator_no_tuple", "new_abstract_ptr",
    1206872  "new_abstract_array", "new_abstract_tuple", "new_abstract_function",
    1207   "comma_opt", "assignment_opt", 0
     873  "comma_opt", "assignment_opt", YY_NULLPTR
    1208874};
    1209875#endif
    1210876
    1211877# ifdef YYPRINT
    1212 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
    1213    token YYLEX-NUM.  */
     878/* YYTOKNUM[NUM] -- (External) token number corresponding to the
     879   (internal) symbol number NUM (which must be that of a token).  */
    1214880static const yytype_uint16 yytoknum[] =
    1215881{
     
    1231897# endif
    1232898
    1233 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
    1234 static const yytype_uint16 yyr1[] =
     899#define YYPACT_NINF -1317
     900
     901#define yypact_value_is_default(Yystate) \
     902  (!!((Yystate) == (-1317)))
     903
     904#define YYTABLE_NINF -520
     905
     906#define yytable_value_is_error(Yytable_value) \
     907  0
     908
     909  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     910     STATE-NUM.  */
     911static const yytype_int16 yypact[] =
    1235912{
    1236        0,   133,   134,   135,   136,   136,   136,   137,   137,   137,
    1237      138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
    1238      142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
    1239      143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
    1240      147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
    1241      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
    1242      149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
    1243      152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
    1244      155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
    1245      158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
    1246      162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
    1247      166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
    1248      167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
    1249      171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
    1250      174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
    1251      178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
    1252      181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
    1253      186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
    1254      190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
    1255      192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
    1256      194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
    1257      197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
    1258      200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
    1259      205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
    1260      210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
    1261      213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
    1262      216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
    1263      220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
    1264      222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
    1265      225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
    1266      229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
    1267      233,   233,   233,   233,   233,   233,   233,   234,   234,   234,
    1268      234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
    1269      235,   235,   235,   235,   235,   236,   236,   237,   237,   237,
    1270      237,   238,   238,   238,   238,   239,   239,   239,   239,   240,
    1271      240,   240,   241,   241,   241,   241,   242,   242,   242,   243,
    1272      243,   244,   244,   245,   244,   244,   244,   246,   246,   247,
    1273      247,   248,   248,   248,   248,   249,   249,   249,   249,   250,
    1274      250,   251,   251,   251,   251,   251,   252,   252,   253,   254,
    1275      255,   255,   256,   255,   257,   257,   258,   258,   259,   259,
    1276      260,   260,   260,   260,   260,   261,   261,   261,   261,   262,
    1277      262,   263,   263,   264,   264,   265,   265,   265,   265,   266,
    1278      266,   266,   266,   266,   267,   267,   267,   267,   267,   268,
    1279      268,   269,   269,   270,   270,   271,   271,   271,   272,   272,
    1280      272,   273,   273,   273,   274,   274,   274,   275,   275,   275,
    1281      275,   276,   276,   276,   277,   277,   278,   278,   278,   278,
    1282      278,   279,   279,   280,   280,   281,   281,   281,   281,   281,
    1283      282,   282,   282,   282,   283,   283,   283,   284,   285,   285,
    1284      287,   286,   286,   288,   288,   288,   289,   289,   290,   290,
    1285      290,   291,   291,   291,   291,   292,   292,   292,   293,   293,
    1286      294,   294,   295,   296,   295,   297,   297,   298,   298,   299,
    1287      299,   299,   300,   300,   301,   301,   302,   302,   303,   303,
    1288      304,   304,   304,   305,   304,   304,   306,   306,   306,   307,
    1289      307,   307,   307,   307,   307,   307,   307,   307,   308,   308,
    1290      308,   309,   310,   310,   311,   311,   312,   312,   313,   314,
    1291      314,   315,   315,   315,   316,   316,   316,   316,   317,   317,
    1292      317,   317,   318,   318,   319,   319,   319,   320,   320,   320,
    1293      320,   321,   321,   322,   322,   322,   323,   323,   323,   324,
    1294      324,   324,   325,   325,   325,   326,   326,   326,   327,   327,
    1295      327,   328,   328,   328,   329,   329,   329,   330,   330,   330,
    1296      330,   331,   331,   332,   332,   332,   333,   333,   333,   333,
    1297      334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
    1298      337,   337,   337,   337,   338,   338,   338,   339,   339,   339,
    1299      339,   340,   340,   341,   341,   341,   342,   342,   343,   343,
    1300      344,   344,   344,   345,   345,   345,   345,   345,   346,   346,
    1301      346,   346,   347,   347,   347,   348,   348,   348,   349,   349,
    1302      349,   349,   350,   350,   350,   351,   351,   351,   351,   351,
    1303      352,   352,   352,   352,   353,   353,   353,   354,   354,   354,
    1304      355,   355,   355,   355,   355,   355,   356,   356,   356,   357,
    1305      357,   357,   357,   357,   358,   358,   358,   358,   359,   359,
    1306      360,   360,   360,   361,   361,   362,   362,   362,   362,   362,
    1307      362,   363,   363,   363,   363,   363,   363,   363,   363,   363,
    1308      363,   364,   364,   364,   364,   365,   365,   365,   366,   366,
    1309      367,   367,   367,   367,   367,   367,   368,   368,   368,   368,
    1310      368,   368,   369,   370,   370,   370,   371,   371,   372,   372
     913    7252,  8635, -1317,    -3, -1317, -1317, -1317, -1317, -1317, -1317,
     914   -1317,    23, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
     915   -1317, -1317, -1317, -1317, -1317, -1317,    81,    81,    81,  1277,
     916     970,   104,  7368,   277, -1317, -1317, -1317, -1317, -1317,   201,
     917   -1317, -1317, -1317,  1047,   187, -1317, -1317, -1317, -1317,  5370,
     918   -1317, -1317, -1317, -1317,    35,    48, -1317,  1328, -1317, -1317,
     919   -1317, -1317,   235,  1663,   343,    98,  7484, -1317, -1317,  6174,
     920    1066, -1317, -1317,   536,   376,  5540,   978,  1631,   536,  1775,
     921   -1317, -1317,   477,   683, -1317,   536,  1892, -1317,   295, -1317,
     922     422,   489, -1317, -1317, -1317, -1317,   346,    48,    81, -1317,
     923      81, -1317, -1317, -1317, -1317,  9392,  1328, -1317, -1317,  1328,
     924   -1317,   321, -1317,  9431, -1317, -1317,  2250,  9501, -1317,   668,
     925     668,   668, -1317, -1317, -1317,    81, -1317, -1317, -1317,   373,
     926     399,   410, -1317, -1317, -1317,   420, -1317, -1317, -1317, -1317,
     927   -1317,   428,   450, -1317, -1317,    59,  8604,  2904,   144,   440,
     928     493,   498,   531,   544,   560,  8522,  6772,   510,   580, -1317,
     929    9114, -1317, -1317, -1317, -1317,   584, -1317,   153,  4280,  4280,
     930   -1317,   570,   283, -1317, -1317, -1317, -1317,   596,   288,   303,
     931     332,    81,   583, -1317, -1317,  1663,  2232,   648, -1317,    73,
     932   -1317,    81,    81,    48, -1317, -1317,    80, -1317,    81,    81,
     933   -1317,  3694,   599,   613,   668,  6565, -1317, -1317,   661,  5370,
     934   -1317, -1317,   536, -1317, -1317, -1317,    48, -1317,  1328,    35,
     935   -1317,  7675, -1317,   668,   668,   668,    48, -1317,  1277, -1317,
     936    5446, -1317, -1317,   620,   668, -1317,   668, -1317,   201,  8604,
     937   -1317,   673, -1317,   970,   692,   668, -1317,  1277,   697,   707,
     938   -1317,  7368,   576, -1317, -1317, -1317,  4822, -1317, -1317,  9720,
     939   -1317,   648,   165, 10347,  9501,  2250,  3694, -1317,   109, -1317,
     940   -1317,  9431,  1328,   743,  7515, -1317, -1317,   306, -1317, 10675,
     941     770,   800,  2676,   801, 10480, 10499, -1317,   813, -1317, -1317,
     942   -1317, -1317, 10556, 10556,  8378,   795, -1317, -1317, -1317, -1317,
     943   -1317, -1317,   842, -1317,   685,  1919,  8717, 10480, -1317,   652,
     944     325,   507,   317,   581,   826,   820,   823,   861,   111, -1317,
     945   -1317,   827,   703, -1317,   452, -1317, -1317,  2904, -1317, -1317,
     946     278,   856, -1317,   636,   856,   866,   201, -1317, -1317,   872,
     947    9392, -1317,   876,   887,  8830, -1317, -1317,  1020,  2049,  8093,
     948    6565,   536, -1317,   536,   668,   668, -1317, -1317, -1317, -1317,
     949   -1317, -1317,   668,  9392,  1328, -1317, -1317,  9540,  1233, -1317,
     950    7824, -1317, -1317, -1317, -1317, -1317, -1317, -1317,   891,  4627,
     951   10480, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
     952   -1317, -1317, -1317, -1317, -1317,  2250, -1317,   552,   901,   904,
     953     912,   862,   920,   922,   924,  2232, -1317, -1317,   932,    35,
     954     936, -1317, -1317,   939, -1317, -1317, -1317,  4822, -1317, -1317,
     955   -1317, -1317, -1317,  3694, -1317,  8604,  8604, -1317,   668,  2250,
     956    6684,  1328,  8166, -1317, -1317, -1317, -1317,  4822,   165, -1317,
     957   -1317,   536,    48, -1317, -1317,  4822, -1317,  6449, -1317, -1317,
     958     668,   668,   484,  8011,   938,   941,   931,   952,   668, -1317,
     959   -1317, -1317, -1317,  9797, -1317,   578,  6327, -1317,    48,   955,
     960   -1317,  2250, 10757, 10404, -1317, -1317, -1317, -1317,   881,  3694,
     961   -1317,  8239,   648,  3545, -1317, -1317, -1317,  1641,   586,   827,
     962     970,  7515,   592,  9431, -1317,  7515, -1317, -1317, -1317, -1317,
     963     603, -1317,   967,   800,   215,  8378, -1317,  9570, -1317, -1317,
     964    8378, -1317,  8491,  8378, -1317, -1317,   966, -1317,   617,   973,
     965     839,   983, -1317, -1317,  9253,  6415, -1317,   247, -1317, -1317,
     966   10347, -1317,   330, 10347, -1317, -1317, -1317, -1317, -1317, -1317,
     967   -1317, -1317, -1317, -1317, -1317, 10347, -1317, -1317, 10480, 10480,
     968   10480, 10480, 10480, 10480, 10480, 10480, 10480, 10480, 10480, 10480,
     969   10480, 10480, 10480, 10480, 10480, 10480,  4526, 10347, -1317,   703,
     970     751, -1317, -1317,    81,    81, -1317, -1317,  8604, -1317, -1317,
     971     939,   576, -1317,   939, 10423, -1317, -1317, -1317,  8975,  6415,
     972     968,   976, -1317,  9501, -1317, -1317,   584, -1317,   990,   769,
     973     999,  3014,   124,   827, -1317,    81,    81,   827,   125, -1317,
     974      81,    81,   939, -1317, -1317,    81,    81, -1317,   856,  9652,
     975    1328, 10902,   151,   358,  9652, -1317,  9720, -1317,   827, -1317,
     976    9392, -1317,   147,  7790,  7790,  7790,  1328, -1317,  5708,   982,
     977     891,  1167,   995,   996, -1317,  1011,  4280,   230, -1317,  1103,
     978    1328,  7790,   576,  2250,   576,   648,   671,   856, -1317, -1317,
     979     694,   856, -1317, -1317, -1317,   800, -1317,   856,    48,  9797,
     980   -1317,   621,  1024,   640,  1026, -1317,  1030,    48, -1317, -1317,
     981    4822,    48,  1032,  9570,  1037, -1317,  1585, -1317,   335,   390,
     982     970, -1317,   970,  1023, 10480, -1317,   970, 10902, -1317, -1317,
     983    1034, -1317, -1317, -1317,   576, -1317, 10830,   887, -1317,  7790,
     984     859,  8093, -1317, -1317,   584,  1025,  1036,  1641,  3247, -1317,
     985   -1317,  7515, -1317, -1317,  1039, -1317, -1317,  1043, -1317,  1039,
     986    1048, 10675, 10347,    67,  1027,   133,  1053,  1061,  1068,  1069,
     987   -1317,  1072,  1074,  9362,  6534, -1317, 10347, -1317,   839,  2140,
     988   -1317, -1317, -1317,    81,    81, 10290, 10347,  1070, -1317, -1317,
     989     675, -1317, 10347, -1317, -1317,   644, -1317, -1317, -1317, -1317,
     990     652,   652,   325,   325,   507,   507,   507,   507,   317,   317,
     991     581,   826,   820,   823,   861, 10480,   333, -1317,  9797,  1079,
     992    1080,  1081,   751, -1317, -1317, -1317, -1317, -1317,  9797,   700,
     993    7790, -1317,  9392, -1317,  6891,  8943, -1317,  7824,  6772, -1317,
     994   -1317,   769,  9797,   917,  1082,  1083,  1084,  1087,  1088,  1089,
     995    1091, -1317,  4955,  3014, -1317, -1317, -1317, -1317, -1317, -1317,
     996   -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
     997   -1317,   939, -1317, -1317, -1317,   827, -1317, -1317, -1317, -1317,
     998   -1317, -1317, -1317, -1317,  1098, -1317,  1099,  1101, -1317, -1317,
     999      35,  1070,  5708, -1317, -1317, -1317,  4627,  1102, -1317, -1317,
     1000   -1317, -1317,   970,  5944,  1191, -1317, -1317, -1317, -1317,  1094,
     1001      35, -1317, -1317,   939, -1317, -1317,   939,    24,   939, -1317,
     1002   -1317, -1317, -1317, -1317, -1317,  9223, -1317,    48, -1317, -1317,
     1003     432,   441,  9540,  7010,  2348, 10480,  3377, -1317, -1317,  1092,
     1004      94,  1092, -1317,   970, -1317,    81, -1317, -1317,  8748,   931,
     1005   -1317, -1317, -1317,   941,  1116,  1111, -1317, -1317,  1118,  1119,
     1006   -1317,   859,  2430, -1317,   455, -1317,  3247,   827, -1317,  1122,
     1007    7515,  9682,  8604,  1125, -1317, -1317,  1130,  1135,  1124, -1317,
     1008   10480,   166,   222,  1132, -1317,  1138,   576,  1138, -1317, -1317,
     1009    1138,  1137, -1317,  1145,  1147,  1148,  2140, -1317, -1317, -1317,
     1010    4627, -1317, -1317, -1317, -1317,  1143, 10347,  1149,   576, -1317,
     1011   10347, -1317,   576, -1317, -1317, 10347, -1317,   721,   856, -1317,
     1012   -1317, -1317, -1317, -1317, -1317, -1317,   891,   887,  8830, -1317,
     1013   -1317,  7129,  1152, -1317,   731,   856, -1317,   745,   763,   856,
     1014   -1317,   668,  5561, -1317, -1317, -1317,  9797,  9797, -1317,  8166,
     1015    8166, -1317,  1154,  1156,  1153,  1155, -1317,  1168,   460,   196,
     1016    1070, -1317,   576, -1317,  4280, -1317, 10347,   474, -1317,  6296,
     1017    1159,  1170, 10233,  1172,  1175,   -14,     3,    11, 10347,  1179,
     1018      48, 10347, 10347,  1160,  1177,   282,  1161, -1317, -1317, -1317,
     1019    1180, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
     1020     970,  1184, 10347, -1317,  9797,  9797,    81,  1188, -1317,  8861,
     1021   -1317, -1317,   809, -1317,  3377, -1317, -1317, -1317, -1317,  1585,
     1022   -1317, -1317,  1185, -1317, -1317, -1317, -1317,  1193,  2430, -1317,
     1023   -1317,  1176, -1317,  1039, -1317, -1317,  2250,  1196, -1317, -1317,
     1024   -1317,   709,  1198, -1317,   133,  1202, 10480,  1186,   133,   133,
     1025    1211,  9253,   789,   856, -1317, -1317,  1011, 10347,  1214,  1143,
     1026     505,   224,  1217, -1317, -1317,  1218,  1217, -1317, -1317,  1226,
     1027   -1317, -1317,   939,  1228,  1230,  6653,  1231,  1232,  1243, -1317,
     1028   -1317,  1246, -1317, -1317,   939, -1317, -1317, -1317, -1317,   939,
     1029   10347, 10347,   887,  1245, -1317, -1317, -1317, -1317, -1317, -1317,
     1030   -1317, -1317, -1317, -1317, -1317, -1317, 10480, 10480,  1247,  1251,
     1031    1217, -1317, -1317,   970, -1317, -1317, -1317,  4468,  9682, 10347,
     1032   10347,  1311, 10347, -1317,  1234, -1317,  1237, -1317,  1239, 10347,
     1033    1241, 10347,  1049,  1244,    26,    81,  9084,   750, -1317, -1317,
     1034    5944,  1267,   481, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
     1035   -1317, -1317, 10053, -1317,  8239,  1274, -1317, -1317,  9682,   482,
     1036     512, -1317,  1272,  1259,   800,  1280, -1317,   245, -1317, -1317,
     1037   -1317, -1317,   939,  1279, -1317, -1317,  1287,   385,   444,   576,
     1038    1293, -1317,  1294, -1317,  9797, -1317, -1317, -1317, -1317, -1317,
     1039    1295, -1317,  9797,  9797,  9797, -1317, -1317,  1297, -1317,  1298,
     1040    1282,  1305,   511,  7863,  7978, -1317, -1317,   348, -1317,  1304,
     1041    1310, -1317,  8312,   712,   734,  1308,   739,  6143, -1317, -1317,
     1042   -1317,   515, -1317,   765,  1318,  1320,    48,  1371,   879, -1317,
     1043   -1317, 10347, -1317, 10233, 10347, -1317, -1317, -1317,  1322,  1329,
     1044   -1317, -1317, -1317,  1324, -1317, -1317, -1317, -1317, -1317, -1317,
     1045    9682,   800,   265, -1317,  1309,   800,  9797, -1317, -1317, -1317,
     1046   -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
     1047   -1317,  1330,  1331, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
     1048    1334, -1317,  1333, -1317, -1317, 10233,   143, 10347, 10233, -1317,
     1049    1338, 10347, -1317,   259,  1354,  1356, -1317, -1317,  1346,  1347,
     1050    1326, -1317,   880, -1317, -1317, -1317,  1328,  2250,  1345,   842,
     1051     364, 10480, -1317,   774, -1317,   576,   576,  1352,  1355,  1357,
     1052    1360, -1317, -1317,  8166,  1358, -1317,  1436, 10480,  1349, -1317,
     1053   -1317, 10145, -1317,   783, -1317,  1350, 10233,  1359, -1317, -1317,
     1054    1378, -1317,  1379, -1317,  1394,  1396, -1317,  1361,  9682, -1317,
     1055   -1317, -1317,   800,   576,  1386,  1367,  1392,  1217,  1217, -1317,
     1056   -1317, -1317, -1317, -1317, 10233,   275, -1317,   384, -1317, -1317,
     1057    7600, -1317, -1317,  1375, 10347, -1317, 10347,  7600,    48,  9570,
     1058      48,  9570,  1393, -1317,  1398, -1317, -1317,  1395,   842, -1317,
     1059     798, -1317, -1317, -1317,  1399,  1401, -1317, 10480, 10480, -1317,
     1060   -1317,   964,   167, -1317, -1317,  1388, -1317,   964, -1317, -1317,
     1061    2461,   576, -1317, -1317,    48,  9570,    48,  9570,  1409,  1390,
     1062     576, -1317, -1317, -1317, -1317, 10145,  1410,   964,  5861, 10347,
     1063   10057,  1412,   964,  1414,  2461,  3613, -1317, -1317, -1317,  1420,
     1064   -1317, -1317, -1317, -1317,  8604, -1317, -1317, -1317,  9924, -1317,
     1065   10145, -1317, -1317,  1402,  9836, -1317, -1317, 10057,    48,  3613,
     1066      48,  1421,  1429,   817, -1317,  9924, -1317, -1317, -1317,  9836,
     1067   -1317, -1317, -1317,    48,    48, -1317, -1317, -1317, -1317, -1317,
     1068   -1317, -1317, -1317
    13111069};
    13121070
    1313 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
    1314 static const yytype_uint8 yyr2[] =
    1315 {
    1316        0,     2,     0,     0,     1,     1,     1,     1,     1,     1,
    1317        1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
    1318        3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
    1319        2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
    1320        3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
    1321        2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
    1322        1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
    1323        3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
    1324        3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
    1325        3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
    1326        5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
    1327        1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
    1328        6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
    1329        1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
    1330        1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
    1331        7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
    1332        3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
    1333        1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
    1334        7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
    1335        3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
    1336        5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
    1337        2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
    1338        1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
    1339        1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
    1340        3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
    1341        3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
    1342        3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
    1343        3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
    1344        3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
    1345        1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
    1346        1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
    1347        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1348        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1349        1,     2,     2,     3,     3,     1,     3,     1,     2,     2,
    1350        2,     4,     4,     4,     4,     1,     2,     2,     3,     1,
    1351        2,     2,     1,     2,     2,     3,     1,     2,     2,     1,
    1352        1,     4,     2,     0,     6,     7,     2,     2,     2,     0,
    1353        2,     2,     3,     2,     3,     1,     2,     3,     2,     2,
    1354        4,     0,     1,     2,     2,     1,     0,     1,     2,     2,
    1355        5,     2,     0,     7,     2,     4,     0,     2,     0,     1,
    1356        1,     1,     5,     5,     5,     1,     5,     5,     9,     1,
    1357        5,     0,     1,     1,     5,     1,     1,     5,     5,     1,
    1358        3,     3,     4,     1,     1,     1,     1,     2,     1,     3,
    1359        3,     1,     2,     1,     3,     1,     1,     1,     1,     1,
    1360        1,     1,     1,     1,     1,     1,     2,     1,     1,     1,
    1361        2,     0,     2,     2,     1,     4,     0,     1,     2,     3,
    1362        4,     2,     2,     1,     2,     2,     5,     5,     7,     6,
    1363        1,     2,     2,     3,     1,     2,     2,     4,     2,     4,
    1364        0,     4,     2,     1,     1,     1,     0,     2,     5,     5,
    1365       13,     1,     1,     3,     3,     2,     3,     3,     2,     4,
    1366        1,     6,     9,     0,    11,     1,     3,     3,     3,     1,
    1367        1,     5,     2,     5,     0,     1,     1,     3,     0,     1,
    1368        1,     1,     1,     0,     6,     2,     1,     2,     4,     2,
    1369        3,     3,     3,     4,     5,     5,     5,     6,     1,     1,
    1370        1,     3,     0,     5,     0,     1,     1,     2,     6,     1,
    1371        3,     0,     1,     4,     1,     1,     1,     1,     2,     1,
    1372        2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
    1373        3,     8,     3,     2,     1,     2,     6,     8,     3,     2,
    1374        3,     3,     4,     4,     3,     1,     1,     1,     4,     6,
    1375        3,     2,     3,     3,     4,     4,     3,     2,     1,     2,
    1376        2,     1,     3,     2,     3,     3,     2,     4,     4,     3,
    1377        6,     8,     3,     2,     1,     2,     2,     2,     3,     3,
    1378        2,     4,     4,     3,     6,     8,     3,     2,     1,     2,
    1379        2,     1,     1,     2,     3,     3,     2,     4,     6,     8,
    1380        1,     2,     2,     1,     2,     2,     3,     3,     1,     4,
    1381        4,     3,     5,     8,     3,     2,     3,     1,     5,     5,
    1382        6,     6,     1,     2,     2,     1,     2,     2,     3,     3,
    1383        1,     4,     4,     3,     5,     8,     3,     1,     2,     1,
    1384        2,     6,     5,     6,     7,     7,     1,     2,     2,     1,
    1385        2,     2,     3,     3,     1,     4,     4,     3,     8,     3,
    1386        1,     1,     2,     1,     1,     2,     3,     2,     3,     2,
    1387        3,     3,     2,     4,     3,     2,     3,     2,     4,     3,
    1388        2,     6,     6,     6,     7,     1,     2,     1,     1,     1,
    1389        2,     3,     2,     3,     2,     3,     3,     4,     2,     3,
    1390        4,     2,     5,     5,     6,     6,     0,     1,     0,     2
    1391 };
    1392 
    1393 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
    1394    Performed when YYTABLE doesn't specify something else to do.  Zero
    1395    means the default is an error.  */
     1071  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
     1072     Performed when YYTABLE does not specify something else to do.  Zero
     1073     means the default is an error.  */
    13961074static const yytype_uint16 yydefact[] =
    13971075{
     
    15541232};
    15551233
    1556 /* YYDEFGOTO[NTERM-NUM].  */
     1234  /* YYPGOTO[NTERM-NUM].  */
     1235static const yytype_int16 yypgoto[] =
     1236{
     1237   -1317,  4344,  3244, -1317,   633, -1317,   172,   896,  -203, -1317,
     1238     487,  -518,  -482,  -910,  -211,  1511,     0, -1317,  1129,   534,
     1239     537,   615,   556,   984,   981,   988,   980,   989, -1317,     4,
     1240    -451,  4784,  -913, -1317,  -702,   571,    13,  -706,   419, -1317,
     1241     190, -1317,   345,  -964, -1317, -1317,    85, -1317, -1099, -1138,
     1242     197, -1317, -1317, -1317, -1317,    20, -1281, -1317, -1317, -1317,
     1243   -1317, -1317, -1317,   266, -1095,    50, -1317,  -472, -1317,   443,
     1244     239, -1317,   118, -1317,  -294, -1317, -1317, -1317,   496,  -829,
     1245   -1317, -1317,     8,  -952,    28,  2894, -1317, -1317, -1317,  -214,
     1246   -1317,   121,  1028,  -198,  1848,  3592, -1317, -1317,   127,   296,
     1247    1545,  1505, -1317,  1929, -1317, -1317,   137,  2139, -1317,  2574,
     1248     804, -1317, -1317, -1317,  -637, -1317,   886,   889,   490,   670,
     1249      52, -1317, -1317, -1317,   893,   666,  -510, -1317,  -116,    40,
     1250    1073, -1317, -1317,  -889,  -983,   933,  1377,  1006,   -11, -1317,
     1251    1351,   508,  -322,  -183,  -145,   623,   724, -1317,   944, -1317,
     1252    2701,   574,  -443,   875, -1317, -1317,   659, -1317,  -228, -1317,
     1253     -45, -1317, -1317, -1317, -1253,   370, -1317, -1317, -1317,  1120,
     1254   -1317,    33, -1317, -1317,  -828,  -100, -1316,  -170,  2264, -1317,
     1255    1914, -1317,   868, -1317,  -155,   129,  -181,  -180,  -175,     7,
     1256     -41,   -40,   -35,  1507,    37,    53,    57,   -29,  -172,  -163,
     1257    -158,  -150,  -293,  -500,  -490,  -485,  -542,  -284,  -525, -1317,
     1258   -1317,  -499,  1035,  1038,  1040,  1486,  4616,  -563,  -531,  -513,
     1259    -491,  -561, -1317,  -506,  -730,  -727,  -723,  -562,  -311,  -227,
     1260   -1317, -1317,   378,    19,   -93, -1317,  3633,   159,  -611,  -428
     1261};
     1262
     1263  /* YYDEFGOTO[NTERM-NUM].  */
    15571264static const yytype_int16 yydefgoto[] =
    15581265{
     
    15831290};
    15841291
    1585 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    1586    STATE-NUM.  */
    1587 #define YYPACT_NINF -1317
    1588 static const yytype_int16 yypact[] =
    1589 {
    1590     7252,  8635, -1317,    -3, -1317, -1317, -1317, -1317, -1317, -1317,
    1591    -1317,    23, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
    1592    -1317, -1317, -1317, -1317, -1317, -1317,    81,    81,    81,  1277,
    1593      970,   104,  7368,   277, -1317, -1317, -1317, -1317, -1317,   201,
    1594    -1317, -1317, -1317,  1047,   187, -1317, -1317, -1317, -1317,  5370,
    1595    -1317, -1317, -1317, -1317,    35,    48, -1317,  1328, -1317, -1317,
    1596    -1317, -1317,   235,  1663,   343,    98,  7484, -1317, -1317,  6174,
    1597     1066, -1317, -1317,   536,   376,  5540,   978,  1631,   536,  1775,
    1598    -1317, -1317,   477,   683, -1317,   536,  1892, -1317,   295, -1317,
    1599      422,   489, -1317, -1317, -1317, -1317,   346,    48,    81, -1317,
    1600       81, -1317, -1317, -1317, -1317,  9392,  1328, -1317, -1317,  1328,
    1601    -1317,   321, -1317,  9431, -1317, -1317,  2250,  9501, -1317,   668,
    1602      668,   668, -1317, -1317, -1317,    81, -1317, -1317, -1317,   373,
    1603      399,   410, -1317, -1317, -1317,   420, -1317, -1317, -1317, -1317,
    1604    -1317,   428,   450, -1317, -1317,    59,  8604,  2904,   144,   440,
    1605      493,   498,   531,   544,   560,  8522,  6772,   510,   580, -1317,
    1606     9114, -1317, -1317, -1317, -1317,   584, -1317,   153,  4280,  4280,
    1607    -1317,   570,   283, -1317, -1317, -1317, -1317,   596,   288,   303,
    1608      332,    81,   583, -1317, -1317,  1663,  2232,   648, -1317,    73,
    1609    -1317,    81,    81,    48, -1317, -1317,    80, -1317,    81,    81,
    1610    -1317,  3694,   599,   613,   668,  6565, -1317, -1317,   661,  5370,
    1611    -1317, -1317,   536, -1317, -1317, -1317,    48, -1317,  1328,    35,
    1612    -1317,  7675, -1317,   668,   668,   668,    48, -1317,  1277, -1317,
    1613     5446, -1317, -1317,   620,   668, -1317,   668, -1317,   201,  8604,
    1614    -1317,   673, -1317,   970,   692,   668, -1317,  1277,   697,   707,
    1615    -1317,  7368,   576, -1317, -1317, -1317,  4822, -1317, -1317,  9720,
    1616    -1317,   648,   165, 10347,  9501,  2250,  3694, -1317,   109, -1317,
    1617    -1317,  9431,  1328,   743,  7515, -1317, -1317,   306, -1317, 10675,
    1618      770,   800,  2676,   801, 10480, 10499, -1317,   813, -1317, -1317,
    1619    -1317, -1317, 10556, 10556,  8378,   795, -1317, -1317, -1317, -1317,
    1620    -1317, -1317,   842, -1317,   685,  1919,  8717, 10480, -1317,   652,
    1621      325,   507,   317,   581,   826,   820,   823,   861,   111, -1317,
    1622    -1317,   827,   703, -1317,   452, -1317, -1317,  2904, -1317, -1317,
    1623      278,   856, -1317,   636,   856,   866,   201, -1317, -1317,   872,
    1624     9392, -1317,   876,   887,  8830, -1317, -1317,  1020,  2049,  8093,
    1625     6565,   536, -1317,   536,   668,   668, -1317, -1317, -1317, -1317,
    1626    -1317, -1317,   668,  9392,  1328, -1317, -1317,  9540,  1233, -1317,
    1627     7824, -1317, -1317, -1317, -1317, -1317, -1317, -1317,   891,  4627,
    1628    10480, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
    1629    -1317, -1317, -1317, -1317, -1317,  2250, -1317,   552,   901,   904,
    1630      912,   862,   920,   922,   924,  2232, -1317, -1317,   932,    35,
    1631      936, -1317, -1317,   939, -1317, -1317, -1317,  4822, -1317, -1317,
    1632    -1317, -1317, -1317,  3694, -1317,  8604,  8604, -1317,   668,  2250,
    1633     6684,  1328,  8166, -1317, -1317, -1317, -1317,  4822,   165, -1317,
    1634    -1317,   536,    48, -1317, -1317,  4822, -1317,  6449, -1317, -1317,
    1635      668,   668,   484,  8011,   938,   941,   931,   952,   668, -1317,
    1636    -1317, -1317, -1317,  9797, -1317,   578,  6327, -1317,    48,   955,
    1637    -1317,  2250, 10757, 10404, -1317, -1317, -1317, -1317,   881,  3694,
    1638    -1317,  8239,   648,  3545, -1317, -1317, -1317,  1641,   586,   827,
    1639      970,  7515,   592,  9431, -1317,  7515, -1317, -1317, -1317, -1317,
    1640      603, -1317,   967,   800,   215,  8378, -1317,  9570, -1317, -1317,
    1641     8378, -1317,  8491,  8378, -1317, -1317,   966, -1317,   617,   973,
    1642      839,   983, -1317, -1317,  9253,  6415, -1317,   247, -1317, -1317,
    1643    10347, -1317,   330, 10347, -1317, -1317, -1317, -1317, -1317, -1317,
    1644    -1317, -1317, -1317, -1317, -1317, 10347, -1317, -1317, 10480, 10480,
    1645    10480, 10480, 10480, 10480, 10480, 10480, 10480, 10480, 10480, 10480,
    1646    10480, 10480, 10480, 10480, 10480, 10480,  4526, 10347, -1317,   703,
    1647      751, -1317, -1317,    81,    81, -1317, -1317,  8604, -1317, -1317,
    1648      939,   576, -1317,   939, 10423, -1317, -1317, -1317,  8975,  6415,
    1649      968,   976, -1317,  9501, -1317, -1317,   584, -1317,   990,   769,
    1650      999,  3014,   124,   827, -1317,    81,    81,   827,   125, -1317,
    1651       81,    81,   939, -1317, -1317,    81,    81, -1317,   856,  9652,
    1652     1328, 10902,   151,   358,  9652, -1317,  9720, -1317,   827, -1317,
    1653     9392, -1317,   147,  7790,  7790,  7790,  1328, -1317,  5708,   982,
    1654      891,  1167,   995,   996, -1317,  1011,  4280,   230, -1317,  1103,
    1655     1328,  7790,   576,  2250,   576,   648,   671,   856, -1317, -1317,
    1656      694,   856, -1317, -1317, -1317,   800, -1317,   856,    48,  9797,
    1657    -1317,   621,  1024,   640,  1026, -1317,  1030,    48, -1317, -1317,
    1658     4822,    48,  1032,  9570,  1037, -1317,  1585, -1317,   335,   390,
    1659      970, -1317,   970,  1023, 10480, -1317,   970, 10902, -1317, -1317,
    1660     1034, -1317, -1317, -1317,   576, -1317, 10830,   887, -1317,  7790,
    1661      859,  8093, -1317, -1317,   584,  1025,  1036,  1641,  3247, -1317,
    1662    -1317,  7515, -1317, -1317,  1039, -1317, -1317,  1043, -1317,  1039,
    1663     1048, 10675, 10347,    67,  1027,   133,  1053,  1061,  1068,  1069,
    1664    -1317,  1072,  1074,  9362,  6534, -1317, 10347, -1317,   839,  2140,
    1665    -1317, -1317, -1317,    81,    81, 10290, 10347,  1070, -1317, -1317,
    1666      675, -1317, 10347, -1317, -1317,   644, -1317, -1317, -1317, -1317,
    1667      652,   652,   325,   325,   507,   507,   507,   507,   317,   317,
    1668      581,   826,   820,   823,   861, 10480,   333, -1317,  9797,  1079,
    1669     1080,  1081,   751, -1317, -1317, -1317, -1317, -1317,  9797,   700,
    1670     7790, -1317,  9392, -1317,  6891,  8943, -1317,  7824,  6772, -1317,
    1671    -1317,   769,  9797,   917,  1082,  1083,  1084,  1087,  1088,  1089,
    1672     1091, -1317,  4955,  3014, -1317, -1317, -1317, -1317, -1317, -1317,
    1673    -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
    1674    -1317,   939, -1317, -1317, -1317,   827, -1317, -1317, -1317, -1317,
    1675    -1317, -1317, -1317, -1317,  1098, -1317,  1099,  1101, -1317, -1317,
    1676       35,  1070,  5708, -1317, -1317, -1317,  4627,  1102, -1317, -1317,
    1677    -1317, -1317,   970,  5944,  1191, -1317, -1317, -1317, -1317,  1094,
    1678       35, -1317, -1317,   939, -1317, -1317,   939,    24,   939, -1317,
    1679    -1317, -1317, -1317, -1317, -1317,  9223, -1317,    48, -1317, -1317,
    1680      432,   441,  9540,  7010,  2348, 10480,  3377, -1317, -1317,  1092,
    1681       94,  1092, -1317,   970, -1317,    81, -1317, -1317,  8748,   931,
    1682    -1317, -1317, -1317,   941,  1116,  1111, -1317, -1317,  1118,  1119,
    1683    -1317,   859,  2430, -1317,   455, -1317,  3247,   827, -1317,  1122,
    1684     7515,  9682,  8604,  1125, -1317, -1317,  1130,  1135,  1124, -1317,
    1685    10480,   166,   222,  1132, -1317,  1138,   576,  1138, -1317, -1317,
    1686     1138,  1137, -1317,  1145,  1147,  1148,  2140, -1317, -1317, -1317,
    1687     4627, -1317, -1317, -1317, -1317,  1143, 10347,  1149,   576, -1317,
    1688    10347, -1317,   576, -1317, -1317, 10347, -1317,   721,   856, -1317,
    1689    -1317, -1317, -1317, -1317, -1317, -1317,   891,   887,  8830, -1317,
    1690    -1317,  7129,  1152, -1317,   731,   856, -1317,   745,   763,   856,
    1691    -1317,   668,  5561, -1317, -1317, -1317,  9797,  9797, -1317,  8166,
    1692     8166, -1317,  1154,  1156,  1153,  1155, -1317,  1168,   460,   196,
    1693     1070, -1317,   576, -1317,  4280, -1317, 10347,   474, -1317,  6296,
    1694     1159,  1170, 10233,  1172,  1175,   -14,     3,    11, 10347,  1179,
    1695       48, 10347, 10347,  1160,  1177,   282,  1161, -1317, -1317, -1317,
    1696     1180, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
    1697      970,  1184, 10347, -1317,  9797,  9797,    81,  1188, -1317,  8861,
    1698    -1317, -1317,   809, -1317,  3377, -1317, -1317, -1317, -1317,  1585,
    1699    -1317, -1317,  1185, -1317, -1317, -1317, -1317,  1193,  2430, -1317,
    1700    -1317,  1176, -1317,  1039, -1317, -1317,  2250,  1196, -1317, -1317,
    1701    -1317,   709,  1198, -1317,   133,  1202, 10480,  1186,   133,   133,
    1702     1211,  9253,   789,   856, -1317, -1317,  1011, 10347,  1214,  1143,
    1703      505,   224,  1217, -1317, -1317,  1218,  1217, -1317, -1317,  1226,
    1704    -1317, -1317,   939,  1228,  1230,  6653,  1231,  1232,  1243, -1317,
    1705    -1317,  1246, -1317, -1317,   939, -1317, -1317, -1317, -1317,   939,
    1706    10347, 10347,   887,  1245, -1317, -1317, -1317, -1317, -1317, -1317,
    1707    -1317, -1317, -1317, -1317, -1317, -1317, 10480, 10480,  1247,  1251,
    1708     1217, -1317, -1317,   970, -1317, -1317, -1317,  4468,  9682, 10347,
    1709    10347,  1311, 10347, -1317,  1234, -1317,  1237, -1317,  1239, 10347,
    1710     1241, 10347,  1049,  1244,    26,    81,  9084,   750, -1317, -1317,
    1711     5944,  1267,   481, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
    1712    -1317, -1317, 10053, -1317,  8239,  1274, -1317, -1317,  9682,   482,
    1713      512, -1317,  1272,  1259,   800,  1280, -1317,   245, -1317, -1317,
    1714    -1317, -1317,   939,  1279, -1317, -1317,  1287,   385,   444,   576,
    1715     1293, -1317,  1294, -1317,  9797, -1317, -1317, -1317, -1317, -1317,
    1716     1295, -1317,  9797,  9797,  9797, -1317, -1317,  1297, -1317,  1298,
    1717     1282,  1305,   511,  7863,  7978, -1317, -1317,   348, -1317,  1304,
    1718     1310, -1317,  8312,   712,   734,  1308,   739,  6143, -1317, -1317,
    1719    -1317,   515, -1317,   765,  1318,  1320,    48,  1371,   879, -1317,
    1720    -1317, 10347, -1317, 10233, 10347, -1317, -1317, -1317,  1322,  1329,
    1721    -1317, -1317, -1317,  1324, -1317, -1317, -1317, -1317, -1317, -1317,
    1722     9682,   800,   265, -1317,  1309,   800,  9797, -1317, -1317, -1317,
    1723    -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
    1724    -1317,  1330,  1331, -1317, -1317, -1317, -1317, -1317, -1317, -1317,
    1725     1334, -1317,  1333, -1317, -1317, 10233,   143, 10347, 10233, -1317,
    1726     1338, 10347, -1317,   259,  1354,  1356, -1317, -1317,  1346,  1347,
    1727     1326, -1317,   880, -1317, -1317, -1317,  1328,  2250,  1345,   842,
    1728      364, 10480, -1317,   774, -1317,   576,   576,  1352,  1355,  1357,
    1729     1360, -1317, -1317,  8166,  1358, -1317,  1436, 10480,  1349, -1317,
    1730    -1317, 10145, -1317,   783, -1317,  1350, 10233,  1359, -1317, -1317,
    1731     1378, -1317,  1379, -1317,  1394,  1396, -1317,  1361,  9682, -1317,
    1732    -1317, -1317,   800,   576,  1386,  1367,  1392,  1217,  1217, -1317,
    1733    -1317, -1317, -1317, -1317, 10233,   275, -1317,   384, -1317, -1317,
    1734     7600, -1317, -1317,  1375, 10347, -1317, 10347,  7600,    48,  9570,
    1735       48,  9570,  1393, -1317,  1398, -1317, -1317,  1395,   842, -1317,
    1736      798, -1317, -1317, -1317,  1399,  1401, -1317, 10480, 10480, -1317,
    1737    -1317,   964,   167, -1317, -1317,  1388, -1317,   964, -1317, -1317,
    1738     2461,   576, -1317, -1317,    48,  9570,    48,  9570,  1409,  1390,
    1739      576, -1317, -1317, -1317, -1317, 10145,  1410,   964,  5861, 10347,
    1740    10057,  1412,   964,  1414,  2461,  3613, -1317, -1317, -1317,  1420,
    1741    -1317, -1317, -1317, -1317,  8604, -1317, -1317, -1317,  9924, -1317,
    1742    10145, -1317, -1317,  1402,  9836, -1317, -1317, 10057,    48,  3613,
    1743       48,  1421,  1429,   817, -1317,  9924, -1317, -1317, -1317,  9836,
    1744    -1317, -1317, -1317,    48,    48, -1317, -1317, -1317, -1317, -1317,
    1745    -1317, -1317, -1317
    1746 };
    1747 
    1748 /* YYPGOTO[NTERM-NUM].  */
    1749 static const yytype_int16 yypgoto[] =
    1750 {
    1751    -1317,  4344,  3244, -1317,   633, -1317,   172,   896,  -203, -1317,
    1752      487,  -518,  -482,  -910,  -211,  1511,     0, -1317,  1129,   534,
    1753      537,   615,   556,   984,   981,   988,   980,   989, -1317,     4,
    1754     -451,  4784,  -913, -1317,  -702,   571,    13,  -706,   419, -1317,
    1755      190, -1317,   345,  -964, -1317, -1317,    85, -1317, -1099, -1138,
    1756      197, -1317, -1317, -1317, -1317,    20, -1281, -1317, -1317, -1317,
    1757    -1317, -1317, -1317,   266, -1095,    50, -1317,  -472, -1317,   443,
    1758      239, -1317,   118, -1317,  -294, -1317, -1317, -1317,   496,  -829,
    1759    -1317, -1317,     8,  -952,    28,  2894, -1317, -1317, -1317,  -214,
    1760    -1317,   121,  1028,  -198,  1848,  3592, -1317, -1317,   127,   296,
    1761     1545,  1505, -1317,  1929, -1317, -1317,   137,  2139, -1317,  2574,
    1762      804, -1317, -1317, -1317,  -637, -1317,   886,   889,   490,   670,
    1763       52, -1317, -1317, -1317,   893,   666,  -510, -1317,  -116,    40,
    1764     1073, -1317, -1317,  -889,  -983,   933,  1377,  1006,   -11, -1317,
    1765     1351,   508,  -322,  -183,  -145,   623,   724, -1317,   944, -1317,
    1766     2701,   574,  -443,   875, -1317, -1317,   659, -1317,  -228, -1317,
    1767      -45, -1317, -1317, -1317, -1253,   370, -1317, -1317, -1317,  1120,
    1768    -1317,    33, -1317, -1317,  -828,  -100, -1316,  -170,  2264, -1317,
    1769     1914, -1317,   868, -1317,  -155,   129,  -181,  -180,  -175,     7,
    1770      -41,   -40,   -35,  1507,    37,    53,    57,   -29,  -172,  -163,
    1771     -158,  -150,  -293,  -500,  -490,  -485,  -542,  -284,  -525, -1317,
    1772    -1317,  -499,  1035,  1038,  1040,  1486,  4616,  -563,  -531,  -513,
    1773     -491,  -561, -1317,  -506,  -730,  -727,  -723,  -562,  -311,  -227,
    1774    -1317, -1317,   378,    19,   -93, -1317,  3633,   159,  -611,  -428
    1775 };
    1776 
    1777 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    1778    positive, shift that token.  If negative, reduce the rule which
    1779    number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1780 #define YYTABLE_NINF -520
     1292  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
     1293     positive, shift that token.  If negative, reduce the rule whose
     1294     number is the opposite.  If YYTABLE_NINF, syntax error.  */
    17811295static const yytype_int16 yytable[] =
    17821296{
     
    28812395};
    28822396
    2883 #define yypact_value_is_default(yystate) \
    2884   ((yystate) == (-1317))
    2885 
    2886 #define yytable_value_is_error(yytable_value) \
    2887   YYID (0)
    2888 
    28892397static const yytype_int16 yycheck[] =
    28902398{
     
    39893497};
    39903498
    3991 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    3992    symbol of state STATE-NUM.  */
     3499  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
     3500     symbol of state STATE-NUM.  */
    39933501static const yytype_uint16 yystos[] =
    39943502{
     
    41513659};
    41523660
    4153 #define yyerrok         (yyerrstatus = 0)
    4154 #define yyclearin       (yychar = YYEMPTY)
    4155 #define YYEMPTY         (-2)
    4156 #define YYEOF           0
    4157 
    4158 #define YYACCEPT        goto yyacceptlab
    4159 #define YYABORT         goto yyabortlab
    4160 #define YYERROR         goto yyerrorlab
    4161 
    4162 
    4163 /* Like YYERROR except do call yyerror.  This remains here temporarily
    4164    to ease the transition to the new meaning of YYERROR, for GCC.
    4165    Once GCC version 2 has supplanted version 1, this can go.  However,
    4166    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
    4167    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
    4168    discussed.  */
    4169 
    4170 #define YYFAIL          goto yyerrlab
    4171 #if defined YYFAIL
    4172   /* This is here to suppress warnings from the GCC cpp's
    4173      -Wunused-macros.  Normally we don't worry about that warning, but
    4174      some users do, and we want to make it easy for users to remove
    4175      YYFAIL uses, which will produce warnings from Bison 2.5.  */
    4176 #endif
     3661  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
     3662static const yytype_uint16 yyr1[] =
     3663{
     3664       0,   133,   134,   135,   136,   136,   136,   137,   137,   137,
     3665     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
     3666     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
     3667     143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
     3668     147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
     3669     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
     3670     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
     3671     152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
     3672     155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
     3673     158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
     3674     162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
     3675     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
     3676     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
     3677     171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
     3678     174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
     3679     178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
     3680     181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
     3681     186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
     3682     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
     3683     192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
     3684     194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
     3685     197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
     3686     200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
     3687     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
     3688     210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
     3689     213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
     3690     216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
     3691     220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
     3692     222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
     3693     225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
     3694     229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
     3695     233,   233,   233,   233,   233,   233,   233,   234,   234,   234,
     3696     234,   234,   234,   234,   234,   234,   234,   234,   234,   234,
     3697     235,   235,   235,   235,   235,   236,   236,   237,   237,   237,
     3698     237,   238,   238,   238,   238,   239,   239,   239,   239,   240,
     3699     240,   240,   241,   241,   241,   241,   242,   242,   242,   243,
     3700     243,   244,   244,   245,   244,   244,   244,   246,   246,   247,
     3701     247,   248,   248,   248,   248,   249,   249,   249,   249,   250,
     3702     250,   251,   251,   251,   251,   251,   252,   252,   253,   254,
     3703     255,   255,   256,   255,   257,   257,   258,   258,   259,   259,
     3704     260,   260,   260,   260,   260,   261,   261,   261,   261,   262,
     3705     262,   263,   263,   264,   264,   265,   265,   265,   265,   266,
     3706     266,   266,   266,   266,   267,   267,   267,   267,   267,   268,
     3707     268,   269,   269,   270,   270,   271,   271,   271,   272,   272,
     3708     272,   273,   273,   273,   274,   274,   274,   275,   275,   275,
     3709     275,   276,   276,   276,   277,   277,   278,   278,   278,   278,
     3710     278,   279,   279,   280,   280,   281,   281,   281,   281,   281,
     3711     282,   282,   282,   282,   283,   283,   283,   284,   285,   285,
     3712     287,   286,   286,   288,   288,   288,   289,   289,   290,   290,
     3713     290,   291,   291,   291,   291,   292,   292,   292,   293,   293,
     3714     294,   294,   295,   296,   295,   297,   297,   298,   298,   299,
     3715     299,   299,   300,   300,   301,   301,   302,   302,   303,   303,
     3716     304,   304,   304,   305,   304,   304,   306,   306,   306,   307,
     3717     307,   307,   307,   307,   307,   307,   307,   307,   308,   308,
     3718     308,   309,   310,   310,   311,   311,   312,   312,   313,   314,
     3719     314,   315,   315,   315,   316,   316,   316,   316,   317,   317,
     3720     317,   317,   318,   318,   319,   319,   319,   320,   320,   320,
     3721     320,   321,   321,   322,   322,   322,   323,   323,   323,   324,
     3722     324,   324,   325,   325,   325,   326,   326,   326,   327,   327,
     3723     327,   328,   328,   328,   329,   329,   329,   330,   330,   330,
     3724     330,   331,   331,   332,   332,   332,   333,   333,   333,   333,
     3725     334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
     3726     337,   337,   337,   337,   338,   338,   338,   339,   339,   339,
     3727     339,   340,   340,   341,   341,   341,   342,   342,   343,   343,
     3728     344,   344,   344,   345,   345,   345,   345,   345,   346,   346,
     3729     346,   346,   347,   347,   347,   348,   348,   348,   349,   349,
     3730     349,   349,   350,   350,   350,   351,   351,   351,   351,   351,
     3731     352,   352,   352,   352,   353,   353,   353,   354,   354,   354,
     3732     355,   355,   355,   355,   355,   355,   356,   356,   356,   357,
     3733     357,   357,   357,   357,   358,   358,   358,   358,   359,   359,
     3734     360,   360,   360,   361,   361,   362,   362,   362,   362,   362,
     3735     362,   363,   363,   363,   363,   363,   363,   363,   363,   363,
     3736     363,   364,   364,   364,   364,   365,   365,   365,   366,   366,
     3737     367,   367,   367,   367,   367,   367,   368,   368,   368,   368,
     3738     368,   368,   369,   370,   370,   370,   371,   371,   372,   372
     3739};
     3740
     3741  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
     3742static const yytype_uint8 yyr2[] =
     3743{
     3744       0,     2,     0,     0,     1,     1,     1,     1,     1,     1,
     3745       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
     3746       3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
     3747       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
     3748       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
     3749       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
     3750       1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
     3751       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
     3752       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
     3753       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
     3754       5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
     3755       1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
     3756       6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
     3757       1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
     3758       1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
     3759       7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
     3760       3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
     3761       1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
     3762       7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
     3763       3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
     3764       5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
     3765       2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
     3766       1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
     3767       1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
     3768       3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
     3769       3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
     3770       3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
     3771       3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
     3772       3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
     3773       1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
     3774       1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
     3775       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     3776       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     3777       1,     2,     2,     3,     3,     1,     3,     1,     2,     2,
     3778       2,     4,     4,     4,     4,     1,     2,     2,     3,     1,
     3779       2,     2,     1,     2,     2,     3,     1,     2,     2,     1,
     3780       1,     4,     2,     0,     6,     7,     2,     2,     2,     0,
     3781       2,     2,     3,     2,     3,     1,     2,     3,     2,     2,
     3782       4,     0,     1,     2,     2,     1,     0,     1,     2,     2,
     3783       5,     2,     0,     7,     2,     4,     0,     2,     0,     1,
     3784       1,     1,     5,     5,     5,     1,     5,     5,     9,     1,
     3785       5,     0,     1,     1,     5,     1,     1,     5,     5,     1,
     3786       3,     3,     4,     1,     1,     1,     1,     2,     1,     3,
     3787       3,     1,     2,     1,     3,     1,     1,     1,     1,     1,
     3788       1,     1,     1,     1,     1,     1,     2,     1,     1,     1,
     3789       2,     0,     2,     2,     1,     4,     0,     1,     2,     3,
     3790       4,     2,     2,     1,     2,     2,     5,     5,     7,     6,
     3791       1,     2,     2,     3,     1,     2,     2,     4,     2,     4,
     3792       0,     4,     2,     1,     1,     1,     0,     2,     5,     5,
     3793      13,     1,     1,     3,     3,     2,     3,     3,     2,     4,
     3794       1,     6,     9,     0,    11,     1,     3,     3,     3,     1,
     3795       1,     5,     2,     5,     0,     1,     1,     3,     0,     1,
     3796       1,     1,     1,     0,     6,     2,     1,     2,     4,     2,
     3797       3,     3,     3,     4,     5,     5,     5,     6,     1,     1,
     3798       1,     3,     0,     5,     0,     1,     1,     2,     6,     1,
     3799       3,     0,     1,     4,     1,     1,     1,     1,     2,     1,
     3800       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
     3801       3,     8,     3,     2,     1,     2,     6,     8,     3,     2,
     3802       3,     3,     4,     4,     3,     1,     1,     1,     4,     6,
     3803       3,     2,     3,     3,     4,     4,     3,     2,     1,     2,
     3804       2,     1,     3,     2,     3,     3,     2,     4,     4,     3,
     3805       6,     8,     3,     2,     1,     2,     2,     2,     3,     3,
     3806       2,     4,     4,     3,     6,     8,     3,     2,     1,     2,
     3807       2,     1,     1,     2,     3,     3,     2,     4,     6,     8,
     3808       1,     2,     2,     1,     2,     2,     3,     3,     1,     4,
     3809       4,     3,     5,     8,     3,     2,     3,     1,     5,     5,
     3810       6,     6,     1,     2,     2,     1,     2,     2,     3,     3,
     3811       1,     4,     4,     3,     5,     8,     3,     1,     2,     1,
     3812       2,     6,     5,     6,     7,     7,     1,     2,     2,     1,
     3813       2,     2,     3,     3,     1,     4,     4,     3,     8,     3,
     3814       1,     1,     2,     1,     1,     2,     3,     2,     3,     2,
     3815       3,     3,     2,     4,     3,     2,     3,     2,     4,     3,
     3816       2,     6,     6,     6,     7,     1,     2,     1,     1,     1,
     3817       2,     3,     2,     3,     2,     3,     3,     4,     2,     3,
     3818       4,     2,     5,     5,     6,     6,     0,     1,     0,     2
     3819};
     3820
     3821
     3822#define yyerrok         (yyerrstatus = 0)
     3823#define yyclearin       (yychar = YYEMPTY)
     3824#define YYEMPTY         (-2)
     3825#define YYEOF           0
     3826
     3827#define YYACCEPT        goto yyacceptlab
     3828#define YYABORT         goto yyabortlab
     3829#define YYERROR         goto yyerrorlab
     3830
    41773831
    41783832#define YYRECOVERING()  (!!yyerrstatus)
    41793833
    4180 #define YYBACKUP(Token, Value)                                  \
    4181 do                                                              \
    4182   if (yychar == YYEMPTY && yylen == 1)                          \
    4183     {                                                           \
    4184       yychar = (Token);                                         \
    4185       yylval = (Value);                                         \
    4186       YYPOPSTACK (1);                                           \
    4187       goto yybackup;                                            \
    4188     }                                                           \
    4189   else                                                          \
    4190     {                                                           \
     3834#define YYBACKUP(Token, Value)                                  \
     3835do                                                              \
     3836  if (yychar == YYEMPTY)                                        \
     3837    {                                                           \
     3838      yychar = (Token);                                         \
     3839      yylval = (Value);                                         \
     3840      YYPOPSTACK (yylen);                                       \
     3841      yystate = *yyssp;                                         \
     3842      goto yybackup;                                            \
     3843    }                                                           \
     3844  else                                                          \
     3845    {                                                           \
    41913846      yyerror (YY_("syntax error: cannot back up")); \
    4192       YYERROR;                                                  \
    4193     }                                                           \
    4194 while (YYID (0))
    4195 
    4196 
    4197 #define YYTERROR        1
    4198 #define YYERRCODE       256
    4199 
    4200 
    4201 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
    4202    If N is 0, then set CURRENT to the empty location which ends
    4203    the previous symbol: RHS[0] (always defined).  */
    4204 
    4205 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
    4206 #ifndef YYLLOC_DEFAULT
    4207 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
    4208     do                                                                  \
    4209       if (YYID (N))                                                    \
    4210         {                                                               \
    4211           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
    4212           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
    4213           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
    4214           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
    4215         }                                                               \
    4216       else                                                              \
    4217         {                                                               \
    4218           (Current).first_line   = (Current).last_line   =              \
    4219             YYRHSLOC (Rhs, 0).last_line;                                \
    4220           (Current).first_column = (Current).last_column =              \
    4221             YYRHSLOC (Rhs, 0).last_column;                              \
    4222         }                                                               \
    4223     while (YYID (0))
    4224 #endif
    4225 
    4226 
    4227 /* This macro is provided for backward compatibility. */
    4228 
    4229 #ifndef YY_LOCATION_PRINT
    4230 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
    4231 #endif
    4232 
    4233 
    4234 /* YYLEX -- calling `yylex' with the right arguments.  */
    4235 
    4236 #ifdef YYLEX_PARAM
    4237 # define YYLEX yylex (YYLEX_PARAM)
    4238 #else
    4239 # define YYLEX yylex ()
    4240 #endif
     3847      YYERROR;                                                  \
     3848    }                                                           \
     3849while (0)
     3850
     3851/* Error token number */
     3852#define YYTERROR        1
     3853#define YYERRCODE       256
     3854
     3855
    42413856
    42423857/* Enable debugging if requested.  */
     
    42483863# endif
    42493864
    4250 # define YYDPRINTF(Args)                        \
    4251 do {                                            \
    4252   if (yydebug)                                  \
    4253     YYFPRINTF Args;                             \
    4254 } while (YYID (0))
    4255 
    4256 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
    4257 do {                                                                      \
    4258   if (yydebug)                                                            \
    4259     {                                                                     \
    4260       YYFPRINTF (stderr, "%s ", Title);                                   \
    4261       yy_symbol_print (stderr,                                            \
    4262                   Type, Value); \
    4263       YYFPRINTF (stderr, "\n");                                           \
    4264     }                                                                     \
    4265 } while (YYID (0))
    4266 
    4267 
    4268 /*--------------------------------.
    4269 | Print this symbol on YYOUTPUT.  |
    4270 `--------------------------------*/
    4271 
    4272 /*ARGSUSED*/
    4273 #if (defined __STDC__ || defined __C99__FUNC__ \
    4274      || defined __cplusplus || defined _MSC_VER)
     3865# define YYDPRINTF(Args)                        \
     3866do {                                            \
     3867  if (yydebug)                                  \
     3868    YYFPRINTF Args;                             \
     3869} while (0)
     3870
     3871/* This macro is provided for backward compatibility. */
     3872#ifndef YY_LOCATION_PRINT
     3873# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
     3874#endif
     3875
     3876
     3877# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
     3878do {                                                                      \
     3879  if (yydebug)                                                            \
     3880    {                                                                     \
     3881      YYFPRINTF (stderr, "%s ", Title);                                   \
     3882      yy_symbol_print (stderr,                                            \
     3883                  Type, Value); \
     3884      YYFPRINTF (stderr, "\n");                                           \
     3885    }                                                                     \
     3886} while (0)
     3887
     3888
     3889/*----------------------------------------.
     3890| Print this symbol's value on YYOUTPUT.  |
     3891`----------------------------------------*/
     3892
    42753893static void
    42763894yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
    4277 #else
    4278 static void
    4279 yy_symbol_value_print (yyoutput, yytype, yyvaluep)
    4280     FILE *yyoutput;
    4281     int yytype;
    4282     YYSTYPE const * const yyvaluep;
    4283 #endif
    42843895{
     3896  FILE *yyo = yyoutput;
     3897  YYUSE (yyo);
    42853898  if (!yyvaluep)
    42863899    return;
     
    42883901  if (yytype < YYNTOKENS)
    42893902    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
    4290 # else
    4291   YYUSE (yyoutput);
    42923903# endif
    4293   switch (yytype)
    4294     {
    4295       default:
    4296         break;
    4297     }
     3904  YYUSE (yytype);
    42983905}
    42993906
     
    43033910`--------------------------------*/
    43043911
    4305 #if (defined __STDC__ || defined __C99__FUNC__ \
    4306      || defined __cplusplus || defined _MSC_VER)
    43073912static void
    43083913yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
    4309 #else
    4310 static void
    4311 yy_symbol_print (yyoutput, yytype, yyvaluep)
    4312     FILE *yyoutput;
    4313     int yytype;
    4314     YYSTYPE const * const yyvaluep;
    4315 #endif
    43163914{
    4317   if (yytype < YYNTOKENS)
    4318     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
    4319   else
    4320     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
     3915  YYFPRINTF (yyoutput, "%s %s (",
     3916             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
    43213917
    43223918  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
     
    43293925`------------------------------------------------------------------*/
    43303926
    4331 #if (defined __STDC__ || defined __C99__FUNC__ \
    4332      || defined __cplusplus || defined _MSC_VER)
    43333927static void
    43343928yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
    4335 #else
    4336 static void
    4337 yy_stack_print (yybottom, yytop)
    4338     yytype_int16 *yybottom;
    4339     yytype_int16 *yytop;
    4340 #endif
    43413929{
    43423930  YYFPRINTF (stderr, "Stack now");
     
    43493937}
    43503938
    4351 # define YY_STACK_PRINT(Bottom, Top)                            \
    4352 do {                                                            \
    4353   if (yydebug)                                                  \
    4354     yy_stack_print ((Bottom), (Top));                           \
    4355 } while (YYID (0))
     3939# define YY_STACK_PRINT(Bottom, Top)                            \
     3940do {                                                            \
     3941  if (yydebug)                                                  \
     3942    yy_stack_print ((Bottom), (Top));                           \
     3943} while (0)
    43563944
    43573945
     
    43603948`------------------------------------------------*/
    43613949
    4362 #if (defined __STDC__ || defined __C99__FUNC__ \
    4363      || defined __cplusplus || defined _MSC_VER)
    43643950static void
    4365 yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
    4366 #else
    4367 static void
    4368 yy_reduce_print (yyvsp, yyrule)
    4369     YYSTYPE *yyvsp;
    4370     int yyrule;
    4371 #endif
     3951yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
    43723952{
     3953  unsigned long int yylno = yyrline[yyrule];
    43733954  int yynrhs = yyr2[yyrule];
    43743955  int yyi;
    4375   unsigned long int yylno = yyrline[yyrule];
    43763956  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
    4377              yyrule - 1, yylno);
     3957             yyrule - 1, yylno);
    43783958  /* The symbols being reduced.  */
    43793959  for (yyi = 0; yyi < yynrhs; yyi++)
    43803960    {
    43813961      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
    4382       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
    4383                        &(yyvsp[(yyi + 1) - (yynrhs)])
    4384                                        );
     3962      yy_symbol_print (stderr,
     3963                       yystos[yyssp[yyi + 1 - yynrhs]],
     3964                       &(yyvsp[(yyi + 1) - (yynrhs)])
     3965                                              );
    43853966      YYFPRINTF (stderr, "\n");
    43863967    }
    43873968}
    43883969
    4389 # define YY_REDUCE_PRINT(Rule)          \
    4390 do {                                    \
    4391   if (yydebug)                          \
    4392     yy_reduce_print (yyvsp, Rule); \
    4393 } while (YYID (0))
     3970# define YY_REDUCE_PRINT(Rule)          \
     3971do {                                    \
     3972  if (yydebug)                          \
     3973    yy_reduce_print (yyssp, yyvsp, Rule); \
     3974} while (0)
    43943975
    43953976/* Nonzero means print parse trace.  It is left uninitialized so that
     
    44053986
    44063987/* YYINITDEPTH -- initial size of the parser's stacks.  */
    4407 #ifndef YYINITDEPTH
     3988#ifndef YYINITDEPTH
    44083989# define YYINITDEPTH 200
    44093990#endif
     
    44284009#  else
    44294010/* Return the length of YYSTR.  */
    4430 #if (defined __STDC__ || defined __C99__FUNC__ \
    4431      || defined __cplusplus || defined _MSC_VER)
    44324011static YYSIZE_T
    44334012yystrlen (const char *yystr)
    4434 #else
    4435 static YYSIZE_T
    4436 yystrlen (yystr)
    4437     const char *yystr;
    4438 #endif
    44394013{
    44404014  YYSIZE_T yylen;
     
    44524026/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    44534027   YYDEST.  */
    4454 #if (defined __STDC__ || defined __C99__FUNC__ \
    4455      || defined __cplusplus || defined _MSC_VER)
    44564028static char *
    44574029yystpcpy (char *yydest, const char *yysrc)
    4458 #else
    4459 static char *
    4460 yystpcpy (yydest, yysrc)
    4461     char *yydest;
    4462     const char *yysrc;
    4463 #endif
    44644030{
    44654031  char *yyd = yydest;
     
    44914057
    44924058      for (;;)
    4493         switch (*++yyp)
    4494           {
    4495           case '\'':
    4496           case ',':
    4497             goto do_not_strip_quotes;
    4498 
    4499           case '\\':
    4500             if (*++yyp != '\\')
    4501               goto do_not_strip_quotes;
    4502             /* Fall through.  */
    4503           default:
    4504             if (yyres)
    4505               yyres[yyn] = *yyp;
    4506             yyn++;
    4507             break;
    4508 
    4509           case '"':
    4510             if (yyres)
    4511               yyres[yyn] = '\0';
    4512             return yyn;
    4513           }
     4059        switch (*++yyp)
     4060          {
     4061          case '\'':
     4062          case ',':
     4063            goto do_not_strip_quotes;
     4064
     4065          case '\\':
     4066            if (*++yyp != '\\')
     4067              goto do_not_strip_quotes;
     4068            /* Fall through.  */
     4069          default:
     4070            if (yyres)
     4071              yyres[yyn] = *yyp;
     4072            yyn++;
     4073            break;
     4074
     4075          case '"':
     4076            if (yyres)
     4077              yyres[yyn] = '\0';
     4078            return yyn;
     4079          }
    45144080    do_not_strip_quotes: ;
    45154081    }
     
    45344100                yytype_int16 *yyssp, int yytoken)
    45354101{
    4536   YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
     4102  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
    45374103  YYSIZE_T yysize = yysize0;
    4538   YYSIZE_T yysize1;
    45394104  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
    45404105  /* Internationalized format string. */
    4541   const char *yyformat = 0;
     4106  const char *yyformat = YY_NULLPTR;
    45424107  /* Arguments of yyformat. */
    45434108  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
     
    45474112
    45484113  /* There are many possibilities here to consider:
    4549      - Assume YYFAIL is not used.  It's too flawed to consider.  See
    4550        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
    4551        for details.  YYERROR is fine as it does not invoke this
    4552        function.
    45534114     - If this state is a consistent state with a default action, then
    45544115       the only way this function was invoked is if the default action
     
    45994160                  }
    46004161                yyarg[yycount++] = yytname[yyx];
    4601                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
    4602                 if (! (yysize <= yysize1
    4603                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
    4604                   return 2;
    4605                 yysize = yysize1;
     4162                {
     4163                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
     4164                  if (! (yysize <= yysize1
     4165                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
     4166                    return 2;
     4167                  yysize = yysize1;
     4168                }
    46064169              }
    46074170        }
     
    46234186    }
    46244187
    4625   yysize1 = yysize + yystrlen (yyformat);
    4626   if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
    4627     return 2;
    4628   yysize = yysize1;
     4188  {
     4189    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
     4190    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
     4191      return 2;
     4192    yysize = yysize1;
     4193  }
    46294194
    46304195  if (*yymsg_alloc < yysize)
     
    46634228`-----------------------------------------------*/
    46644229
    4665 /*ARGSUSED*/
    4666 #if (defined __STDC__ || defined __C99__FUNC__ \
    4667      || defined __cplusplus || defined _MSC_VER)
    46684230static void
    46694231yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
    4670 #else
    4671 static void
    4672 yydestruct (yymsg, yytype, yyvaluep)
    4673     const char *yymsg;
    4674     int yytype;
    4675     YYSTYPE *yyvaluep;
    4676 #endif
    46774232{
    46784233  YYUSE (yyvaluep);
    4679 
    46804234  if (!yymsg)
    46814235    yymsg = "Deleting";
    46824236  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
    46834237
    4684   switch (yytype)
    4685     {
    4686 
    4687       default:
    4688         break;
    4689     }
     4238  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
     4239  YYUSE (yytype);
     4240  YY_IGNORE_MAYBE_UNINITIALIZED_END
    46904241}
    46914242
    46924243
    4693 /* Prevent warnings from -Wmissing-prototypes.  */
    4694 #ifdef YYPARSE_PARAM
    4695 #if defined __STDC__ || defined __cplusplus
    4696 int yyparse (void *YYPARSE_PARAM);
    4697 #else
    4698 int yyparse ();
    4699 #endif
    4700 #else /* ! YYPARSE_PARAM */
    4701 #if defined __STDC__ || defined __cplusplus
    4702 int yyparse (void);
    4703 #else
    4704 int yyparse ();
    4705 #endif
    4706 #endif /* ! YYPARSE_PARAM */
    47074244
    47084245
     
    47124249/* The semantic value of the lookahead symbol.  */
    47134250YYSTYPE yylval;
    4714 
    47154251/* Number of syntax errors so far.  */
    47164252int yynerrs;
     
    47214257`----------*/
    47224258
    4723 #ifdef YYPARSE_PARAM
    4724 #if (defined __STDC__ || defined __C99__FUNC__ \
    4725      || defined __cplusplus || defined _MSC_VER)
    4726 int
    4727 yyparse (void *YYPARSE_PARAM)
    4728 #else
    4729 int
    4730 yyparse (YYPARSE_PARAM)
    4731     void *YYPARSE_PARAM;
    4732 #endif
    4733 #else /* ! YYPARSE_PARAM */
    4734 #if (defined __STDC__ || defined __C99__FUNC__ \
    4735      || defined __cplusplus || defined _MSC_VER)
    47364259int
    47374260yyparse (void)
    4738 #else
    4739 int
    4740 yyparse ()
    4741 
    4742 #endif
    4743 #endif
    47444261{
    47454262    int yystate;
     
    47484265
    47494266    /* The stacks and their tools:
    4750        `yyss': related to states.
    4751        `yyvs': related to semantic values.
    4752 
    4753        Refer to the stacks thru separate pointers, to allow yyoverflow
     4267       'yyss': related to states.
     4268       'yyvs': related to semantic values.
     4269
     4270       Refer to the stacks through separate pointers, to allow yyoverflow
    47544271       to reallocate them elsewhere.  */
    47554272
     
    47694286  int yyresult;
    47704287  /* Lookahead token as an internal (translated) token number.  */
    4771   int yytoken;
     4288  int yytoken = 0;
    47724289  /* The variables used to return semantic value and location from the
    47734290     action routines.  */
     
    47874304  int yylen = 0;
    47884305
    4789   yytoken = 0;
    4790   yyss = yyssa;
    4791   yyvs = yyvsa;
     4306  yyssp = yyss = yyssa;
     4307  yyvsp = yyvs = yyvsa;
    47924308  yystacksize = YYINITDEPTH;
    47934309
     
    47984314  yynerrs = 0;
    47994315  yychar = YYEMPTY; /* Cause a token to be read.  */
    4800 
    4801   /* Initialize stack pointers.
    4802      Waste one element of value and location stack
    4803      so that they stay on the same level as the state stack.
    4804      The wasted elements are never initialized.  */
    4805   yyssp = yyss;
    4806   yyvsp = yyvs;
    4807 
    48084316  goto yysetstate;
    48094317
     
    48264334#ifdef yyoverflow
    48274335      {
    4828         /* Give user a chance to reallocate the stack.  Use copies of
    4829            these so that the &'s don't force the real ones into
    4830            memory.  */
    4831         YYSTYPE *yyvs1 = yyvs;
    4832         yytype_int16 *yyss1 = yyss;
    4833 
    4834         /* Each stack pointer address is followed by the size of the
    4835            data in use in that stack, in bytes.  This used to be a
    4836            conditional around just the two extra args, but that might
    4837            be undefined if yyoverflow is a macro.  */
    4838         yyoverflow (YY_("memory exhausted"),
    4839                     &yyss1, yysize * sizeof (*yyssp),
    4840                     &yyvs1, yysize * sizeof (*yyvsp),
    4841                     &yystacksize);
    4842 
    4843         yyss = yyss1;
    4844         yyvs = yyvs1;
     4336        /* Give user a chance to reallocate the stack.  Use copies of
     4337           these so that the &'s don't force the real ones into
     4338           memory.  */
     4339        YYSTYPE *yyvs1 = yyvs;
     4340        yytype_int16 *yyss1 = yyss;
     4341
     4342        /* Each stack pointer address is followed by the size of the
     4343           data in use in that stack, in bytes.  This used to be a
     4344           conditional around just the two extra args, but that might
     4345           be undefined if yyoverflow is a macro.  */
     4346        yyoverflow (YY_("memory exhausted"),
     4347                    &yyss1, yysize * sizeof (*yyssp),
     4348                    &yyvs1, yysize * sizeof (*yyvsp),
     4349                    &yystacksize);
     4350
     4351        yyss = yyss1;
     4352        yyvs = yyvs1;
    48454353      }
    48464354#else /* no yyoverflow */
     
    48504358      /* Extend the stack our own way.  */
    48514359      if (YYMAXDEPTH <= yystacksize)
    4852         goto yyexhaustedlab;
     4360        goto yyexhaustedlab;
    48534361      yystacksize *= 2;
    48544362      if (YYMAXDEPTH < yystacksize)
    4855         yystacksize = YYMAXDEPTH;
     4363        yystacksize = YYMAXDEPTH;
    48564364
    48574365      {
    4858         yytype_int16 *yyss1 = yyss;
    4859         union yyalloc *yyptr =
    4860           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
    4861         if (! yyptr)
    4862           goto yyexhaustedlab;
    4863         YYSTACK_RELOCATE (yyss_alloc, yyss);
    4864         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
     4366        yytype_int16 *yyss1 = yyss;
     4367        union yyalloc *yyptr =
     4368          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
     4369        if (! yyptr)
     4370          goto yyexhaustedlab;
     4371        YYSTACK_RELOCATE (yyss_alloc, yyss);
     4372        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
    48654373#  undef YYSTACK_RELOCATE
    4866         if (yyss1 != yyssa)
    4867           YYSTACK_FREE (yyss1);
     4374        if (yyss1 != yyssa)
     4375          YYSTACK_FREE (yyss1);
    48684376      }
    48694377# endif
     
    48744382
    48754383      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
    4876                   (unsigned long int) yystacksize));
     4384                  (unsigned long int) yystacksize));
    48774385
    48784386      if (yyss + yystacksize - 1 <= yyssp)
    4879         YYABORT;
     4387        YYABORT;
    48804388    }
    48814389
     
    49064414    {
    49074415      YYDPRINTF ((stderr, "Reading a token: "));
    4908       yychar = YYLEX;
     4416      yychar = yylex ();
    49094417    }
    49104418
     
    49464454
    49474455  yystate = yyn;
     4456  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    49484457  *++yyvsp = yylval;
     4458  YY_IGNORE_MAYBE_UNINITIALIZED_END
    49494459
    49504460  goto yynewstate;
     
    49694479
    49704480  /* If YYLEN is nonzero, implement the default value of the action:
    4971      `$$ = $1'.
     4481     '$$ = $1'.
    49724482
    49734483     Otherwise, the following line sets YYVAL to garbage.
     
    49834493    {
    49844494        case 2:
    4985 
    4986 /* Line 1806 of yacc.c  */
    4987 #line 298 "parser.yy"
     4495#line 298 "parser.yy" /* yacc.c:1646  */
    49884496    {
    49894497                        typedefTable.enterScope();
    49904498                }
     4499#line 4500 "Parser/parser.cc" /* yacc.c:1646  */
    49914500    break;
    49924501
    49934502  case 3:
    4994 
    4995 /* Line 1806 of yacc.c  */
    4996 #line 304 "parser.yy"
     4503#line 304 "parser.yy" /* yacc.c:1646  */
    49974504    {
    49984505                        typedefTable.leaveScope();
    49994506                }
     4507#line 4508 "Parser/parser.cc" /* yacc.c:1646  */
    50004508    break;
    50014509
    50024510  case 4:
    5003 
    5004 /* Line 1806 of yacc.c  */
    5005 #line 313 "parser.yy"
    5006     { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     4511#line 313 "parser.yy" /* yacc.c:1646  */
     4512    { (yyval.en) = new ExpressionNode( build_constantInteger( assign_strptr((yyvsp[0].tok)) ) ); }
     4513#line 4514 "Parser/parser.cc" /* yacc.c:1646  */
    50074514    break;
    50084515
    50094516  case 5:
    5010 
    5011 /* Line 1806 of yacc.c  */
    5012 #line 314 "parser.yy"
    5013     { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     4517#line 314 "parser.yy" /* yacc.c:1646  */
     4518    { (yyval.en) = new ExpressionNode( build_constantFloat( assign_strptr((yyvsp[0].tok)) ) ); }
     4519#line 4520 "Parser/parser.cc" /* yacc.c:1646  */
    50144520    break;
    50154521
    50164522  case 6:
    5017 
    5018 /* Line 1806 of yacc.c  */
    5019 #line 315 "parser.yy"
    5020     { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     4523#line 315 "parser.yy" /* yacc.c:1646  */
     4524    { (yyval.en) = new ExpressionNode( build_constantChar( assign_strptr((yyvsp[0].tok)) ) ); }
     4525#line 4526 "Parser/parser.cc" /* yacc.c:1646  */
    50214526    break;
    50224527
    50234528  case 16:
    5024 
    5025 /* Line 1806 of yacc.c  */
    5026 #line 340 "parser.yy"
    5027     { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
     4529#line 340 "parser.yy" /* yacc.c:1646  */
     4530    { (yyval.constant) = build_constantStr( assign_strptr((yyvsp[0].tok)) ); }
     4531#line 4532 "Parser/parser.cc" /* yacc.c:1646  */
    50284532    break;
    50294533
    50304534  case 17:
    5031 
    5032 /* Line 1806 of yacc.c  */
    5033 #line 342 "parser.yy"
    5034     {
    5035                         appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
    5036                         delete (yyvsp[(2) - (2)].tok);                                                                  // allocated by lexer
    5037                         (yyval.constant) = (yyvsp[(1) - (2)].constant);
     4535#line 342 "parser.yy" /* yacc.c:1646  */
     4536    {
     4537                        appendStr( (yyvsp[-1].constant)->get_constant()->get_value(), (yyvsp[0].tok) );
     4538                        delete (yyvsp[0].tok);                                                                  // allocated by lexer
     4539                        (yyval.constant) = (yyvsp[-1].constant);
    50384540                }
     4541#line 4542 "Parser/parser.cc" /* yacc.c:1646  */
    50394542    break;
    50404543
    50414544  case 18:
    5042 
    5043 /* Line 1806 of yacc.c  */
    5044 #line 353 "parser.yy"
    5045     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     4545#line 353 "parser.yy" /* yacc.c:1646  */
     4546    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[0].tok) ) ); }
     4547#line 4548 "Parser/parser.cc" /* yacc.c:1646  */
    50464548    break;
    50474549
    50484550  case 19:
    5049 
    5050 /* Line 1806 of yacc.c  */
    5051 #line 355 "parser.yy"
    5052     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     4551#line 355 "parser.yy" /* yacc.c:1646  */
     4552    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[0].tok) ) ); }
     4553#line 4554 "Parser/parser.cc" /* yacc.c:1646  */
    50534554    break;
    50544555
    50554556  case 20:
    5056 
    5057 /* Line 1806 of yacc.c  */
    5058 #line 357 "parser.yy"
    5059     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     4557#line 357 "parser.yy" /* yacc.c:1646  */
     4558    { (yyval.en) = (yyvsp[-1].en); }
     4559#line 4560 "Parser/parser.cc" /* yacc.c:1646  */
    50604560    break;
    50614561
    50624562  case 21:
    5063 
    5064 /* Line 1806 of yacc.c  */
    5065 #line 359 "parser.yy"
    5066     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     4563#line 359 "parser.yy" /* yacc.c:1646  */
     4564    { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[-1].sn) ) ); }
     4565#line 4566 "Parser/parser.cc" /* yacc.c:1646  */
    50674566    break;
    50684567
    50694568  case 23:
    5070 
    5071 /* Line 1806 of yacc.c  */
    5072 #line 369 "parser.yy"
    5073     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     4569#line 369 "parser.yy" /* yacc.c:1646  */
     4570    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[-5].en), (yyvsp[-2].en) ) ); }
     4571#line 4572 "Parser/parser.cc" /* yacc.c:1646  */
    50744572    break;
    50754573
    50764574  case 24:
    5077 
    5078 /* Line 1806 of yacc.c  */
    5079 #line 371 "parser.yy"
    5080     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     4575#line 371 "parser.yy" /* yacc.c:1646  */
     4576    { (yyval.en) = new ExpressionNode( build_func( (yyvsp[-3].en), (yyvsp[-1].en) ) ); }
     4577#line 4578 "Parser/parser.cc" /* yacc.c:1646  */
    50814578    break;
    50824579
    50834580  case 25:
    5084 
    5085 /* Line 1806 of yacc.c  */
    5086 #line 375 "parser.yy"
    5087     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     4581#line 375 "parser.yy" /* yacc.c:1646  */
     4582    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[-2].en), build_varref( (yyvsp[0].tok) ) ) ); }
     4583#line 4584 "Parser/parser.cc" /* yacc.c:1646  */
    50884584    break;
    50894585
    50904586  case 27:
    5091 
    5092 /* Line 1806 of yacc.c  */
    5093 #line 378 "parser.yy"
    5094     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     4587#line 378 "parser.yy" /* yacc.c:1646  */
     4588    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[-2].en), build_varref( (yyvsp[0].tok) ) ) ); }
     4589#line 4590 "Parser/parser.cc" /* yacc.c:1646  */
    50954590    break;
    50964591
    50974592  case 29:
    5098 
    5099 /* Line 1806 of yacc.c  */
    5100 #line 381 "parser.yy"
    5101     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     4593#line 381 "parser.yy" /* yacc.c:1646  */
     4594    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[-1].en) ) ); }
     4595#line 4596 "Parser/parser.cc" /* yacc.c:1646  */
    51024596    break;
    51034597
    51044598  case 30:
    5105 
    5106 /* Line 1806 of yacc.c  */
    5107 #line 383 "parser.yy"
    5108     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     4599#line 383 "parser.yy" /* yacc.c:1646  */
     4600    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[-1].en) ) ); }
     4601#line 4602 "Parser/parser.cc" /* yacc.c:1646  */
    51094602    break;
    51104603
    51114604  case 31:
    5112 
    5113 /* Line 1806 of yacc.c  */
    5114 #line 385 "parser.yy"
    5115     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     4605#line 385 "parser.yy" /* yacc.c:1646  */
     4606    { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[-5].decl), new InitializerNode( (yyvsp[-2].in), true ) ) ); }
     4607#line 4608 "Parser/parser.cc" /* yacc.c:1646  */
    51164608    break;
    51174609
    51184610  case 32:
    5119 
    5120 /* Line 1806 of yacc.c  */
    5121 #line 387 "parser.yy"
     4611#line 387 "parser.yy" /* yacc.c:1646  */
    51224612    {
    51234613                        Token fn;
    51244614                        fn.str = new std::string( "?{}" ); // location undefined
    5125                         (yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_last( (yyvsp[(3) - (4)].en) ) ) );
     4615                        (yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[-3].en) )->set_last( (yyvsp[-1].en) ) ) );
    51264616                }
     4617#line 4618 "Parser/parser.cc" /* yacc.c:1646  */
    51274618    break;
    51284619
    51294620  case 34:
    5130 
    5131 /* Line 1806 of yacc.c  */
    5132 #line 397 "parser.yy"
    5133     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     4621#line 397 "parser.yy" /* yacc.c:1646  */
     4622    { (yyval.en) = (ExpressionNode *)( (yyvsp[-2].en)->set_last( (yyvsp[0].en) )); }
     4623#line 4624 "Parser/parser.cc" /* yacc.c:1646  */
    51344624    break;
    51354625
    51364626  case 35:
    5137 
    5138 /* Line 1806 of yacc.c  */
    5139 #line 402 "parser.yy"
     4627#line 402 "parser.yy" /* yacc.c:1646  */
    51404628    { (yyval.en) = 0; }
     4629#line 4630 "Parser/parser.cc" /* yacc.c:1646  */
    51414630    break;
    51424631
    51434632  case 38:
    5144 
    5145 /* Line 1806 of yacc.c  */
    5146 #line 408 "parser.yy"
    5147     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     4633#line 408 "parser.yy" /* yacc.c:1646  */
     4634    { (yyval.en) = (ExpressionNode *)(yyvsp[-2].en)->set_last( (yyvsp[0].en) ); }
     4635#line 4636 "Parser/parser.cc" /* yacc.c:1646  */
    51484636    break;
    51494637
    51504638  case 39:
    5151 
    5152 /* Line 1806 of yacc.c  */
    5153 #line 413 "parser.yy"
    5154     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     4639#line 413 "parser.yy" /* yacc.c:1646  */
     4640    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[0].tok) ) ); }
     4641#line 4642 "Parser/parser.cc" /* yacc.c:1646  */
    51554642    break;
    51564643
    51574644  case 40:
    5158 
    5159 /* Line 1806 of yacc.c  */
    5160 #line 417 "parser.yy"
    5161     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     4645#line 417 "parser.yy" /* yacc.c:1646  */
     4646    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[0].en), build_varref( (yyvsp[-2].tok) ) ) ); }
     4647#line 4648 "Parser/parser.cc" /* yacc.c:1646  */
    51624648    break;
    51634649
    51644650  case 41:
    5165 
    5166 /* Line 1806 of yacc.c  */
    5167 #line 419 "parser.yy"
    5168     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     4651#line 419 "parser.yy" /* yacc.c:1646  */
     4652    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[-2].en), build_varref( (yyvsp[-6].tok) ) ) ); }
     4653#line 4654 "Parser/parser.cc" /* yacc.c:1646  */
    51694654    break;
    51704655
    51714656  case 42:
    5172 
    5173 /* Line 1806 of yacc.c  */
    5174 #line 421 "parser.yy"
    5175     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     4657#line 421 "parser.yy" /* yacc.c:1646  */
     4658    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[0].en), build_varref( (yyvsp[-2].tok) ) ) ); }
     4659#line 4660 "Parser/parser.cc" /* yacc.c:1646  */
    51764660    break;
    51774661
    51784662  case 43:
    5179 
    5180 /* Line 1806 of yacc.c  */
    5181 #line 423 "parser.yy"
    5182     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     4663#line 423 "parser.yy" /* yacc.c:1646  */
     4664    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[-2].en), build_varref( (yyvsp[-6].tok) ) ) ); }
     4665#line 4666 "Parser/parser.cc" /* yacc.c:1646  */
    51834666    break;
    51844667
    51854668  case 45:
    5186 
    5187 /* Line 1806 of yacc.c  */
    5188 #line 431 "parser.yy"
    5189     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     4669#line 431 "parser.yy" /* yacc.c:1646  */
     4670    { (yyval.en) = (yyvsp[0].en); }
     4671#line 4672 "Parser/parser.cc" /* yacc.c:1646  */
    51904672    break;
    51914673
    51924674  case 46:
    5193 
    5194 /* Line 1806 of yacc.c  */
    5195 #line 433 "parser.yy"
    5196     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     4675#line 433 "parser.yy" /* yacc.c:1646  */
     4676    { (yyval.en) = new ExpressionNode( (yyvsp[0].constant) ); }
     4677#line 4678 "Parser/parser.cc" /* yacc.c:1646  */
    51974678    break;
    51984679
    51994680  case 47:
    5200 
    5201 /* Line 1806 of yacc.c  */
    5202 #line 435 "parser.yy"
    5203     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     4681#line 435 "parser.yy" /* yacc.c:1646  */
     4682    { (yyval.en) = (yyvsp[0].en)->set_extension( true ); }
     4683#line 4684 "Parser/parser.cc" /* yacc.c:1646  */
    52044684    break;
    52054685
    52064686  case 48:
    5207 
    5208 /* Line 1806 of yacc.c  */
    5209 #line 440 "parser.yy"
    5210     {
    5211                         switch ( (yyvsp[(1) - (2)].op) ) {
     4687#line 440 "parser.yy" /* yacc.c:1646  */
     4688    {
     4689                        switch ( (yyvsp[-1].op) ) {
    52124690                          case OperKinds::AddressOf:
    5213                                 (yyval.en) = new ExpressionNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
     4691                                (yyval.en) = new ExpressionNode( build_addressOf( (yyvsp[0].en) ) );
    52144692                                break;
    52154693                          case OperKinds::PointTo:
    5216                                 (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
     4694                                (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[-1].op), (yyvsp[0].en) ) );
    52174695                                break;
    52184696                          default:
     
    52204698                        }
    52214699                }
     4700#line 4701 "Parser/parser.cc" /* yacc.c:1646  */
    52224701    break;
    52234702
    52244703  case 49:
    5225 
    5226 /* Line 1806 of yacc.c  */
    5227 #line 453 "parser.yy"
    5228     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     4704#line 453 "parser.yy" /* yacc.c:1646  */
     4705    { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[-1].op), (yyvsp[0].en) ) ); }
     4706#line 4707 "Parser/parser.cc" /* yacc.c:1646  */
    52294707    break;
    52304708
    52314709  case 50:
    5232 
    5233 /* Line 1806 of yacc.c  */
    5234 #line 455 "parser.yy"
    5235     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     4710#line 455 "parser.yy" /* yacc.c:1646  */
     4711    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[0].en) ) ); }
     4712#line 4713 "Parser/parser.cc" /* yacc.c:1646  */
    52364713    break;
    52374714
    52384715  case 51:
    5239 
    5240 /* Line 1806 of yacc.c  */
    5241 #line 457 "parser.yy"
    5242     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     4716#line 457 "parser.yy" /* yacc.c:1646  */
     4717    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[0].en) ) ); }
     4718#line 4719 "Parser/parser.cc" /* yacc.c:1646  */
    52434719    break;
    52444720
    52454721  case 52:
    5246 
    5247 /* Line 1806 of yacc.c  */
    5248 #line 459 "parser.yy"
    5249     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     4722#line 459 "parser.yy" /* yacc.c:1646  */
     4723    { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[0].en) ) ); }
     4724#line 4725 "Parser/parser.cc" /* yacc.c:1646  */
    52504725    break;
    52514726
    52524727  case 53:
    5253 
    5254 /* Line 1806 of yacc.c  */
    5255 #line 461 "parser.yy"
    5256     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     4728#line 461 "parser.yy" /* yacc.c:1646  */
     4729    { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[-1].decl) ) ); }
     4730#line 4731 "Parser/parser.cc" /* yacc.c:1646  */
    52574731    break;
    52584732
    52594733  case 54:
    5260 
    5261 /* Line 1806 of yacc.c  */
    5262 #line 463 "parser.yy"
    5263     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     4734#line 463 "parser.yy" /* yacc.c:1646  */
     4735    { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[0].en) ) ); }
     4736#line 4737 "Parser/parser.cc" /* yacc.c:1646  */
    52644737    break;
    52654738
    52664739  case 55:
    5267 
    5268 /* Line 1806 of yacc.c  */
    5269 #line 465 "parser.yy"
    5270     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     4740#line 465 "parser.yy" /* yacc.c:1646  */
     4741    { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[-1].decl) ) ); }
     4742#line 4743 "Parser/parser.cc" /* yacc.c:1646  */
    52714743    break;
    52724744
    52734745  case 56:
    5274 
    5275 /* Line 1806 of yacc.c  */
    5276 #line 467 "parser.yy"
    5277     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     4746#line 467 "parser.yy" /* yacc.c:1646  */
     4747    { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[-3].decl), build_varref( (yyvsp[-1].tok) ) ) ); }
     4748#line 4749 "Parser/parser.cc" /* yacc.c:1646  */
    52784749    break;
    52794750
    52804751  case 57:
    5281 
    5282 /* Line 1806 of yacc.c  */
    5283 #line 469 "parser.yy"
    5284     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     4752#line 469 "parser.yy" /* yacc.c:1646  */
     4753    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[0].tok) ), nullptr ) ); }
     4754#line 4755 "Parser/parser.cc" /* yacc.c:1646  */
    52854755    break;
    52864756
    52874757  case 58:
    5288 
    5289 /* Line 1806 of yacc.c  */
    5290 #line 471 "parser.yy"
    5291     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     4758#line 471 "parser.yy" /* yacc.c:1646  */
     4759    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[-3].tok) ), (yyvsp[-1].en) ) ); }
     4760#line 4761 "Parser/parser.cc" /* yacc.c:1646  */
    52924761    break;
    52934762
    52944763  case 59:
    5295 
    5296 /* Line 1806 of yacc.c  */
    5297 #line 473 "parser.yy"
    5298     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     4764#line 473 "parser.yy" /* yacc.c:1646  */
     4765    { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[-3].tok) ), (yyvsp[-1].decl) ) ); }
     4766#line 4767 "Parser/parser.cc" /* yacc.c:1646  */
    52994767    break;
    53004768
    53014769  case 60:
    5302 
    5303 /* Line 1806 of yacc.c  */
    5304 #line 479 "parser.yy"
     4770#line 479 "parser.yy" /* yacc.c:1646  */
    53054771    { (yyval.op) = OperKinds::PointTo; }
     4772#line 4773 "Parser/parser.cc" /* yacc.c:1646  */
    53064773    break;
    53074774
    53084775  case 61:
    5309 
    5310 /* Line 1806 of yacc.c  */
    5311 #line 480 "parser.yy"
     4776#line 480 "parser.yy" /* yacc.c:1646  */
    53124777    { (yyval.op) = OperKinds::AddressOf; }
     4778#line 4779 "Parser/parser.cc" /* yacc.c:1646  */
    53134779    break;
    53144780
    53154781  case 62:
    5316 
    5317 /* Line 1806 of yacc.c  */
    5318 #line 486 "parser.yy"
     4782#line 486 "parser.yy" /* yacc.c:1646  */
    53194783    { (yyval.op) = OperKinds::UnPlus; }
     4784#line 4785 "Parser/parser.cc" /* yacc.c:1646  */
    53204785    break;
    53214786
    53224787  case 63:
    5323 
    5324 /* Line 1806 of yacc.c  */
    5325 #line 487 "parser.yy"
     4788#line 487 "parser.yy" /* yacc.c:1646  */
    53264789    { (yyval.op) = OperKinds::UnMinus; }
     4790#line 4791 "Parser/parser.cc" /* yacc.c:1646  */
    53274791    break;
    53284792
    53294793  case 64:
    5330 
    5331 /* Line 1806 of yacc.c  */
    5332 #line 488 "parser.yy"
     4794#line 488 "parser.yy" /* yacc.c:1646  */
    53334795    { (yyval.op) = OperKinds::Neg; }
     4796#line 4797 "Parser/parser.cc" /* yacc.c:1646  */
    53344797    break;
    53354798
    53364799  case 65:
    5337 
    5338 /* Line 1806 of yacc.c  */
    5339 #line 489 "parser.yy"
     4800#line 489 "parser.yy" /* yacc.c:1646  */
    53404801    { (yyval.op) = OperKinds::BitNeg; }
     4802#line 4803 "Parser/parser.cc" /* yacc.c:1646  */
    53414803    break;
    53424804
    53434805  case 67:
    5344 
    5345 /* Line 1806 of yacc.c  */
    5346 #line 495 "parser.yy"
    5347     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     4806#line 495 "parser.yy" /* yacc.c:1646  */
     4807    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[-2].decl), (yyvsp[0].en) ) ); }
     4808#line 4809 "Parser/parser.cc" /* yacc.c:1646  */
    53484809    break;
    53494810
    53504811  case 68:
    5351 
    5352 /* Line 1806 of yacc.c  */
    5353 #line 497 "parser.yy"
    5354     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     4812#line 497 "parser.yy" /* yacc.c:1646  */
     4813    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[-2].decl), (yyvsp[0].en) ) ); }
     4814#line 4815 "Parser/parser.cc" /* yacc.c:1646  */
    53554815    break;
    53564816
    53574817  case 70:
    5358 
    5359 /* Line 1806 of yacc.c  */
    5360 #line 503 "parser.yy"
    5361     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4818#line 503 "parser.yy" /* yacc.c:1646  */
     4819    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4820#line 4821 "Parser/parser.cc" /* yacc.c:1646  */
    53624821    break;
    53634822
    53644823  case 71:
    5365 
    5366 /* Line 1806 of yacc.c  */
    5367 #line 505 "parser.yy"
    5368     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4824#line 505 "parser.yy" /* yacc.c:1646  */
     4825    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4826#line 4827 "Parser/parser.cc" /* yacc.c:1646  */
    53694827    break;
    53704828
    53714829  case 72:
    5372 
    5373 /* Line 1806 of yacc.c  */
    5374 #line 507 "parser.yy"
    5375     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4830#line 507 "parser.yy" /* yacc.c:1646  */
     4831    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4832#line 4833 "Parser/parser.cc" /* yacc.c:1646  */
    53764833    break;
    53774834
    53784835  case 74:
    5379 
    5380 /* Line 1806 of yacc.c  */
    5381 #line 513 "parser.yy"
    5382     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4836#line 513 "parser.yy" /* yacc.c:1646  */
     4837    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4838#line 4839 "Parser/parser.cc" /* yacc.c:1646  */
    53834839    break;
    53844840
    53854841  case 75:
    5386 
    5387 /* Line 1806 of yacc.c  */
    5388 #line 515 "parser.yy"
    5389     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4842#line 515 "parser.yy" /* yacc.c:1646  */
     4843    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4844#line 4845 "Parser/parser.cc" /* yacc.c:1646  */
    53904845    break;
    53914846
    53924847  case 77:
    5393 
    5394 /* Line 1806 of yacc.c  */
    5395 #line 521 "parser.yy"
    5396     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4848#line 521 "parser.yy" /* yacc.c:1646  */
     4849    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4850#line 4851 "Parser/parser.cc" /* yacc.c:1646  */
    53974851    break;
    53984852
    53994853  case 78:
    5400 
    5401 /* Line 1806 of yacc.c  */
    5402 #line 523 "parser.yy"
    5403     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4854#line 523 "parser.yy" /* yacc.c:1646  */
     4855    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4856#line 4857 "Parser/parser.cc" /* yacc.c:1646  */
    54044857    break;
    54054858
    54064859  case 80:
    5407 
    5408 /* Line 1806 of yacc.c  */
    5409 #line 529 "parser.yy"
    5410     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4860#line 529 "parser.yy" /* yacc.c:1646  */
     4861    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4862#line 4863 "Parser/parser.cc" /* yacc.c:1646  */
    54114863    break;
    54124864
    54134865  case 81:
    5414 
    5415 /* Line 1806 of yacc.c  */
    5416 #line 531 "parser.yy"
    5417     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4866#line 531 "parser.yy" /* yacc.c:1646  */
     4867    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4868#line 4869 "Parser/parser.cc" /* yacc.c:1646  */
    54184869    break;
    54194870
    54204871  case 82:
    5421 
    5422 /* Line 1806 of yacc.c  */
    5423 #line 533 "parser.yy"
    5424     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4872#line 533 "parser.yy" /* yacc.c:1646  */
     4873    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4874#line 4875 "Parser/parser.cc" /* yacc.c:1646  */
    54254875    break;
    54264876
    54274877  case 83:
    5428 
    5429 /* Line 1806 of yacc.c  */
    5430 #line 535 "parser.yy"
    5431     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4878#line 535 "parser.yy" /* yacc.c:1646  */
     4879    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4880#line 4881 "Parser/parser.cc" /* yacc.c:1646  */
    54324881    break;
    54334882
    54344883  case 85:
    5435 
    5436 /* Line 1806 of yacc.c  */
    5437 #line 541 "parser.yy"
    5438     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4884#line 541 "parser.yy" /* yacc.c:1646  */
     4885    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4886#line 4887 "Parser/parser.cc" /* yacc.c:1646  */
    54394887    break;
    54404888
    54414889  case 86:
    5442 
    5443 /* Line 1806 of yacc.c  */
    5444 #line 543 "parser.yy"
    5445     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4890#line 543 "parser.yy" /* yacc.c:1646  */
     4891    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4892#line 4893 "Parser/parser.cc" /* yacc.c:1646  */
    54464893    break;
    54474894
    54484895  case 88:
    5449 
    5450 /* Line 1806 of yacc.c  */
    5451 #line 549 "parser.yy"
    5452     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4896#line 549 "parser.yy" /* yacc.c:1646  */
     4897    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4898#line 4899 "Parser/parser.cc" /* yacc.c:1646  */
    54534899    break;
    54544900
    54554901  case 90:
    5456 
    5457 /* Line 1806 of yacc.c  */
    5458 #line 555 "parser.yy"
    5459     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4902#line 555 "parser.yy" /* yacc.c:1646  */
     4903    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4904#line 4905 "Parser/parser.cc" /* yacc.c:1646  */
    54604905    break;
    54614906
    54624907  case 92:
    5463 
    5464 /* Line 1806 of yacc.c  */
    5465 #line 561 "parser.yy"
    5466     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4908#line 561 "parser.yy" /* yacc.c:1646  */
     4909    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4910#line 4911 "Parser/parser.cc" /* yacc.c:1646  */
    54674911    break;
    54684912
    54694913  case 94:
    5470 
    5471 /* Line 1806 of yacc.c  */
    5472 #line 567 "parser.yy"
    5473     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     4914#line 567 "parser.yy" /* yacc.c:1646  */
     4915    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[-2].en), (yyvsp[0].en), true ) ); }
     4916#line 4917 "Parser/parser.cc" /* yacc.c:1646  */
    54744917    break;
    54754918
    54764919  case 96:
    5477 
    5478 /* Line 1806 of yacc.c  */
    5479 #line 573 "parser.yy"
    5480     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     4920#line 573 "parser.yy" /* yacc.c:1646  */
     4921    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[-2].en), (yyvsp[0].en), false ) ); }
     4922#line 4923 "Parser/parser.cc" /* yacc.c:1646  */
    54814923    break;
    54824924
    54834925  case 98:
    5484 
    5485 /* Line 1806 of yacc.c  */
    5486 #line 579 "parser.yy"
    5487     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     4926#line 579 "parser.yy" /* yacc.c:1646  */
     4927    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[-4].en), (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4928#line 4929 "Parser/parser.cc" /* yacc.c:1646  */
    54884929    break;
    54894930
    54904931  case 99:
    5491 
    5492 /* Line 1806 of yacc.c  */
    5493 #line 582 "parser.yy"
    5494     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     4932#line 582 "parser.yy" /* yacc.c:1646  */
     4933    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[-3].en), (yyvsp[-3].en), (yyvsp[0].en) ) ); }
     4934#line 4935 "Parser/parser.cc" /* yacc.c:1646  */
    54954935    break;
    54964936
    54974937  case 100:
    5498 
    5499 /* Line 1806 of yacc.c  */
    5500 #line 584 "parser.yy"
    5501     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     4938#line 584 "parser.yy" /* yacc.c:1646  */
     4939    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[-4].en), (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4940#line 4941 "Parser/parser.cc" /* yacc.c:1646  */
    55024941    break;
    55034942
    55044943  case 103:
    5505 
    5506 /* Line 1806 of yacc.c  */
    5507 #line 595 "parser.yy"
    5508     { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     4944#line 595 "parser.yy" /* yacc.c:1646  */
     4945    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[-1].op), (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     4946#line 4947 "Parser/parser.cc" /* yacc.c:1646  */
    55094947    break;
    55104948
    55114949  case 104:
    5512 
    5513 /* Line 1806 of yacc.c  */
    5514 #line 597 "parser.yy"
    5515     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     4950#line 597 "parser.yy" /* yacc.c:1646  */
     4951    { (yyval.en) = ( (yyvsp[0].en) == 0 ) ? (yyvsp[-1].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[-1].en), (yyvsp[0].en) ) ); }
     4952#line 4953 "Parser/parser.cc" /* yacc.c:1646  */
    55164953    break;
    55174954
    55184955  case 105:
    5519 
    5520 /* Line 1806 of yacc.c  */
    5521 #line 602 "parser.yy"
     4956#line 602 "parser.yy" /* yacc.c:1646  */
    55224957    { (yyval.en) = nullptr; }
     4958#line 4959 "Parser/parser.cc" /* yacc.c:1646  */
    55234959    break;
    55244960
    55254961  case 107:
    5526 
    5527 /* Line 1806 of yacc.c  */
    5528 #line 607 "parser.yy"
     4962#line 607 "parser.yy" /* yacc.c:1646  */
    55294963    { (yyval.op) = OperKinds::Assign; }
     4964#line 4965 "Parser/parser.cc" /* yacc.c:1646  */
    55304965    break;
    55314966
    55324967  case 108:
    5533 
    5534 /* Line 1806 of yacc.c  */
    5535 #line 608 "parser.yy"
     4968#line 608 "parser.yy" /* yacc.c:1646  */
    55364969    { (yyval.op) = OperKinds::MulAssn; }
     4970#line 4971 "Parser/parser.cc" /* yacc.c:1646  */
    55374971    break;
    55384972
    55394973  case 109:
    5540 
    5541 /* Line 1806 of yacc.c  */
    5542 #line 609 "parser.yy"
     4974#line 609 "parser.yy" /* yacc.c:1646  */
    55434975    { (yyval.op) = OperKinds::DivAssn; }
     4976#line 4977 "Parser/parser.cc" /* yacc.c:1646  */
    55444977    break;
    55454978
    55464979  case 110:
    5547 
    5548 /* Line 1806 of yacc.c  */
    5549 #line 610 "parser.yy"
     4980#line 610 "parser.yy" /* yacc.c:1646  */
    55504981    { (yyval.op) = OperKinds::ModAssn; }
     4982#line 4983 "Parser/parser.cc" /* yacc.c:1646  */
    55514983    break;
    55524984
    55534985  case 111:
    5554 
    5555 /* Line 1806 of yacc.c  */
    5556 #line 611 "parser.yy"
     4986#line 611 "parser.yy" /* yacc.c:1646  */
    55574987    { (yyval.op) = OperKinds::PlusAssn; }
     4988#line 4989 "Parser/parser.cc" /* yacc.c:1646  */
    55584989    break;
    55594990
    55604991  case 112:
    5561 
    5562 /* Line 1806 of yacc.c  */
    5563 #line 612 "parser.yy"
     4992#line 612 "parser.yy" /* yacc.c:1646  */
    55644993    { (yyval.op) = OperKinds::MinusAssn; }
     4994#line 4995 "Parser/parser.cc" /* yacc.c:1646  */
    55654995    break;
    55664996
    55674997  case 113:
    5568 
    5569 /* Line 1806 of yacc.c  */
    5570 #line 613 "parser.yy"
     4998#line 613 "parser.yy" /* yacc.c:1646  */
    55714999    { (yyval.op) = OperKinds::LSAssn; }
     5000#line 5001 "Parser/parser.cc" /* yacc.c:1646  */
    55725001    break;
    55735002
    55745003  case 114:
    5575 
    5576 /* Line 1806 of yacc.c  */
    5577 #line 614 "parser.yy"
     5004#line 614 "parser.yy" /* yacc.c:1646  */
    55785005    { (yyval.op) = OperKinds::RSAssn; }
     5006#line 5007 "Parser/parser.cc" /* yacc.c:1646  */
    55795007    break;
    55805008
    55815009  case 115:
    5582 
    5583 /* Line 1806 of yacc.c  */
    5584 #line 615 "parser.yy"
     5010#line 615 "parser.yy" /* yacc.c:1646  */
    55855011    { (yyval.op) = OperKinds::AndAssn; }
     5012#line 5013 "Parser/parser.cc" /* yacc.c:1646  */
    55865013    break;
    55875014
    55885015  case 116:
    5589 
    5590 /* Line 1806 of yacc.c  */
    5591 #line 616 "parser.yy"
     5016#line 616 "parser.yy" /* yacc.c:1646  */
    55925017    { (yyval.op) = OperKinds::ERAssn; }
     5018#line 5019 "Parser/parser.cc" /* yacc.c:1646  */
    55935019    break;
    55945020
    55955021  case 117:
    5596 
    5597 /* Line 1806 of yacc.c  */
    5598 #line 617 "parser.yy"
     5022#line 617 "parser.yy" /* yacc.c:1646  */
    55995023    { (yyval.op) = OperKinds::OrAssn; }
     5024#line 5025 "Parser/parser.cc" /* yacc.c:1646  */
    56005025    break;
    56015026
    56025027  case 118:
    5603 
    5604 /* Line 1806 of yacc.c  */
    5605 #line 624 "parser.yy"
     5028#line 624 "parser.yy" /* yacc.c:1646  */
    56065029    { (yyval.en) = new ExpressionNode( build_tuple() ); }
     5030#line 5031 "Parser/parser.cc" /* yacc.c:1646  */
    56075031    break;
    56085032
    56095033  case 119:
    5610 
    5611 /* Line 1806 of yacc.c  */
    5612 #line 626 "parser.yy"
    5613     { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     5034#line 626 "parser.yy" /* yacc.c:1646  */
     5035    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[-2].en) ) ); }
     5036#line 5037 "Parser/parser.cc" /* yacc.c:1646  */
    56145037    break;
    56155038
    56165039  case 120:
    5617 
    5618 /* Line 1806 of yacc.c  */
    5619 #line 628 "parser.yy"
    5620     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     5040#line 628 "parser.yy" /* yacc.c:1646  */
     5041    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[-2].en) ) ) ); }
     5042#line 5043 "Parser/parser.cc" /* yacc.c:1646  */
    56215043    break;
    56225044
    56235045  case 121:
    5624 
    5625 /* Line 1806 of yacc.c  */
    5626 #line 630 "parser.yy"
    5627     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     5046#line 630 "parser.yy" /* yacc.c:1646  */
     5047    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[-4].en)->set_last( (yyvsp[-2].en) ) ) ); }
     5048#line 5049 "Parser/parser.cc" /* yacc.c:1646  */
    56285049    break;
    56295050
    56305051  case 123:
    5631 
    5632 /* Line 1806 of yacc.c  */
    5633 #line 636 "parser.yy"
    5634     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     5052#line 636 "parser.yy" /* yacc.c:1646  */
     5053    { (yyval.en) = (ExpressionNode *)(yyvsp[-2].en)->set_last( (yyvsp[0].en) ); }
     5054#line 5055 "Parser/parser.cc" /* yacc.c:1646  */
    56355055    break;
    56365056
    56375057  case 125:
    5638 
    5639 /* Line 1806 of yacc.c  */
    5640 #line 642 "parser.yy"
    5641     { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     5058#line 642 "parser.yy" /* yacc.c:1646  */
     5059    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     5060#line 5061 "Parser/parser.cc" /* yacc.c:1646  */
    56425061    break;
    56435062
    56445063  case 126:
    5645 
    5646 /* Line 1806 of yacc.c  */
    5647 #line 647 "parser.yy"
     5064#line 647 "parser.yy" /* yacc.c:1646  */
    56485065    { (yyval.en) = 0; }
     5066#line 5067 "Parser/parser.cc" /* yacc.c:1646  */
    56495067    break;
    56505068
    56515069  case 130:
    5652 
    5653 /* Line 1806 of yacc.c  */
    5654 #line 656 "parser.yy"
    5655     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     5070#line 656 "parser.yy" /* yacc.c:1646  */
     5071    { (yyval.sn) = (yyvsp[0].sn); }
     5072#line 5073 "Parser/parser.cc" /* yacc.c:1646  */
    56565073    break;
    56575074
    56585075  case 136:
    5659 
    5660 /* Line 1806 of yacc.c  */
    5661 #line 663 "parser.yy"
     5076#line 663 "parser.yy" /* yacc.c:1646  */
    56625077    {
    56635078                        Token fn;
    56645079                        fn.str = new std::string( "^?{}" ); // location undefined
    5665                         (yyval.sn) = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_last( (yyvsp[(4) - (6)].en) ) ) ) ) );
     5080                        (yyval.sn) = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[-4].en) )->set_last( (yyvsp[-2].en) ) ) ) ) );
    56665081                }
     5082#line 5083 "Parser/parser.cc" /* yacc.c:1646  */
    56675083    break;
    56685084
    56695085  case 137:
    5670 
    5671 /* Line 1806 of yacc.c  */
    5672 #line 673 "parser.yy"
    5673     {
    5674                         (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     5086#line 673 "parser.yy" /* yacc.c:1646  */
     5087    {
     5088                        (yyval.sn) = (yyvsp[0].sn)->add_label( (yyvsp[-3].tok) );
    56755089                }
     5090#line 5091 "Parser/parser.cc" /* yacc.c:1646  */
    56765091    break;
    56775092
    56785093  case 138:
    5679 
    5680 /* Line 1806 of yacc.c  */
    5681 #line 680 "parser.yy"
     5094#line 680 "parser.yy" /* yacc.c:1646  */
    56825095    { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     5096#line 5097 "Parser/parser.cc" /* yacc.c:1646  */
    56835097    break;
    56845098
    56855099  case 139:
    5686 
    5687 /* Line 1806 of yacc.c  */
    5688 #line 687 "parser.yy"
    5689     { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
     5100#line 687 "parser.yy" /* yacc.c:1646  */
     5101    { (yyval.sn) = new StatementNode( build_compound( (yyvsp[-2].sn) ) ); }
     5102#line 5103 "Parser/parser.cc" /* yacc.c:1646  */
    56905103    break;
    56915104
    56925105  case 141:
    5693 
    5694 /* Line 1806 of yacc.c  */
    5695 #line 693 "parser.yy"
    5696     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     5106#line 693 "parser.yy" /* yacc.c:1646  */
     5107    { if ( (yyvsp[-2].sn) != 0 ) { (yyvsp[-2].sn)->set_last( (yyvsp[0].sn) ); (yyval.sn) = (yyvsp[-2].sn); } }
     5108#line 5109 "Parser/parser.cc" /* yacc.c:1646  */
    56975109    break;
    56985110
    56995111  case 142:
    5700 
    5701 /* Line 1806 of yacc.c  */
    5702 #line 698 "parser.yy"
    5703     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     5112#line 698 "parser.yy" /* yacc.c:1646  */
     5113    { (yyval.sn) = new StatementNode( (yyvsp[0].decl) ); }
     5114#line 5115 "Parser/parser.cc" /* yacc.c:1646  */
    57045115    break;
    57055116
    57065117  case 143:
    5707 
    5708 /* Line 1806 of yacc.c  */
    5709 #line 700 "parser.yy"
     5118#line 700 "parser.yy" /* yacc.c:1646  */
    57105119    {   // mark all fields in list
    5711                         for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
     5120                        for ( DeclarationNode *iter = (yyvsp[0].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
    57125121                                iter->set_extension( true );
    5713                         (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
     5122                        (yyval.sn) = new StatementNode( (yyvsp[0].decl) );
    57145123                }
     5124#line 5125 "Parser/parser.cc" /* yacc.c:1646  */
    57155125    break;
    57165126
    57175127  case 144:
    5718 
    5719 /* Line 1806 of yacc.c  */
    5720 #line 706 "parser.yy"
    5721     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     5128#line 706 "parser.yy" /* yacc.c:1646  */
     5129    { (yyval.sn) = new StatementNode( (yyvsp[0].decl) ); }
     5130#line 5131 "Parser/parser.cc" /* yacc.c:1646  */
    57225131    break;
    57235132
    57245133  case 147:
    5725 
    5726 /* Line 1806 of yacc.c  */
    5727 #line 713 "parser.yy"
    5728     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     5134#line 713 "parser.yy" /* yacc.c:1646  */
     5135    { if ( (yyvsp[-1].sn) != 0 ) { (yyvsp[-1].sn)->set_last( (yyvsp[0].sn) ); (yyval.sn) = (yyvsp[-1].sn); } }
     5136#line 5137 "Parser/parser.cc" /* yacc.c:1646  */
    57295137    break;
    57305138
    57315139  case 148:
    5732 
    5733 /* Line 1806 of yacc.c  */
    5734 #line 718 "parser.yy"
    5735     { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     5140#line 718 "parser.yy" /* yacc.c:1646  */
     5141    { (yyval.sn) = new StatementNode( build_expr( (yyvsp[-1].en) ) ); }
     5142#line 5143 "Parser/parser.cc" /* yacc.c:1646  */
    57365143    break;
    57375144
    57385145  case 149:
    5739 
    5740 /* Line 1806 of yacc.c  */
    5741 #line 724 "parser.yy"
    5742     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     5146#line 724 "parser.yy" /* yacc.c:1646  */
     5147    { (yyval.sn) = new StatementNode( build_if( (yyvsp[-2].en), (yyvsp[0].sn), nullptr ) ); }
     5148#line 5149 "Parser/parser.cc" /* yacc.c:1646  */
    57435149    break;
    57445150
    57455151  case 150:
    5746 
    5747 /* Line 1806 of yacc.c  */
    5748 #line 726 "parser.yy"
    5749     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     5152#line 726 "parser.yy" /* yacc.c:1646  */
     5153    { (yyval.sn) = new StatementNode( build_if( (yyvsp[-4].en), (yyvsp[-2].sn), (yyvsp[0].sn) ) ); }
     5154#line 5155 "Parser/parser.cc" /* yacc.c:1646  */
    57505155    break;
    57515156
    57525157  case 151:
    5753 
    5754 /* Line 1806 of yacc.c  */
    5755 #line 728 "parser.yy"
    5756     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     5158#line 728 "parser.yy" /* yacc.c:1646  */
     5159    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[-2].en), (yyvsp[0].sn) ) ); }
     5160#line 5161 "Parser/parser.cc" /* yacc.c:1646  */
    57575161    break;
    57585162
    57595163  case 152:
    5760 
    5761 /* Line 1806 of yacc.c  */
    5762 #line 730 "parser.yy"
    5763     {
    5764                         StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
     5164#line 730 "parser.yy" /* yacc.c:1646  */
     5165    {
     5166                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[-6].en), (yyvsp[-1].sn) ) );
    57655167                        // The semantics of the declaration list is changed to include associated initialization, which is performed
    57665168                        // *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
     
    57685170                        // therefore, are removed from the grammar even though C allows it. The change also applies to choose
    57695171                        // statement.
    5770                         (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
     5172                        (yyval.sn) = (yyvsp[-2].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[-2].decl) ))->set_last( sw )) ) ) : sw;
    57715173                }
     5174#line 5175 "Parser/parser.cc" /* yacc.c:1646  */
    57725175    break;
    57735176
    57745177  case 153:
    5775 
    5776 /* Line 1806 of yacc.c  */
    5777 #line 740 "parser.yy"
    5778     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     5178#line 740 "parser.yy" /* yacc.c:1646  */
     5179    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[-2].en), (yyvsp[0].sn) ) ); }
     5180#line 5181 "Parser/parser.cc" /* yacc.c:1646  */
    57795181    break;
    57805182
    57815183  case 154:
    5782 
    5783 /* Line 1806 of yacc.c  */
    5784 #line 742 "parser.yy"
    5785     {
    5786                         StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
    5787                         (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
     5184#line 742 "parser.yy" /* yacc.c:1646  */
     5185    {
     5186                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[-6].en), (yyvsp[-1].sn) ) );
     5187                        (yyval.sn) = (yyvsp[-2].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[-2].decl) ))->set_last( sw )) ) ) : sw;
    57885188                }
     5189#line 5190 "Parser/parser.cc" /* yacc.c:1646  */
    57895190    break;
    57905191
    57915192  case 155:
    5792 
    5793 /* Line 1806 of yacc.c  */
    5794 #line 752 "parser.yy"
    5795     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     5193#line 752 "parser.yy" /* yacc.c:1646  */
     5194    { (yyval.en) = (yyvsp[0].en); }
     5195#line 5196 "Parser/parser.cc" /* yacc.c:1646  */
    57965196    break;
    57975197
    57985198  case 156:
    5799 
    5800 /* Line 1806 of yacc.c  */
    5801 #line 754 "parser.yy"
    5802     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     5199#line 754 "parser.yy" /* yacc.c:1646  */
     5200    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[-2].en), (yyvsp[0].en) ) ); }
     5201#line 5202 "Parser/parser.cc" /* yacc.c:1646  */
    58035202    break;
    58045203
    58055204  case 158:
    5806 
    5807 /* Line 1806 of yacc.c  */
    5808 #line 759 "parser.yy"
    5809     { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
     5205#line 759 "parser.yy" /* yacc.c:1646  */
     5206    { (yyval.sn) = new StatementNode( build_case( (yyvsp[0].en) ) ); }
     5207#line 5208 "Parser/parser.cc" /* yacc.c:1646  */
    58105208    break;
    58115209
    58125210  case 159:
    5813 
    5814 /* Line 1806 of yacc.c  */
    5815 #line 761 "parser.yy"
    5816     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     5211#line 761 "parser.yy" /* yacc.c:1646  */
     5212    { (yyval.sn) = (StatementNode *)((yyvsp[-2].sn)->set_last( new StatementNode( build_case( (yyvsp[0].en) ) ) ) ); }
     5213#line 5214 "Parser/parser.cc" /* yacc.c:1646  */
    58175214    break;
    58185215
    58195216  case 160:
    5820 
    5821 /* Line 1806 of yacc.c  */
    5822 #line 765 "parser.yy"
    5823     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     5217#line 765 "parser.yy" /* yacc.c:1646  */
     5218    { (yyval.sn) = (yyvsp[-1].sn); }
     5219#line 5220 "Parser/parser.cc" /* yacc.c:1646  */
    58245220    break;
    58255221
    58265222  case 161:
    5827 
    5828 /* Line 1806 of yacc.c  */
    5829 #line 766 "parser.yy"
     5223#line 766 "parser.yy" /* yacc.c:1646  */
    58305224    { (yyval.sn) = new StatementNode( build_default() ); }
     5225#line 5226 "Parser/parser.cc" /* yacc.c:1646  */
    58315226    break;
    58325227
    58335228  case 163:
    5834 
    5835 /* Line 1806 of yacc.c  */
    5836 #line 772 "parser.yy"
    5837     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
     5229#line 772 "parser.yy" /* yacc.c:1646  */
     5230    { (yyval.sn) = (StatementNode *)( (yyvsp[-1].sn)->set_last( (yyvsp[0].sn) )); }
     5231#line 5232 "Parser/parser.cc" /* yacc.c:1646  */
    58385232    break;
    58395233
    58405234  case 164:
    5841 
    5842 /* Line 1806 of yacc.c  */
    5843 #line 776 "parser.yy"
    5844     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     5235#line 776 "parser.yy" /* yacc.c:1646  */
     5236    { (yyval.sn) = (yyvsp[-1].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[0].sn) ) ) ); }
     5237#line 5238 "Parser/parser.cc" /* yacc.c:1646  */
    58455238    break;
    58465239
    58475240  case 165:
    5848 
    5849 /* Line 1806 of yacc.c  */
    5850 #line 781 "parser.yy"
     5241#line 781 "parser.yy" /* yacc.c:1646  */
    58515242    { (yyval.sn) = 0; }
     5243#line 5244 "Parser/parser.cc" /* yacc.c:1646  */
    58525244    break;
    58535245
    58545246  case 167:
    5855 
    5856 /* Line 1806 of yacc.c  */
    5857 #line 787 "parser.yy"
    5858     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     5247#line 787 "parser.yy" /* yacc.c:1646  */
     5248    { (yyval.sn) = (yyvsp[-1].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[0].sn) ) ) ); }
     5249#line 5250 "Parser/parser.cc" /* yacc.c:1646  */
    58595250    break;
    58605251
    58615252  case 168:
    5862 
    5863 /* Line 1806 of yacc.c  */
    5864 #line 789 "parser.yy"
    5865     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
     5253#line 789 "parser.yy" /* yacc.c:1646  */
     5254    { (yyval.sn) = (StatementNode *)( (yyvsp[-2].sn)->set_last( (yyvsp[-1].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[0].sn) ) ) ) ) ); }
     5255#line 5256 "Parser/parser.cc" /* yacc.c:1646  */
    58665256    break;
    58675257
    58685258  case 169:
    5869 
    5870 /* Line 1806 of yacc.c  */
    5871 #line 794 "parser.yy"
     5259#line 794 "parser.yy" /* yacc.c:1646  */
    58725260    { (yyval.sn) = 0; }
     5261#line 5262 "Parser/parser.cc" /* yacc.c:1646  */
    58735262    break;
    58745263
    58755264  case 171:
    5876 
    5877 /* Line 1806 of yacc.c  */
    5878 #line 800 "parser.yy"
    5879     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     5265#line 800 "parser.yy" /* yacc.c:1646  */
     5266    { (yyval.sn) = (yyvsp[-1].sn)->append_last_case( (yyvsp[0].sn) ); }
     5267#line 5268 "Parser/parser.cc" /* yacc.c:1646  */
    58805268    break;
    58815269
    58825270  case 172:
    5883 
    5884 /* Line 1806 of yacc.c  */
    5885 #line 802 "parser.yy"
    5886     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     5271#line 802 "parser.yy" /* yacc.c:1646  */
     5272    { (yyval.sn) = (yyvsp[-2].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[-1].sn)->set_last( (yyvsp[0].sn) ) ) ) ); }
     5273#line 5274 "Parser/parser.cc" /* yacc.c:1646  */
    58875274    break;
    58885275
    58895276  case 173:
    5890 
    5891 /* Line 1806 of yacc.c  */
    5892 #line 804 "parser.yy"
    5893     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     5277#line 804 "parser.yy" /* yacc.c:1646  */
     5278    { (yyval.sn) = (StatementNode *)( (yyvsp[-2].sn)->set_last( (yyvsp[-1].sn)->append_last_case( (yyvsp[0].sn) ))); }
     5279#line 5280 "Parser/parser.cc" /* yacc.c:1646  */
    58945280    break;
    58955281
    58965282  case 174:
    5897 
    5898 /* Line 1806 of yacc.c  */
    5899 #line 806 "parser.yy"
    5900     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     5283#line 806 "parser.yy" /* yacc.c:1646  */
     5284    { (yyval.sn) = (StatementNode *)( (yyvsp[-3].sn)->set_last( (yyvsp[-2].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[-1].sn)->set_last( (yyvsp[0].sn) ) ) ) ) ) ); }
     5285#line 5286 "Parser/parser.cc" /* yacc.c:1646  */
    59015286    break;
    59025287
    59035288  case 175:
    5904 
    5905 /* Line 1806 of yacc.c  */
    5906 #line 811 "parser.yy"
     5289#line 811 "parser.yy" /* yacc.c:1646  */
    59075290    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
     5291#line 5292 "Parser/parser.cc" /* yacc.c:1646  */
    59085292    break;
    59095293
    59105294  case 177:
    5911 
    5912 /* Line 1806 of yacc.c  */
    5913 #line 817 "parser.yy"
     5295#line 817 "parser.yy" /* yacc.c:1646  */
    59145296    { (yyval.sn) = 0; }
     5297#line 5298 "Parser/parser.cc" /* yacc.c:1646  */
    59155298    break;
    59165299
    59175300  case 178:
    5918 
    5919 /* Line 1806 of yacc.c  */
    5920 #line 819 "parser.yy"
     5301#line 819 "parser.yy" /* yacc.c:1646  */
    59215302    { (yyval.sn) = 0; }
     5303#line 5304 "Parser/parser.cc" /* yacc.c:1646  */
    59225304    break;
    59235305
    59245306  case 179:
    5925 
    5926 /* Line 1806 of yacc.c  */
    5927 #line 824 "parser.yy"
    5928     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     5307#line 824 "parser.yy" /* yacc.c:1646  */
     5308    { (yyval.sn) = new StatementNode( build_while( (yyvsp[-2].en), (yyvsp[0].sn) ) ); }
     5309#line 5310 "Parser/parser.cc" /* yacc.c:1646  */
    59295310    break;
    59305311
    59315312  case 180:
    5932 
    5933 /* Line 1806 of yacc.c  */
    5934 #line 826 "parser.yy"
    5935     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
     5313#line 826 "parser.yy" /* yacc.c:1646  */
     5314    { (yyval.sn) = new StatementNode( build_while( (yyvsp[-2].en), (yyvsp[-5].sn) ) ); }
     5315#line 5316 "Parser/parser.cc" /* yacc.c:1646  */
    59365316    break;
    59375317
    59385318  case 181:
    5939 
    5940 /* Line 1806 of yacc.c  */
    5941 #line 828 "parser.yy"
    5942     { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     5319#line 828 "parser.yy" /* yacc.c:1646  */
     5320    { (yyval.sn) = new StatementNode( build_for( (yyvsp[-2].fctl), (yyvsp[0].sn) ) ); }
     5321#line 5322 "Parser/parser.cc" /* yacc.c:1646  */
    59435322    break;
    59445323
    59455324  case 182:
    5946 
    5947 /* Line 1806 of yacc.c  */
    5948 #line 833 "parser.yy"
    5949     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     5325#line 833 "parser.yy" /* yacc.c:1646  */
     5326    { (yyval.fctl) = new ForCtl( (yyvsp[-5].en), (yyvsp[-2].en), (yyvsp[0].en) ); }
     5327#line 5328 "Parser/parser.cc" /* yacc.c:1646  */
    59505328    break;
    59515329
    59525330  case 183:
    5953 
    5954 /* Line 1806 of yacc.c  */
    5955 #line 835 "parser.yy"
    5956     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     5331#line 835 "parser.yy" /* yacc.c:1646  */
     5332    { (yyval.fctl) = new ForCtl( (yyvsp[-3].decl), (yyvsp[-2].en), (yyvsp[0].en) ); }
     5333#line 5334 "Parser/parser.cc" /* yacc.c:1646  */
    59575334    break;
    59585335
    59595336  case 184:
    5960 
    5961 /* Line 1806 of yacc.c  */
    5962 #line 840 "parser.yy"
    5963     { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     5337#line 840 "parser.yy" /* yacc.c:1646  */
     5338    { (yyval.sn) = new StatementNode( build_branch( assign_strptr((yyvsp[-1].tok)), BranchStmt::Goto ) ); }
     5339#line 5340 "Parser/parser.cc" /* yacc.c:1646  */
    59645340    break;
    59655341
    59665342  case 185:
    5967 
    5968 /* Line 1806 of yacc.c  */
    5969 #line 844 "parser.yy"
    5970     { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     5343#line 844 "parser.yy" /* yacc.c:1646  */
     5344    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[-1].en) ) ); }
     5345#line 5346 "Parser/parser.cc" /* yacc.c:1646  */
    59715346    break;
    59725347
    59735348  case 186:
    5974 
    5975 /* Line 1806 of yacc.c  */
    5976 #line 847 "parser.yy"
     5349#line 847 "parser.yy" /* yacc.c:1646  */
    59775350    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Continue ) ); }
     5351#line 5352 "Parser/parser.cc" /* yacc.c:1646  */
    59785352    break;
    59795353
    59805354  case 187:
    5981 
    5982 /* Line 1806 of yacc.c  */
    5983 #line 851 "parser.yy"
    5984     { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); }
     5355#line 851 "parser.yy" /* yacc.c:1646  */
     5356    { (yyval.sn) = new StatementNode( build_branch( assign_strptr((yyvsp[-1].tok)), BranchStmt::Continue ) ); }
     5357#line 5358 "Parser/parser.cc" /* yacc.c:1646  */
    59855358    break;
    59865359
    59875360  case 188:
    5988 
    5989 /* Line 1806 of yacc.c  */
    5990 #line 854 "parser.yy"
     5361#line 854 "parser.yy" /* yacc.c:1646  */
    59915362    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
     5363#line 5364 "Parser/parser.cc" /* yacc.c:1646  */
    59925364    break;
    59935365
    59945366  case 189:
    5995 
    5996 /* Line 1806 of yacc.c  */
    5997 #line 858 "parser.yy"
    5998     { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
     5367#line 858 "parser.yy" /* yacc.c:1646  */
     5368    { (yyval.sn) = new StatementNode( build_branch( assign_strptr((yyvsp[-1].tok)), BranchStmt::Break ) ); }
     5369#line 5370 "Parser/parser.cc" /* yacc.c:1646  */
    59995370    break;
    60005371
    60015372  case 190:
    6002 
    6003 /* Line 1806 of yacc.c  */
    6004 #line 860 "parser.yy"
    6005     { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
     5373#line 860 "parser.yy" /* yacc.c:1646  */
     5374    { (yyval.sn) = new StatementNode( build_return( (yyvsp[-1].en) ) ); }
     5375#line 5376 "Parser/parser.cc" /* yacc.c:1646  */
    60065376    break;
    60075377
    60085378  case 191:
    6009 
    6010 /* Line 1806 of yacc.c  */
    6011 #line 862 "parser.yy"
    6012     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     5379#line 862 "parser.yy" /* yacc.c:1646  */
     5380    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[-1].en) ) ); }
     5381#line 5382 "Parser/parser.cc" /* yacc.c:1646  */
    60135382    break;
    60145383
    60155384  case 192:
    6016 
    6017 /* Line 1806 of yacc.c  */
    6018 #line 864 "parser.yy"
    6019     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     5385#line 864 "parser.yy" /* yacc.c:1646  */
     5386    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[-1].en) ) ); }
     5387#line 5388 "Parser/parser.cc" /* yacc.c:1646  */
    60205388    break;
    60215389
    60225390  case 193:
    6023 
    6024 /* Line 1806 of yacc.c  */
    6025 #line 866 "parser.yy"
    6026     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     5391#line 866 "parser.yy" /* yacc.c:1646  */
     5392    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[-3].en) ) ); }
     5393#line 5394 "Parser/parser.cc" /* yacc.c:1646  */
    60275394    break;
    60285395
    60295396  case 194:
    6030 
    6031 /* Line 1806 of yacc.c  */
    6032 #line 871 "parser.yy"
    6033     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
     5397#line 871 "parser.yy" /* yacc.c:1646  */
     5398    { (yyval.sn) = new StatementNode( build_try( (yyvsp[-1].sn), (yyvsp[0].sn), 0 ) ); }
     5399#line 5400 "Parser/parser.cc" /* yacc.c:1646  */
    60345400    break;
    60355401
    60365402  case 195:
    6037 
    6038 /* Line 1806 of yacc.c  */
    6039 #line 873 "parser.yy"
    6040     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
     5403#line 873 "parser.yy" /* yacc.c:1646  */
     5404    { (yyval.sn) = new StatementNode( build_try( (yyvsp[-1].sn), 0, (yyvsp[0].sn) ) ); }
     5405#line 5406 "Parser/parser.cc" /* yacc.c:1646  */
    60415406    break;
    60425407
    60435408  case 196:
    6044 
    6045 /* Line 1806 of yacc.c  */
    6046 #line 875 "parser.yy"
    6047     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
     5409#line 875 "parser.yy" /* yacc.c:1646  */
     5410    { (yyval.sn) = new StatementNode( build_try( (yyvsp[-2].sn), (yyvsp[-1].sn), (yyvsp[0].sn) ) ); }
     5411#line 5412 "Parser/parser.cc" /* yacc.c:1646  */
    60485412    break;
    60495413
    60505414  case 198:
    6051 
    6052 /* Line 1806 of yacc.c  */
    6053 #line 882 "parser.yy"
    6054     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     5415#line 882 "parser.yy" /* yacc.c:1646  */
     5416    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[0].sn), true ) ); }
     5417#line 5418 "Parser/parser.cc" /* yacc.c:1646  */
    60555418    break;
    60565419
    60575420  case 199:
    6058 
    6059 /* Line 1806 of yacc.c  */
    6060 #line 884 "parser.yy"
    6061     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     5421#line 884 "parser.yy" /* yacc.c:1646  */
     5422    { (yyval.sn) = (StatementNode *)(yyvsp[-5].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[0].sn), true ) ) ); }
     5423#line 5424 "Parser/parser.cc" /* yacc.c:1646  */
    60625424    break;
    60635425
    60645426  case 200:
    6065 
    6066 /* Line 1806 of yacc.c  */
    6067 #line 886 "parser.yy"
    6068     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     5427#line 886 "parser.yy" /* yacc.c:1646  */
     5428    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[0].sn), true ) ); }
     5429#line 5430 "Parser/parser.cc" /* yacc.c:1646  */
    60695430    break;
    60705431
    60715432  case 201:
    6072 
    6073 /* Line 1806 of yacc.c  */
    6074 #line 888 "parser.yy"
    6075     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     5433#line 888 "parser.yy" /* yacc.c:1646  */
     5434    { (yyval.sn) = (StatementNode *)(yyvsp[-5].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[0].sn), true ) ) ); }
     5435#line 5436 "Parser/parser.cc" /* yacc.c:1646  */
    60765436    break;
    60775437
    60785438  case 202:
    6079 
    6080 /* Line 1806 of yacc.c  */
    6081 #line 893 "parser.yy"
    6082     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     5439#line 893 "parser.yy" /* yacc.c:1646  */
     5440    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[-4].decl), (yyvsp[-1].sn) ) ); }
     5441#line 5442 "Parser/parser.cc" /* yacc.c:1646  */
    60835442    break;
    60845443
    60855444  case 203:
    6086 
    6087 /* Line 1806 of yacc.c  */
    6088 #line 895 "parser.yy"
    6089     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     5445#line 895 "parser.yy" /* yacc.c:1646  */
     5446    { (yyval.sn) = (StatementNode *)(yyvsp[-9].sn)->set_last( new StatementNode( build_catch( (yyvsp[-4].decl), (yyvsp[-1].sn) ) ) ); }
     5447#line 5448 "Parser/parser.cc" /* yacc.c:1646  */
    60905448    break;
    60915449
    60925450  case 204:
    6093 
    6094 /* Line 1806 of yacc.c  */
    6095 #line 897 "parser.yy"
    6096     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     5451#line 897 "parser.yy" /* yacc.c:1646  */
     5452    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[-4].decl), (yyvsp[-1].sn) ) ); }
     5453#line 5454 "Parser/parser.cc" /* yacc.c:1646  */
    60975454    break;
    60985455
    60995456  case 205:
    6100 
    6101 /* Line 1806 of yacc.c  */
    6102 #line 899 "parser.yy"
    6103     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     5457#line 899 "parser.yy" /* yacc.c:1646  */
     5458    { (yyval.sn) = (StatementNode *)(yyvsp[-9].sn)->set_last( new StatementNode( build_catch( (yyvsp[-4].decl), (yyvsp[-1].sn) ) ) ); }
     5459#line 5460 "Parser/parser.cc" /* yacc.c:1646  */
    61045460    break;
    61055461
    61065462  case 206:
    6107 
    6108 /* Line 1806 of yacc.c  */
    6109 #line 904 "parser.yy"
    6110     {
    6111                         (yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
     5463#line 904 "parser.yy" /* yacc.c:1646  */
     5464    {
     5465                        (yyval.sn) = new StatementNode( build_finally( (yyvsp[0].sn) ) );
    61125466                }
     5467#line 5468 "Parser/parser.cc" /* yacc.c:1646  */
    61135468    break;
    61145469
    61155470  case 208:
    6116 
    6117 /* Line 1806 of yacc.c  */
    6118 #line 917 "parser.yy"
     5471#line 917 "parser.yy" /* yacc.c:1646  */
    61195472    {
    61205473                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6121                         (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) );
     5474                        (yyval.decl) = (yyvsp[0].decl)->addType( (yyvsp[-1].decl) );
    61225475                }
     5476#line 5477 "Parser/parser.cc" /* yacc.c:1646  */
    61235477    break;
    61245478
    61255479  case 209:
    6126 
    6127 /* Line 1806 of yacc.c  */
    6128 #line 922 "parser.yy"
    6129     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     5480#line 922 "parser.yy" /* yacc.c:1646  */
     5481    { (yyval.decl) = (yyvsp[0].decl)->addType( (yyvsp[-1].decl) ); }
     5482#line 5483 "Parser/parser.cc" /* yacc.c:1646  */
    61305483    break;
    61315484
    61325485  case 210:
    6133 
    6134 /* Line 1806 of yacc.c  */
    6135 #line 924 "parser.yy"
     5486#line 924 "parser.yy" /* yacc.c:1646  */
    61365487    {
    61375488                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6138                         (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) );
     5489                        (yyval.decl) = (yyvsp[-1].decl)->addName( (yyvsp[0].tok) );
    61395490                }
     5491#line 5492 "Parser/parser.cc" /* yacc.c:1646  */
    61405492    break;
    61415493
    61425494  case 212:
    6143 
    6144 /* Line 1806 of yacc.c  */
    6145 #line 933 "parser.yy"
    6146     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
     5495#line 933 "parser.yy" /* yacc.c:1646  */
     5496    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[-4].flag), (yyvsp[-2].constant), 0 ) ); }
     5497#line 5498 "Parser/parser.cc" /* yacc.c:1646  */
    61475498    break;
    61485499
    61495500  case 213:
    6150 
    6151 /* Line 1806 of yacc.c  */
    6152 #line 935 "parser.yy"
    6153     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
     5501#line 935 "parser.yy" /* yacc.c:1646  */
     5502    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[-6].flag), (yyvsp[-4].constant), (yyvsp[-2].en) ) ); }
     5503#line 5504 "Parser/parser.cc" /* yacc.c:1646  */
    61545504    break;
    61555505
    61565506  case 214:
    6157 
    6158 /* Line 1806 of yacc.c  */
    6159 #line 937 "parser.yy"
    6160     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
     5507#line 937 "parser.yy" /* yacc.c:1646  */
     5508    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[-8].flag), (yyvsp[-6].constant), (yyvsp[-4].en), (yyvsp[-2].en) ) ); }
     5509#line 5510 "Parser/parser.cc" /* yacc.c:1646  */
    61615510    break;
    61625511
    61635512  case 215:
    6164 
    6165 /* Line 1806 of yacc.c  */
    6166 #line 939 "parser.yy"
    6167     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
     5513#line 939 "parser.yy" /* yacc.c:1646  */
     5514    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[-10].flag), (yyvsp[-8].constant), (yyvsp[-6].en), (yyvsp[-4].en), (yyvsp[-2].en) ) ); }
     5515#line 5516 "Parser/parser.cc" /* yacc.c:1646  */
    61685516    break;
    61695517
    61705518  case 216:
    6171 
    6172 /* Line 1806 of yacc.c  */
    6173 #line 941 "parser.yy"
    6174     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
     5519#line 941 "parser.yy" /* yacc.c:1646  */
     5520    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[-12].flag), (yyvsp[-9].constant), 0, (yyvsp[-6].en), (yyvsp[-4].en), (yyvsp[-2].label) ) ); }
     5521#line 5522 "Parser/parser.cc" /* yacc.c:1646  */
    61755522    break;
    61765523
    61775524  case 217:
    6178 
    6179 /* Line 1806 of yacc.c  */
    6180 #line 946 "parser.yy"
     5525#line 946 "parser.yy" /* yacc.c:1646  */
    61815526    { (yyval.flag) = false; }
     5527#line 5528 "Parser/parser.cc" /* yacc.c:1646  */
    61825528    break;
    61835529
    61845530  case 218:
    6185 
    6186 /* Line 1806 of yacc.c  */
    6187 #line 948 "parser.yy"
     5531#line 948 "parser.yy" /* yacc.c:1646  */
    61885532    { (yyval.flag) = true; }
     5533#line 5534 "Parser/parser.cc" /* yacc.c:1646  */
    61895534    break;
    61905535
    61915536  case 219:
    6192 
    6193 /* Line 1806 of yacc.c  */
    6194 #line 953 "parser.yy"
     5537#line 953 "parser.yy" /* yacc.c:1646  */
    61955538    { (yyval.en) = 0; }
     5539#line 5540 "Parser/parser.cc" /* yacc.c:1646  */
    61965540    break;
    61975541
    61985542  case 222:
    6199 
    6200 /* Line 1806 of yacc.c  */
    6201 #line 960 "parser.yy"
    6202     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     5543#line 960 "parser.yy" /* yacc.c:1646  */
     5544    { (yyval.en) = (ExpressionNode *)(yyvsp[-2].en)->set_last( (yyvsp[0].en) ); }
     5545#line 5546 "Parser/parser.cc" /* yacc.c:1646  */
    62035546    break;
    62045547
    62055548  case 223:
    6206 
    6207 /* Line 1806 of yacc.c  */
    6208 #line 965 "parser.yy"
    6209     { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     5549#line 965 "parser.yy" /* yacc.c:1646  */
     5550    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[-3].constant), (yyvsp[-1].en) ) ); }
     5551#line 5552 "Parser/parser.cc" /* yacc.c:1646  */
    62105552    break;
    62115553
    62125554  case 224:
    6213 
    6214 /* Line 1806 of yacc.c  */
    6215 #line 967 "parser.yy"
    6216     { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     5555#line 967 "parser.yy" /* yacc.c:1646  */
     5556    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[-5].en), (yyvsp[-3].constant), (yyvsp[-1].en) ) ); }
     5557#line 5558 "Parser/parser.cc" /* yacc.c:1646  */
    62175558    break;
    62185559
    62195560  case 225:
    6220 
    6221 /* Line 1806 of yacc.c  */
    6222 #line 972 "parser.yy"
     5561#line 972 "parser.yy" /* yacc.c:1646  */
    62235562    { (yyval.en) = 0; }
     5563#line 5564 "Parser/parser.cc" /* yacc.c:1646  */
    62245564    break;
    62255565
    62265566  case 226:
    6227 
    6228 /* Line 1806 of yacc.c  */
    6229 #line 974 "parser.yy"
    6230     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     5567#line 974 "parser.yy" /* yacc.c:1646  */
     5568    { (yyval.en) = new ExpressionNode( (yyvsp[0].constant) ); }
     5569#line 5570 "Parser/parser.cc" /* yacc.c:1646  */
    62315570    break;
    62325571
    62335572  case 227:
    6234 
    6235 /* Line 1806 of yacc.c  */
    6236 #line 976 "parser.yy"
    6237     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     5573#line 976 "parser.yy" /* yacc.c:1646  */
     5574    { (yyval.en) = (ExpressionNode *)(yyvsp[-2].en)->set_last( new ExpressionNode( (yyvsp[0].constant) ) ); }
     5575#line 5576 "Parser/parser.cc" /* yacc.c:1646  */
    62385576    break;
    62395577
    62405578  case 228:
    6241 
    6242 /* Line 1806 of yacc.c  */
    6243 #line 981 "parser.yy"
    6244     { (yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) ); }
     5579#line 981 "parser.yy" /* yacc.c:1646  */
     5580    { (yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( assign_strptr((yyvsp[0].tok)) ); }
     5581#line 5582 "Parser/parser.cc" /* yacc.c:1646  */
    62455582    break;
    62465583
    62475584  case 229:
    6248 
    6249 /* Line 1806 of yacc.c  */
    6250 #line 983 "parser.yy"
    6251     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) ); }
     5585#line 983 "parser.yy" /* yacc.c:1646  */
     5586    { (yyval.label) = (yyvsp[-2].label); (yyvsp[-2].label)->labels.push_back( assign_strptr((yyvsp[0].tok)) ); }
     5587#line 5588 "Parser/parser.cc" /* yacc.c:1646  */
    62525588    break;
    62535589
    62545590  case 230:
    6255 
    6256 /* Line 1806 of yacc.c  */
    6257 #line 990 "parser.yy"
     5591#line 990 "parser.yy" /* yacc.c:1646  */
    62585592    { (yyval.decl) = 0; }
     5593#line 5594 "Parser/parser.cc" /* yacc.c:1646  */
    62595594    break;
    62605595
    62615596  case 233:
    6262 
    6263 /* Line 1806 of yacc.c  */
    6264 #line 997 "parser.yy"
    6265     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     5597#line 997 "parser.yy" /* yacc.c:1646  */
     5598    { (yyval.decl) = (yyvsp[-2].decl)->appendList( (yyvsp[0].decl) ); }
     5599#line 5600 "Parser/parser.cc" /* yacc.c:1646  */
    62665600    break;
    62675601
    62685602  case 234:
    6269 
    6270 /* Line 1806 of yacc.c  */
    6271 #line 1002 "parser.yy"
     5603#line 1002 "parser.yy" /* yacc.c:1646  */
    62725604    { (yyval.decl) = 0; }
     5605#line 5606 "Parser/parser.cc" /* yacc.c:1646  */
    62735606    break;
    62745607
    62755608  case 237:
    6276 
    6277 /* Line 1806 of yacc.c  */
    6278 #line 1009 "parser.yy"
    6279     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     5609#line 1009 "parser.yy" /* yacc.c:1646  */
     5610    { (yyval.decl) = (yyvsp[-2].decl)->appendList( (yyvsp[0].decl) ); }
     5611#line 5612 "Parser/parser.cc" /* yacc.c:1646  */
    62805612    break;
    62815613
    62825614  case 242:
    6283 
    6284 /* Line 1806 of yacc.c  */
    6285 #line 1023 "parser.yy"
     5615#line 1023 "parser.yy" /* yacc.c:1646  */
    62865616    {}
     5617#line 5618 "Parser/parser.cc" /* yacc.c:1646  */
    62875618    break;
    62885619
    62895620  case 243:
    6290 
    6291 /* Line 1806 of yacc.c  */
    6292 #line 1024 "parser.yy"
     5621#line 1024 "parser.yy" /* yacc.c:1646  */
    62935622    {}
     5623#line 5624 "Parser/parser.cc" /* yacc.c:1646  */
    62945624    break;
    62955625
    62965626  case 251:
    6297 
    6298 /* Line 1806 of yacc.c  */
    6299 #line 1053 "parser.yy"
     5627#line 1053 "parser.yy" /* yacc.c:1646  */
    63005628    {
    63015629                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6302                         (yyval.decl) = (yyvsp[(1) - (2)].decl)->addInitializer( (yyvsp[(2) - (2)].in) );
     5630                        (yyval.decl) = (yyvsp[-1].decl)->addInitializer( (yyvsp[0].in) );
    63035631                }
     5632#line 5633 "Parser/parser.cc" /* yacc.c:1646  */
    63045633    break;
    63055634
    63065635  case 252:
    6307 
    6308 /* Line 1806 of yacc.c  */
    6309 #line 1060 "parser.yy"
     5636#line 1060 "parser.yy" /* yacc.c:1646  */
    63105637    {
    63115638                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6312                         (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].in) );;
     5639                        (yyval.decl) = (yyvsp[-1].decl)->addQualifiers( (yyvsp[-2].decl) )->addInitializer( (yyvsp[0].in) );;
    63135640                }
     5641#line 5642 "Parser/parser.cc" /* yacc.c:1646  */
    63145642    break;
    63155643
    63165644  case 253:
    6317 
    6318 /* Line 1806 of yacc.c  */
    6319 #line 1065 "parser.yy"
    6320     {
    6321                         typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
    6322                         (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) )->addInitializer( (yyvsp[(6) - (6)].in) ) );
     5645#line 1065 "parser.yy" /* yacc.c:1646  */
     5646    {
     5647                        typedefTable.addToEnclosingScope( *(yyvsp[-1].tok), TypedefTable::ID );
     5648                        (yyval.decl) = (yyvsp[-5].decl)->appendList( (yyvsp[-5].decl)->cloneType( (yyvsp[-1].tok) )->addInitializer( (yyvsp[0].in) ) );
    63235649                }
     5650#line 5651 "Parser/parser.cc" /* yacc.c:1646  */
    63245651    break;
    63255652
    63265653  case 254:
    6327 
    6328 /* Line 1806 of yacc.c  */
    6329 #line 1075 "parser.yy"
    6330     {
    6331                         typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
    6332                         (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
     5654#line 1075 "parser.yy" /* yacc.c:1646  */
     5655    {
     5656                        typedefTable.setNextIdentifier( *(yyvsp[-1].tok) );
     5657                        (yyval.decl) = (yyvsp[-2].decl)->addName( (yyvsp[-1].tok) );
    63335658                }
     5659#line 5660 "Parser/parser.cc" /* yacc.c:1646  */
    63345660    break;
    63355661
    63365662  case 255:
    6337 
    6338 /* Line 1806 of yacc.c  */
    6339 #line 1080 "parser.yy"
    6340     {
    6341                         typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
    6342                         (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
     5663#line 1080 "parser.yy" /* yacc.c:1646  */
     5664    {
     5665                        typedefTable.setNextIdentifier( *(yyvsp[-1].tok) );
     5666                        (yyval.decl) = (yyvsp[-2].decl)->addName( (yyvsp[-1].tok) );
    63435667                }
     5668#line 5669 "Parser/parser.cc" /* yacc.c:1646  */
    63445669    break;
    63455670
    63465671  case 256:
    6347 
    6348 /* Line 1806 of yacc.c  */
    6349 #line 1085 "parser.yy"
    6350     {
    6351                         typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
    6352                         (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(1) - (4)].decl) )->addName( (yyvsp[(3) - (4)].tok) );
     5672#line 1085 "parser.yy" /* yacc.c:1646  */
     5673    {
     5674                        typedefTable.setNextIdentifier( *(yyvsp[-1].tok) );
     5675                        (yyval.decl) = (yyvsp[-2].decl)->addQualifiers( (yyvsp[-3].decl) )->addName( (yyvsp[-1].tok) );
    63535676                }
     5677#line 5678 "Parser/parser.cc" /* yacc.c:1646  */
    63545678    break;
    63555679
    63565680  case 257:
    6357 
    6358 /* Line 1806 of yacc.c  */
    6359 #line 1093 "parser.yy"
     5681#line 1093 "parser.yy" /* yacc.c:1646  */
    63605682    {
    63615683                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6362                         (yyval.decl) = (yyvsp[(1) - (1)].decl);
     5684                        (yyval.decl) = (yyvsp[0].decl);
    63635685                }
     5686#line 5687 "Parser/parser.cc" /* yacc.c:1646  */
    63645687    break;
    63655688
    63665689  case 258:
    6367 
    6368 /* Line 1806 of yacc.c  */
    6369 #line 1098 "parser.yy"
     5690#line 1098 "parser.yy" /* yacc.c:1646  */
    63705691    {
    63715692                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6372                         (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );
     5693                        (yyval.decl) = (yyvsp[0].decl)->addQualifiers( (yyvsp[-1].decl) );
    63735694                }
     5695#line 5696 "Parser/parser.cc" /* yacc.c:1646  */
    63745696    break;
    63755697
    63765698  case 259:
    6377 
    6378 /* Line 1806 of yacc.c  */
    6379 #line 1103 "parser.yy"
     5699#line 1103 "parser.yy" /* yacc.c:1646  */
    63805700    {
    63815701                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6382                         (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );