Changeset 6066e32


Ignore:
Timestamp:
Jul 13, 2016, 11:14:01 AM (9 years ago)
Author:
Rob Schluntz <rschlunt@…>
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:
834d4fc
Parents:
7d5e243 (diff), ed9ecda (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 plg.uwaterloo.ca:/u/cforall/software/cfa/cfa-cc

Files:
1 added
2 deleted
39 edited

Legend:

Unmodified
Added
Removed
  • Jenkinsfile

    r7d5e243 r6066e32  
    22
    33//===========================================================================================================
    4 // Main compilation routine
     4// Main compilation routines
    55//===========================================================================================================
    66//Compilation script is done here but environnement set-up and error handling is done in main loop
     
    8383}
    8484
    85 def push_build() {
    86         //Don't use the build_stage function which outputs the compiler
    87         stage 'Push'
    88 
    89                 status_prefix = 'Push'
    90 
    91                 def out_dir = pwd tmp: true
    92                 sh "mkdir -p ${out_dir}"
    93 
    94                 //parse git logs to find what changed
    95                 sh "git remote > ${out_dir}/GIT_REMOTE"
    96                 git_remote = readFile("${out_dir}/GIT_REMOTE")
    97                 remoteDoLangExists = git_remote.contains("DoLang")
    98 
    99                 if( !remoteDoLangExists ) {
    100                         sh 'git remote add DoLang git@gitlab.do-lang.org:internal/cfa-cc.git'
    101                 }
    102 
    103                 sh "git push DoLang ${gitRefNewValue}:master"
    104 }
    105 
    10685//===========================================================================================================
    10786// Helper classes/variables/routines to make the status and stage name easier to use
     
    155134node ('master'){
    156135
    157         boolean doPromoteBuild2DoLang
     136        boolean bIsFullBuild
    158137        def err = null
    159138        def log_needed = false
     
    176155                                                  defaultValue: false,                                          \
    177156                                                  description: 'If true, the build will be promoted to the do-lang git repository (on successful builds only)', \
    178                                                   name: 'promoteBuild2DoLang'                                   \
     157                                                  name: 'isFullBuild'                                   \
    179158                                                ],                                                              \
    180159                                                [$class: 'ChoiceParameterDefinition',                           \
     
    186165                                        ]])
    187166
    188                                 doPromoteBuild2DoLang = promoteBuild2DoLang == 'true'
     167                                bIsFullBuild = isFullBuild == 'true'
    189168                                architectureFlag = buildArchitecture == '64-bit' ? '-m64' : (buildArchitecture == '32-bit' ? '-m32' : 'ERROR')
    190169
    191                                 echo "FULL BUILD = ${doPromoteBuild2DoLang}\nArchitecture = ${buildArchitecture} (flag ${architectureFlag})"
     170                                echo "FULL BUILD = ${isFullBuild}\nArchitecture = ${buildArchitecture} (flag ${architectureFlag})"
    192171
    193172                                //Compile using gcc-4.9
    194173                                currentCC = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9')
    195                                 cfa_build(doPromoteBuild2DoLang, architectureFlag)
     174                                cfa_build(bIsFullBuild, architectureFlag)
    196175
    197176                                //Compile latex documentation
    198177                                doc_build()
    199178
    200                                 if( doPromoteBuild2DoLang ) {
     179                                if( bIsFullBuild ) {
    201180                                        //Compile using gcc-5
    202181                                        currentCC = new CC_Desc('gcc-5', 'g++-5', 'gcc-5')
     
    206185                                        currentCC = new CC_Desc('gcc-6', 'g++-6', 'gcc-6')
    207186                                        cfa_build(true, architectureFlag)
    208 
    209                                         //Push latest changes to do-lang repo
    210                                         push_build()
    211187                                }
    212188                        }
     
    228204
    229205        finally {
    230                 //Send email with final results
    231                 notify_result(doPromoteBuild2DoLang, err, currentBuild.result, log_needed)
     206                echo 'Build Completed'
     207
     208                //Send email with final results if this is not a full build
     209                if( !bIsFullBuild ) {
     210                        echo 'Notifying users of result'
     211                        email(currentBuild.result, log_needed)
     212                }
    232213
    233214                /* Must re-throw exception to propagate error */
     
    241222//Routine responsible of sending the email notification once the build is completed
    242223//===========================================================================================================
    243 def notify_result(boolean promote, Exception err, String status, boolean log) {
    244         echo 'Build completed, sending result notification'
    245         if(promote)     {
    246                 if( err ) {
    247                         promote_email(status)
    248                 }
    249         }
    250         else {
    251                 email(status, log)
    252         }
    253 }
    254 
    255 //Email notification on a full build failure
    256 def promote_email(String status) {
    257         //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
    258         //Configurations for email format
    259         def email_subject = "[cforall git][PROMOTE - FAILURE]"
    260         def email_body = """This is an automated email from the Jenkins build machine. It was
    261 generated because of a git hooks/post-receive script following
    262 a ref change was pushed to the repository containing
    263 the project "UNNAMED PROJECT".
    264 
    265 Check console output at ${env.BUILD_URL} to view the results.
    266 
    267 - Status --------------------------------------------------------------
    268 
    269 PROMOTE FAILURE - ${status}
    270 """
    271 
    272         def email_to = "pabuhr@uwaterloo.ca, rschlunt@uwaterloo.ca, a3moss@uwaterloo.ca, tdelisle@uwaterloo.ca, brice.dobry@huawei.com"
    273 
    274         //send email notification
    275         emailext body: email_body, subject: email_subject, to: email_to, attachLog: true
    276 }
    277 
    278224//Standard build email notification
    279225def email(String status, boolean log) {
  • doc/LaTeXmacros/common.tex

    r7d5e243 r6066e32  
    1111%% Created On       : Sat Apr  9 10:06:17 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sun Jul 10 12:34:09 2016
    14 %% Update Count     : 205
     13%% Last Modified On : Tue Jul 12 20:37:57 2016
     14%% Update Count     : 206
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    238238\lstMakeShortInline©    % single-character for \lstinline
    239239
     240\let\Oldthebibliography\thebibliography
     241\renewcommand\thebibliography[1]{
     242  \Oldthebibliography{#1}
     243  \setlength{\parskip}{0pt}                     % reduce vertical spacing between references
     244  \setlength{\itemsep}{5pt plus 0.3ex}
     245}%
     246
    240247% Local Variables: %
    241248% tab-width: 4 %
  • doc/user/user.tex

    r7d5e243 r6066e32  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sun Jul 10 12:52:09 2016
    14 %% Update Count     : 1200
     13%% Last Modified On : Wed Jul 13 08:14:39 2016
     14%% Update Count     : 1247
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    294294\item
    295295\Indexc{-nodebug}\index{compilation option!-nodebug@©-nodebug©}
    296 The program is linked with the non-debugging version of the unikernel or multikernel, so the execution of the program is faster.
     296The program is linked with the non-debugging version of the runtime system, so the execution of the program is faster.
    297297\Emph{However, no runtime checks or ©assert©s are performed so errors usually result in abnormal program termination.}
    298298
     
    721721®&®crc = &cx;                                   §\C{// error, cannot change crc}§
    722722\end{lstlisting}
    723 Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be ©0© unless an arbitrary pointer is assigned to the reference}.
    724 In effect, the compiler is managing the addresses for type ©& const© not the programmer, and by a programming discipline of only using references with references, address errors can be prevented.
     723Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be ©0© unless an arbitrary pointer is assigned to the reference}, e.g.:
     724\begin{lstlisting}
     725int & const r = *0;                             §\C{// where 0 is the int * zero}§
     726\end{lstlisting}
     727Otherwise, the compiler is managing the addresses for type ©& const© not the programmer, and by a programming discipline of only using references with references, address errors can be prevented.
    725728
    726729\Index{Initialization} is different than \Index{assignment} because initialization occurs on the empty (uninitialized) storage on an object, while assignment occurs on possibly initialized storage of an object.
     
    735738\begin{lstlisting}
    736739int & f( int & rp );                    §\C{// reference parameter and return}§
    737 z = f( x ) + f( y );                    §\C{// reference operator added
     740z = f( x ) + f( y );                    §\C{// reference operator added, temporaries needed for call results
    738741\end{lstlisting}
    739742Within routine ©f©, it is possible to change the argument by changing the corresponding parameter, and parameter ©rp© can be locally reassigned within ©f©.
    740 The return reference from ©f© is copied into a compiler generated temporary, which is treated as an initialization.
     743Since ©?+?© takes its arguments by value, the references returned from ©f© are used to initialize compiler generated temporaries with value semantics that copy from the references.
    741744
    742745When a pointer/reference parameter has a ©const© value (immutable), it is possible to pass literals and expressions.
     
    16461649\end{lstlisting}
    16471650The ability to fall-through to the next clause \emph{is} a useful form of control flow, specifically when a sequence of case actions compound:
     1651\begin{quote2}
     1652\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    16481653\begin{lstlisting}
    16491654switch ( argc ) {
     
    16581663}
    16591664\end{lstlisting}
     1665&
     1666\begin{lstlisting}
     1667
     1668if ( argc == 3 ) {
     1669        // open output file
     1670        ®// open input file
     1671®} else if ( argc == 2 ) {
     1672        ®// open input file
     1673
     1674®} else {
     1675        // usage message
     1676}
     1677\end{lstlisting}
     1678\end{tabular}
     1679\end{quote2}
    16601680In this example, case 2 is always done if case 3 is done.
    16611681This control flow is difficult to simulate with if statements or a ©switch© statement without fall-through as code must be duplicated or placed in a separate routine.
     
    16721692\end{lstlisting}
    16731693However, this situation is handled in other languages without fall-through by allowing a list of case values.
    1674 While fall-through itself is not a problem, the problem occurs when fall-through is the default, as this semantics is not intuitive to most programmers and is different from virtually all other programming languages with a ©switch© statement.
     1694While fall-through itself is not a problem, the problem occurs when fall-through is the default, as this semantics is unintuitive to many programmers and is different from virtually all other programming languages with a ©switch© statement.
    16751695Hence, default fall-through semantics results in a large number of programming errors as programmers often forget the ©break© statement at the end of a ©case© clause, resulting in inadvertent fall-through.
    16761696
     
    16821702        if ( j < k ) {
    16831703                ...
    1684           case 1:               // transfer into "if" statement
    1685                 if ( j < m ) {
    1686                         ...
    1687                   case 2:       // transfer into "if" statement
    1688                         ...
    1689                 }
    1690         }
    1691   case 3:
     1704          ®case 1:®             // transfer into "if" statement
     1705                ...
     1706        } // if
     1707  case 2:
    16921708        while ( j < 5 ) {
    16931709                ...
    1694           case 4:               // transfer into "while" statement
     1710          ®case 3:®             // transfer into "while" statement
    16951711                ...
    1696         }
    1697 }
     1712        } // while
     1713} // switch
    16981714\end{lstlisting}
    16991715The problem with this usage is branching into control structures, which is known to cause both comprehension and technical difficulties.
     
    17341750\begin{lstlisting}
    17351751switch ( x ) {
    1736         int y = 1;                      §\C{// unreachable initialization}§
    1737         x = 7;                          §\C{// unreachable code
     1752        ®int y = 1;®                            §\C{// unreachable initialization}§
     1753        ®x = 7;®                                        §\C{// unreachable code without label/branch
    17381754  case 3: ...
    1739         y = 3;
    17401755        ...
     1756        ®int z = 0;®                            §\C{// unreachable initialization, cannot appear after case}§
     1757        z = 2;
     1758  case 3:
     1759        ®x = z;®                                        §\C{// without fall through, z is uninitialized}§
    17411760}
    17421761\end{lstlisting}
    17431762While the declaration of the local variable ©y© is useful and its scope is across all ©case© clauses, the initialization for such a variable is defined to never be executed because control always transfers over it.
    1744 Furthermore, any statements before the first ©case© clause can only be executed if labelled and transfered to using a ©goto©, either from outside or inside of the ©switch©.
    1745 As mentioned, transfer into control structures should be forbidden.
    1746 Transfers from within the ©switch© body using a ©goto© are equally unpalatable.
     1763Furthermore, any statements before the first ©case© clause can only be executed if labelled and transferred to using a ©goto©, either from outside or inside of the ©switch©.
     1764As mentioned, transfer into control structures should be forbidden;
     1765transfers from within the ©switch© body using a ©goto© are equally unpalatable.
     1766As well, the declaration of ©z© is cannot occur after the ©case© because a label can only be attached to a statement, and without a fall through to case 3, ©z© is uninitialized.
    17471767\end{enumerate}
     1768
    17481769Before discussing potential language changes to deal with these problems, it is worth observing that in a typical C program:
    17491770\begin{itemize}
     
    17571778and there is only a medium amount of fall-through from one ©case© clause to the next, and most of these result from a list of case values executing common code, rather than a sequence of case actions that compound.
    17581779\end{itemize}
    1759 These observations help to put the effects of suggested changes into perspective.
     1780These observations help to put the suggested changes to the ©switch© into perspective.
    17601781\begin{enumerate}
    17611782\item
     
    17671788still work.
    17681789Nevertheless, reversing the default action would have a non-trivial effect on case actions that compound, such as the above example of processing shell arguments.
    1769 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no fall-through semantics.
    1770 The ©choose© statement is identical to the new ©switch© statement, except there is no implicit fall-through between case-clauses and the ©break© statement applies to the enclosing loop construct (as for the ©continue© statement in a ©switch© statement).
    1771 It is still possible to fall-through if a case-clause ends with the new keyword ©fallthru©, e.g.:
     1790Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthru©, e.g.:
    17721791\begin{lstlisting}
    17731792®choose® ( i ) {
    1774   case 3:
     1793  case 1:  case 2:  case 3:
    17751794        ...
    1776         ®fallthru®;             §\C{// explicit fall through}§
    1777   case 5:
    1778         ...                             §\C{// implicit end of switch}§
     1795        ®// implicit end of switch (break)
     1796  ®case 5:
     1797        ...
     1798        ®fallthru®;                                     §\C{// explicit fall through}§
    17791799  case 7:
    17801800        ...
    1781         ®break®                 §\C{// transfer to end of enclosing loop / switch}§
     1801        ®break®                                         §\C{// explicit end of switch}§
    17821802  default:
    17831803        j = 3;
    17841804}
    17851805\end{lstlisting}
    1786 The ability to fall-through is retained because it is a sufficient C-idiom that most C programmers simply expect it, and its absence might discourage these programmers from using the ©choose© statement.
    1787 \item
    1788 Eliminating \Index*{Duff's device} is straightforward and only invalidates a small amount of very questionable code.
    1789 The solution is to allow ©case© clauses to only appear at the same nesting level as the ©switch© body, as is done in most other programming languages with ©switch© statements.
     1806Like the ©switch© statement, the ©choose© statement retains the fall-through semantics for a list of ©case© clauses;
     1807the implicit ©break© is applied only at the end of the \emph{statements} following a ©case© clause.
     1808The explicit ©fallthru© is retained because it is a C-idiom most C programmers expect, and its absence might discourage programmers from using the ©choose© statement.
     1809As well, allowing an explicit ©break© from the ©choose© is a carry over from the ©switch© statement, and expected by C programmers.
     1810\item
     1811\Index*{Duff's device} is eliminated from both ©switch© and ©choose© statements, and only invalidates a small amount of very questionable code.
     1812Hence, the ©case© clause must appear at the same nesting level as the ©switch©/©choose© body, as is done in most other programming languages with ©switch© statements.
    17901813\item
    17911814The issue of ©default© at locations other than at the end of the cause clause can be solved by using good programming style, and there are a few reasonable situations involving fall-through where the ©default© clause needs to appear is locations other than at the end.
    1792 Therefore, no language change is made for this issue.
    1793 \item
    1794 Dealing with unreachable code at the start of a ©switch© statement is solved by defining the declaration-list, including any associated initialization, at the start of a ©switch© statement body to be executed \emph{before} the transfer to the appropriate ©case© clause.
    1795 This semantics is the same as for declarations at the start of a loop body, which are executed before each iteration of the loop body.
    1796 As well, statements cannot appear before the first ©case© clause.
    1797 The change is compatible for declarations with initialization in this context because existing code cannot assume the initialization has occurred.
    1798 The change is incompatible for statements, but any existing code using it is highly questionable, as in:
    1799 \begin{lstlisting}
    1800 switch ( i ) {
    1801         L: x = 5;               §\C{// questionable code}§
     1815Therefore, no change is made for this issue.
     1816\item
     1817Dealing with unreachable code in a ©switch©/©choose© body is solved by restricting declarations and associated initialization to the start of statement body, which is executed \emph{before} the transfer to the appropriate ©case© clause.\footnote{
     1818Essentially, these declarations are hoisted before the statement and both declarations and statement are surrounded by a compound statement.} and precluding statements before the first ©case© clause.
     1819Further declaration in the statement body are disallowed.
     1820\begin{lstlisting}
     1821switch ( x ) {
     1822        ®int i = 0;®                            §\C{// allowed}§
    18021823  case 0:
    18031824        ...
    1804 }
    1805 \end{lstlisting}
    1806 The statement after the ©switch© can never be executed unless it is labelled.
    1807 If it is labelled, it must be transfered to from outside or inside the ©switch© statement, neither of which is acceptable control flow.
     1825        ®int i = 0;®                            §\C{// disallowed}§
     1826  case 1:
     1827    {
     1828                ®int i = 0;®                    §\C{// allowed in any compound statement}§
     1829                ...
     1830        }
     1831  ...
     1832}
     1833\end{lstlisting}
    18081834\end{enumerate}
    18091835
     
    18871913\section{Exception Handling}
    18881914
    1889 Exception handling provides two mechanim: change of control flow from a raise to a handler, and commumication from the riase to the handler.
     1915Exception handling provides two mechanism: change of control flow from a raise to a handler, and communication from the raise to the handler.
    18901916\begin{lstlisting}
    18911917exception void h( int i );
     
    21402166A facility that let programmers declare specific constants..const Rational 12., for instance. would not be much of an improvement.
    21412167Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed.
    2142 The complexity of such a feature doesn.t seem worth the gain.
     2168The complexity of such a feature does not seem worth the gain.
    21432169
    21442170For example, to define the constants for a complex type, the programmer would define the following:
     
    26682694} s;
    26692695\end{lstlisting}
    2670 The problem occurs in accesing these fields using the selection operation ``©.©'':
     2696The problem occurs in accessing these fields using the selection operation ``©.©'':
    26712697\begin{lstlisting}
    26722698s.0 = 0;        // ambiguity with floating constant .0
     
    26782704®s.§\textvisiblespace§1® = 1;
    26792705\end{lstlisting}
    2680 While this sytact is awkward, it is unlikely many programers will name fields of a structure 0 or 1.
     2706While this syntax is awkward, it is unlikely many programmers will name fields of a structure 0 or 1.
    26812707Like the \Index*[C++]{\CC} lexical problem with closing template-syntax, e.g, ©Foo<Bar<int®>>®©, this issue can be solved with a more powerful lexer/parser.
    26822708
     
    29903016In \CFA, multiple definitions are not necessary.
    29913017Within a module, all of the module's global definitions are visible throughout the module.
    2992 For example, the following code compiles, even though isOdd was not declared before being called:
     3018For example, the following code compiles, even though ©isOdd© was not declared before being called:
    29933019\begin{lstlisting}
    29943020bool isEven(unsigned int x) {
     
    43304356\item[Difficulty of converting:] keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism:
    43314357\begin{lstlisting}
    4332 int `otype` = 3;                                // make keyword an indentifier
     4358int `otype` = 3;                                // make keyword an identifier
    43334359double `choose` = 3.5;
    43344360\end{lstlisting}
     
    44674493\begin{description}
    44684494\item[Change:] comma expression is disallowed as subscript
    4469 \item[Rationale:] safety issue to prevent subscripting error for multidimensional arrays: ©x[i,j]© instead of ©x[i][j]©, and this syntactic form then taken by \CFA for new styple arrays.
     4495\item[Rationale:] safety issue to prevent subscripting error for multidimensional arrays: ©x[i,j]© instead of ©x[i][j]©, and this syntactic form then taken by \CFA for new style arrays.
    44704496\item[Effect on original feature:] change to semantics of well-defined feature.
    44714497\item[Difficulty of converting:] semantic transformation of ©x[i,j]© to ©x[(i,j)]©
     
    44794505\index{input/output library}
    44804506
    4481 The goal for the \CFA I/O is to make I/O as simple as possible in the common cases, while fully supporting polmorphism and user defined types in a consistent way.
     4507The goal for the \CFA I/O is to make I/O as simple as possible in the common cases, while fully supporting polymorphism and user defined types in a consistent way.
    44824508The common case is printing out a sequence of variables separated by whitespace.
    44834509\begin{quote2}
     
    45164542Finally, the logical-or operator has a link with the Shell pipe-operator for moving data, although data flows in the opposite direction.
    45174543
    4518 The implicit seperator\index{I/O separator} character (space/blank) is a separator not a terminator.
     4544The implicit separator\index{I/O separator} character (space/blank) is a separator not a terminator.
    45194545The rules for implicitly adding the separator are:
    45204546\begin{enumerate}
    45214547\item
    4522 A seperator does not appear at the start or end of a line.
     4548A separator does not appear at the start or end of a line.
    45234549\begin{lstlisting}[belowskip=0pt]
    45244550sout | 1 | 2 | 3 | endl;
     
    45284554\end{lstlisting}
    45294555\item
    4530 A seperator does not appear before or after a character literal or variable.
     4556A separator does not appear before or after a character literal or variable.
    45314557\begin{lstlisting}
    45324558sout | '1' | '2' | '3' | endl;
     
    45344560\end{lstlisting}
    45354561\item
    4536 A seperator does not appear before or after a null (empty) C string
     4562A separator does not appear before or after a null (empty) C string
    45374563\begin{lstlisting}
    45384564sout | 1 | "" | 2 | "" | 3 | endl;
     
    45414567which is a local mechanism to disable insertion of the separator character.
    45424568\item
    4543 A seperator does not appear before a C string starting with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline[mathescape=off]@([{$£¥¡¿«@
     4569A separator does not appear before a C string starting with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline[mathescape=off]@([{$£¥¡¿«@
    45444570%$
    45454571\begin{lstlisting}[mathescape=off]
     
    47444770
    47454771
    4746 \subsection{min / max / swap}
     4772\subsection{min / max / clamp / swap}
    47474773
    47484774\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
     
    47524778forall( otype T | { int ?>?( T, T ); } )
    47534779T max( const T t1, const T t2 );§\indexc{max}§
     4780
     4781forall( otype T | { T min( T, T ); T max( T, T ); } )
     4782T clamp( T value, T min_val, T max_val );§\indexc{clamp}§
    47544783
    47554784forall( otype T )
     
    51365165When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible.
    51375166
    5138 \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
     5167\begin{lstlisting}[belowskip=0pt]
    51395168// implementation
    51405169struct Rational {§\indexc{Rational}§
  • src/ControlStruct/CaseRangeMutator.cc

    r7d5e243 r6066e32  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun 30 13:28:55 2016
    13 // Update Count     : 8
     12// Last Modified On : Tue Jul 12 17:35:13 2016
     13// Update Count     : 9
    1414//
    1515
     
    2828
    2929namespace ControlStruct {
    30         Statement *CaseRangeMutator::mutate( ChooseStmt *chooseStmt ) {
    31                 // There shouldn't be any `choose' statements by now, throw an exception or something.
    32                 throw( 0 ) ; /* FIXME */
    33         }
    34 
    3530        Statement *CaseRangeMutator::mutate( SwitchStmt *switchStmt ) {
    3631                std::list< Statement * > &cases = switchStmt->get_branches();
     
    6964
    7065                return switchStmt;
    71         }
    72 
    73         Statement *CaseRangeMutator::mutate( FallthruStmt *fallthruStmt ) {
    74                 //delete fallthruStmt;
    75                 return new NullStmt();
    7666        }
    7767
  • src/ControlStruct/CaseRangeMutator.h

    r7d5e243 r6066e32  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue May 19 15:22:51 2015
    13 // Update Count     : 3
     12// Last Modified On : Tue Jul 12 17:35:30 2016
     13// Update Count     : 4
    1414//
    1515
     
    2727                CaseRangeMutator() {}
    2828
    29                 virtual Statement *mutate( ChooseStmt * );
    3029                virtual Statement *mutate( SwitchStmt * );
    31                 virtual Statement *mutate( FallthruStmt * );
    3230                virtual Statement *mutate( CaseStmt * );
    3331          private:
  • src/ControlStruct/LabelFixer.h

    r7d5e243 r6066e32  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jan 25 21:22:22 2016
    13 // Update Count     : 32
     12// Last Modified On : Tue Jul 12 17:36:16 2016
     13// Update Count     : 33
    1414//
    1515
     
    4646                virtual void visit( ForStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); }
    4747                virtual void visit( SwitchStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); }
    48                 virtual void visit( ChooseStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); }
    49                 virtual void visit( FallthruStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); }
    5048                virtual void visit( CaseStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); }
    5149                virtual void visit( ReturnStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); }
  • src/ControlStruct/MLEMutator.cc

    r7d5e243 r6066e32  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jul  6 17:40:02 2016
    13 // Update Count     : 196
     12// Last Modified On : Tue Jul 12 17:36:51 2016
     13// Update Count     : 197
    1414//
    1515
     
    248248                return handleSwitchStmt( switchStmt );
    249249        }
    250 
    251         Statement *MLEMutator::mutate( ChooseStmt *switchStmt ) {
    252                 return handleSwitchStmt( switchStmt );
    253         }
    254250} // namespace ControlStruct
    255251
  • src/ControlStruct/MLEMutator.h

    r7d5e243 r6066e32  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jul  6 18:16:26 2016
    13 // Update Count     : 33
     12// Last Modified On : Tue Jul 12 17:37:01 2016
     13// Update Count     : 34
    1414//
    1515
     
    4242                virtual Statement *mutate( IfStmt *ifStmt ) override;
    4343                virtual Statement *mutate( SwitchStmt *switchStmt ) override;
    44                 virtual Statement *mutate( ChooseStmt *switchStmt ) override;
    4544
    4645                Statement *mutateLoop( Statement *bodyLoop, Entry &e );
  • src/ControlStruct/Mutate.cc

    r7d5e243 r6066e32  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jul 15 14:50:04 2015
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:37:45 2016
     13// Update Count     : 8
    1414//
    1515
     
    2020
    2121#include "Mutate.h"
    22 #include "ChooseMutator.h"
    2322#include "LabelFixer.h"
    2423#include "MLEMutator.h"
     
    3938                ForExprMutator formut;
    4039
    41                 // transform choose statements into switch statements
    42                 ChooseMutator chmut;
    43 
    44                 // normalizes label definitions and generates multi-level
    45                 // exit labels
     40                // normalizes label definitions and generates multi-level exit labels
    4641                LabelFixer lfix;
    4742
    4843                // expand case ranges and turn fallthru into a null statement
    49                 CaseRangeMutator ranges;  // has to run after ChooseMutator
     44                CaseRangeMutator ranges;
    5045
    5146                //ExceptMutator exc;
     
    5348
    5449                mutateAll( translationUnit, formut );
    55                 mutateAll( translationUnit, chmut );
    5650                acceptAll( translationUnit, lfix );
    5751                mutateAll( translationUnit, ranges );
  • src/ControlStruct/module.mk

    r7d5e243 r6066e32  
    1111## Created On       : Mon Jun  1 17:49:17 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Mon Jun  1 17:51:45 2015
    14 ## Update Count     : 1
     13## Last Modified On : Tue Jul 12 17:40:31 2016
     14## Update Count     : 2
    1515###############################################################################
    1616
     
    2020        ControlStruct/CaseRangeMutator.cc \
    2121        ControlStruct/Mutate.cc \
    22         ControlStruct/ChooseMutator.cc \
    2322        ControlStruct/ForExprMutator.cc \
    2423        ControlStruct/LabelTypeChecker.cc
  • src/GenPoly/DeclMutator.cc

    r7d5e243 r6066e32  
    99// Author           : Aaron B. Moss
    1010// Created On       : Fri Nov 27 14:44:00 2015
    11 // Last Modified By : Aaron B. Moss
    12 // Last Modified On : Fri Nov 27 14:44:00 2015
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:38:46 2016
     13// Update Count     : 2
    1414//
    1515
     
    167167        }
    168168       
    169         Statement* DeclMutator::mutate(ChooseStmt *chooseStmt) {
    170                 chooseStmt->set_condition( maybeMutate( chooseStmt->get_condition(), *this ) );
    171                 mutateAll( chooseStmt->get_branches(), *this );
    172                 return chooseStmt;
    173         }
    174        
    175169        Statement* DeclMutator::mutate(CaseStmt *caseStmt) {
    176170                caseStmt->set_condition( maybeMutate( caseStmt->get_condition(), *this ) );
  • src/GenPoly/DeclMutator.h

    r7d5e243 r6066e32  
    99// Author           : Aaron B. Moss
    1010// Created On       : Fri Nov 27 14:44:00 2015
    11 // Last Modified By : Aaron B. Moss
    12 // Last Modified On : Fri Nov 27 14:44:00 2015
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:39:01 2016
     13// Update Count     : 2
    1414//
    1515
     
    3636                virtual Statement* mutate(ForStmt *forStmt);
    3737                virtual Statement* mutate(SwitchStmt *switchStmt);
    38                 virtual Statement* mutate(ChooseStmt *chooseStmt);
    3938                virtual Statement* mutate(CaseStmt *caseStmt);
    4039                virtual Statement* mutate(TryStmt *tryStmt);
  • src/GenPoly/PolyMutator.cc

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon May 02 14:50:58 2016
    13 // Update Count     : 11
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:39:32 2016
     13// Update Count     : 12
    1414//
    1515
     
    104104        }
    105105
    106         Statement * PolyMutator::mutate(ChooseStmt *switchStmt) {
    107                 mutateStatementList( switchStmt->get_branches() );
    108                 switchStmt->set_condition( mutateExpression( switchStmt->get_condition() ) );
    109                 return switchStmt;
    110         }
    111 
    112106        Statement * PolyMutator::mutate(CaseStmt *caseStmt) {
    113107                mutateStatementList( caseStmt->get_statements() );
  • src/GenPoly/PolyMutator.h

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Dec 08 15:19:05 2015
    13 // Update Count     : 5
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:39:41 2016
     13// Update Count     : 6
    1414//
    1515
     
    3737                virtual Statement* mutate(ForStmt *forStmt);
    3838                virtual Statement* mutate(SwitchStmt *switchStmt);
    39                 virtual Statement* mutate(ChooseStmt *chooseStmt);
    4039                virtual Statement* mutate(CaseStmt *caseStmt);
    4140                virtual Statement* mutate(TryStmt *returnStmt);
  • src/InitTweak/FixInit.cc

    r7d5e243 r6066e32  
    1010// Created On       : Wed Jan 13 16:29:30 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jul  6 17:34:46 2016
    13 // Update Count     : 33
     12// Last Modified On : Tue Jul 12 17:41:15 2016
     13// Update Count     : 34
    1414//
    1515
     
    118118                        virtual void visit( ForStmt *stmt ) { handleStmt( stmt ); return Parent::visit( stmt ); }
    119119                        virtual void visit( SwitchStmt *stmt ) { handleStmt( stmt ); return Parent::visit( stmt ); }
    120                         virtual void visit( ChooseStmt *stmt ) { handleStmt( stmt ); return Parent::visit( stmt ); }
    121                         virtual void visit( FallthruStmt *stmt ) { handleStmt( stmt ); return Parent::visit( stmt ); }
    122120                        virtual void visit( CaseStmt *stmt ) { handleStmt( stmt ); return Parent::visit( stmt ); }
    123121                        virtual void visit( BranchStmt *stmt ) { handleStmt( stmt ); return Parent::visit( stmt ); }
  • src/Makefile.in

    r7d5e243 r6066e32  
    110110        ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT) \
    111111        ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) \
    112         ControlStruct/driver_cfa_cpp-ChooseMutator.$(OBJEXT) \
    113112        ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \
    114113        ControlStruct/driver_cfa_cpp-LabelTypeChecker.$(OBJEXT) \
     
    374373        ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \
    375374        ControlStruct/MLEMutator.cc ControlStruct/CaseRangeMutator.cc \
    376         ControlStruct/Mutate.cc ControlStruct/ChooseMutator.cc \
    377         ControlStruct/ForExprMutator.cc \
     375        ControlStruct/Mutate.cc ControlStruct/ForExprMutator.cc \
    378376        ControlStruct/LabelTypeChecker.cc Designators/Processor.cc \
    379377        GenPoly/Box.cc GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \
     
    550548        ControlStruct/$(DEPDIR)/$(am__dirstamp)
    551549ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT):  \
    552         ControlStruct/$(am__dirstamp) \
    553         ControlStruct/$(DEPDIR)/$(am__dirstamp)
    554 ControlStruct/driver_cfa_cpp-ChooseMutator.$(OBJEXT):  \
    555550        ControlStruct/$(am__dirstamp) \
    556551        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     
    826821        -rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT)
    827822        -rm -f ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT)
    828         -rm -f ControlStruct/driver_cfa_cpp-ChooseMutator.$(OBJEXT)
    829823        -rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT)
    830824        -rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT)
     
    937931@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@
    938932@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po@am__quote@
    939 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ChooseMutator.Po@am__quote@
    940933@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Po@am__quote@
    941934@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelFixer.Po@am__quote@
     
    12471240@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-Mutate.obj `if test -f 'ControlStruct/Mutate.cc'; then $(CYGPATH_W) 'ControlStruct/Mutate.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/Mutate.cc'; fi`
    12481241
    1249 ControlStruct/driver_cfa_cpp-ChooseMutator.o: ControlStruct/ChooseMutator.cc
    1250 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ChooseMutator.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ChooseMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-ChooseMutator.o `test -f 'ControlStruct/ChooseMutator.cc' || echo '$(srcdir)/'`ControlStruct/ChooseMutator.cc
    1251 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ChooseMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ChooseMutator.Po
    1252 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='ControlStruct/ChooseMutator.cc' object='ControlStruct/driver_cfa_cpp-ChooseMutator.o' libtool=no @AMDEPBACKSLASH@
    1253 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1254 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ChooseMutator.o `test -f 'ControlStruct/ChooseMutator.cc' || echo '$(srcdir)/'`ControlStruct/ChooseMutator.cc
    1255 
    1256 ControlStruct/driver_cfa_cpp-ChooseMutator.obj: ControlStruct/ChooseMutator.cc
    1257 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ChooseMutator.obj -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ChooseMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-ChooseMutator.obj `if test -f 'ControlStruct/ChooseMutator.cc'; then $(CYGPATH_W) 'ControlStruct/ChooseMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ChooseMutator.cc'; fi`
    1258 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ChooseMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ChooseMutator.Po
    1259 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='ControlStruct/ChooseMutator.cc' object='ControlStruct/driver_cfa_cpp-ChooseMutator.obj' libtool=no @AMDEPBACKSLASH@
    1260 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1261 @am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ChooseMutator.obj `if test -f 'ControlStruct/ChooseMutator.cc'; then $(CYGPATH_W) 'ControlStruct/ChooseMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ChooseMutator.cc'; fi`
    1262 
    12631242ControlStruct/driver_cfa_cpp-ForExprMutator.o: ControlStruct/ForExprMutator.cc
    12641243@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ForExprMutator.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-ForExprMutator.o `test -f 'ControlStruct/ForExprMutator.cc' || echo '$(srcdir)/'`ControlStruct/ForExprMutator.cc
  • src/Parser/ParseNode.cc

    r7d5e243 r6066e32  
    1010// Created On       : Sat May 16 13:26:29 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun 30 21:13:12 2016
    13 // Update Count     : 52
     12// Last Modified On : Tue Jul 12 17:19:57 2016
     13// Update Count     : 53
    1414//
    1515
     
    196196
    197197ParseNode *ParseNode::set_link( ParseNode *next_ ) {
    198         if ( next_ == 0 ) return this;
    199         get_last()->next = next_;
     198        if ( next_ != 0 ) get_last()->next = next_;
    200199        return this;
    201200}
  • src/Parser/StatementNode.cc

    r7d5e243 r6066e32  
    1010// Created On       : Sat May 16 14:59:41 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun  9 14:18:46 2016
    13 // Update Count     : 132
     12// Last Modified On : Tue Jul 12 17:21:02 2016
     13// Update Count     : 133
    1414//
    1515
     
    254254          case Switch:
    255255                return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
    256           case Choose:
    257                 return new ChooseStmt( labs, maybeBuild<Expression>(get_control()), branches );
    258           case Fallthru:
    259                 return new FallthruStmt( labs );
    260256          case Case:
    261257                return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
  • src/Parser/TypeData.cc

    r7d5e243 r6066e32  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 15:12:51 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Apr 06 16:57:53 2016
    13 // Update Count     : 49
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:21:49 2016
     13// Update Count     : 50
    1414//
    1515
     
    845845                assert( false );
    846846        } // switch
    847 //      buildList( aggregate->params, at->get_parameters() );
     847
    848848        buildList( aggregate->fields, at->get_members() );
    849849
    850850        return at;
    851851}
    852 
    853 /// namespace {
    854 /// Type*
    855 /// makeType( Declaration* decl )
    856 /// {
    857 ///   if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( decl ) ) {
    858 ///     return dwt->get_type()->clone();
    859 ///   } else {
    860 ///     return 0;
    861 ///   }
    862 /// }
    863 /// }
    864852
    865853ReferenceToType *TypeData::buildAggInst() const {
  • src/Parser/parser.cc

    r7d5e243 r6066e32  
    10311031     631,   632,   638,   639,   640,   641,   642,   643,   644,   645,
    10321032     646,   656,   663,   665,   675,   676,   681,   683,   689,   691,
    1033      695,   696,   701,   706,   709,   711,   713,   718,   720,   728,
    1034      729,   731,   735,   736,   741,   742,   747,   748,   752,   757,
    1035      758,   762,   764,   770,   771,   775,   777,   779,   781,   787,
    1036      788,   792,   793,   797,   799,   801,   806,   808,   813,   815,
    1037      819,   822,   826,   829,   833,   835,   839,   841,   848,   850,
    1038      852,   861,   863,   865,   867,   869,   874,   876,   878,   880,
    1039      885,   898,   899,   904,   906,   911,   915,   917,   919,   921,
    1040      923,   929,   930,   936,   937,   941,   942,   947,   949,   955,
    1041      956,   958,   963,   965,   972,   974,   978,   979,   984,   986,
    1042      990,   991,   995,   997,  1001,  1002,  1006,  1007,  1011,  1012,
    1043     1027,  1028,  1029,  1030,  1031,  1035,  1040,  1047,  1057,  1062,
    1044     1067,  1075,  1080,  1085,  1090,  1095,  1103,  1125,  1130,  1137,
    1045     1139,  1146,  1151,  1156,  1167,  1172,  1177,  1182,  1187,  1196,
    1046     1201,  1209,  1210,  1211,  1212,  1218,  1223,  1231,  1232,  1233,
    1047     1234,  1238,  1239,  1240,  1241,  1246,  1247,  1256,  1257,  1262,
    1048     1263,  1268,  1270,  1272,  1274,  1276,  1279,  1278,  1290,  1291,
    1049     1293,  1303,  1304,  1309,  1313,  1315,  1317,  1319,  1321,  1323,
    1050     1325,  1327,  1332,  1334,  1336,  1338,  1340,  1342,  1344,  1346,
    1051     1348,  1350,  1352,  1354,  1356,  1362,  1363,  1365,  1367,  1369,
    1052     1374,  1375,  1381,  1382,  1384,  1386,  1391,  1393,  1395,  1397,
    1053     1402,  1403,  1405,  1407,  1412,  1413,  1415,  1420,  1421,  1423,
    1054     1425,  1430,  1432,  1434,  1439,  1440,  1444,  1446,  1452,  1451,
    1055     1455,  1457,  1462,  1464,  1469,  1471,  1476,  1477,  1479,  1480,
    1056     1489,  1490,  1492,  1494,  1499,  1501,  1507,  1508,  1510,  1513,
    1057     1516,  1521,  1522,  1527,  1532,  1536,  1538,  1544,  1543,  1550,
    1058     1552,  1558,  1559,  1567,  1568,  1572,  1573,  1574,  1576,  1578,
    1059     1585,  1586,  1588,  1590,  1595,  1596,  1602,  1603,  1607,  1608,
    1060     1613,  1614,  1615,  1617,  1625,  1626,  1628,  1631,  1633,  1637,
    1061     1638,  1639,  1641,  1643,  1647,  1652,  1660,  1661,  1670,  1672,
    1062     1677,  1678,  1679,  1683,  1684,  1685,  1689,  1690,  1691,  1695,
    1063     1696,  1697,  1702,  1703,  1704,  1705,  1711,  1712,  1714,  1719,
    1064     1720,  1725,  1726,  1727,  1728,  1729,  1744,  1745,  1750,  1751,
    1065     1759,  1761,  1763,  1766,  1768,  1770,  1793,  1794,  1796,  1798,
    1066     1803,  1804,  1806,  1811,  1816,  1817,  1823,  1822,  1826,  1830,
    1067     1832,  1834,  1840,  1841,  1846,  1851,  1853,  1858,  1860,  1861,
    1068     1863,  1868,  1870,  1872,  1877,  1879,  1884,  1889,  1897,  1903,
    1069     1902,  1916,  1917,  1922,  1923,  1927,  1932,  1937,  1945,  1950,
    1070     1961,  1962,  1973,  1974,  1980,  1981,  1985,  1986,  1987,  1990,
    1071     1989,  2000,  2009,  2015,  2021,  2030,  2036,  2042,  2048,  2054,
    1072     2062,  2068,  2076,  2082,  2091,  2092,  2093,  2097,  2101,  2103,
    1073     2108,  2109,  2113,  2114,  2119,  2125,  2126,  2129,  2131,  2132,
    1074     2136,  2137,  2138,  2139,  2173,  2175,  2176,  2178,  2183,  2188,
    1075     2193,  2195,  2197,  2202,  2204,  2206,  2208,  2213,  2215,  2224,
    1076     2226,  2227,  2232,  2234,  2236,  2241,  2243,  2245,  2250,  2252,
    1077     2254,  2263,  2264,  2265,  2269,  2271,  2273,  2278,  2280,  2282,
    1078     2287,  2289,  2291,  2306,  2308,  2309,  2311,  2316,  2317,  2322,
    1079     2324,  2326,  2331,  2333,  2335,  2337,  2342,  2344,  2346,  2356,
    1080     2358,  2359,  2361,  2366,  2368,  2370,  2375,  2377,  2379,  2381,
    1081     2386,  2388,  2390,  2421,  2423,  2424,  2426,  2431,  2436,  2444,
    1082     2446,  2448,  2453,  2455,  2460,  2462,  2476,  2477,  2479,  2484,
    1083     2486,  2488,  2490,  2492,  2497,  2498,  2500,  2502,  2507,  2509,
    1084     2511,  2517,  2519,  2521,  2525,  2527,  2529,  2531,  2545,  2546,
    1085     2548,  2553,  2555,  2557,  2559,  2561,  2566,  2567,  2569,  2571,
    1086     2576,  2578,  2580,  2586,  2587,  2589,  2598,  2601,  2603,  2606,
    1087     2608,  2610,  2623,  2624,  2626,  2631,  2633,  2635,  2637,  2639,
    1088     2644,  2645,  2647,  2649,  2654,  2656,  2664,  2665,  2666,  2671,
    1089     2672,  2676,  2678,  2680,  2682,  2684,  2686,  2693,  2695,  2697,
    1090     2699,  2701,  2703,  2705,  2707,  2709,  2711,  2716,  2718,  2720,
    1091     2725,  2751,  2752,  2754,  2758,  2759,  2763,  2765,  2767,  2769,
    1092     2771,  2773,  2780,  2782,  2784,  2786,  2788,  2790,  2795,  2800,
    1093     2802,  2804,  2822,  2824,  2829,  2830
     1033     695,   696,   701,   706,   709,   711,   713,   722,   724,   735,
     1034     736,   738,   742,   743,   748,   749,   754,   755,   759,   764,
     1035     765,   769,   771,   777,   778,   782,   784,   786,   788,   794,
     1036     795,   799,   801,   806,   808,   810,   815,   817,   822,   824,
     1037     828,   831,   835,   838,   842,   844,   848,   850,   857,   859,
     1038     861,   870,   872,   874,   876,   878,   883,   885,   887,   889,
     1039     894,   907,   908,   913,   915,   920,   924,   926,   928,   930,
     1040     932,   938,   939,   945,   946,   950,   951,   956,   958,   964,
     1041     965,   967,   972,   974,   981,   983,   987,   988,   993,   995,
     1042     999,  1000,  1004,  1006,  1010,  1011,  1015,  1016,  1020,  1021,
     1043    1036,  1037,  1038,  1039,  1040,  1044,  1049,  1056,  1066,  1071,
     1044    1076,  1084,  1089,  1094,  1099,  1104,  1112,  1134,  1139,  1146,
     1045    1148,  1155,  1160,  1165,  1176,  1181,  1186,  1191,  1196,  1205,
     1046    1210,  1218,  1219,  1220,  1221,  1227,  1232,  1240,  1241,  1242,
     1047    1243,  1247,  1248,  1249,  1250,  1255,  1256,  1265,  1266,  1271,
     1048    1272,  1277,  1279,  1281,  1283,  1285,  1288,  1287,  1299,  1300,
     1049    1302,  1312,  1313,  1318,  1322,  1324,  1326,  1328,  1330,  1332,
     1050    1334,  1336,  1341,  1343,  1345,  1347,  1349,  1351,  1353,  1355,
     1051    1357,  1359,  1361,  1363,  1365,  1371,  1372,  1374,  1376,  1378,
     1052    1383,  1384,  1390,  1391,  1393,  1395,  1400,  1402,  1404,  1406,
     1053    1411,  1412,  1414,  1416,  1421,  1422,  1424,  1429,  1430,  1432,
     1054    1434,  1439,  1441,  1443,  1448,  1449,  1453,  1455,  1461,  1460,
     1055    1464,  1466,  1471,  1473,  1478,  1480,  1485,  1486,  1488,  1489,
     1056    1498,  1499,  1501,  1503,  1508,  1510,  1516,  1517,  1519,  1522,
     1057    1525,  1530,  1531,  1536,  1541,  1545,  1547,  1553,  1552,  1559,
     1058    1561,  1567,  1568,  1576,  1577,  1581,  1582,  1583,  1585,  1587,
     1059    1594,  1595,  1597,  1599,  1604,  1605,  1611,  1612,  1616,  1617,
     1060    1622,  1623,  1624,  1626,  1634,  1635,  1637,  1640,  1642,  1646,
     1061    1647,  1648,  1650,  1652,  1656,  1661,  1669,  1670,  1679,  1681,
     1062    1686,  1687,  1688,  1692,  1693,  1694,  1698,  1699,  1700,  1704,
     1063    1705,  1706,  1711,  1712,  1713,  1714,  1720,  1721,  1723,  1728,
     1064    1729,  1734,  1735,  1736,  1737,  1738,  1753,  1754,  1759,  1760,
     1065    1768,  1770,  1772,  1775,  1777,  1779,  1802,  1803,  1805,  1807,
     1066    1812,  1813,  1815,  1820,  1825,  1826,  1832,  1831,  1835,  1839,
     1067    1841,  1843,  1849,  1850,  1855,  1860,  1862,  1867,  1869,  1870,
     1068    1872,  1877,  1879,  1881,  1886,  1888,  1893,  1898,  1906,  1912,
     1069    1911,  1925,  1926,  1931,  1932,  1936,  1941,  1946,  1954,  1959,
     1070    1970,  1971,  1982,  1983,  1989,  1990,  1994,  1995,  1996,  1999,
     1071    1998,  2009,  2018,  2024,  2030,  2039,  2045,  2051,  2057,  2063,
     1072    2071,  2077,  2085,  2091,  2100,  2101,  2102,  2106,  2110,  2112,
     1073    2117,  2118,  2122,  2123,  2128,  2134,  2135,  2138,  2140,  2141,
     1074    2145,  2146,  2147,  2148,  2182,  2184,  2185,  2187,  2192,  2197,
     1075    2202,  2204,  2206,  2211,  2213,  2215,  2217,  2222,  2224,  2233,
     1076    2235,  2236,  2241,  2243,  2245,  2250,  2252,  2254,  2259,  2261,
     1077    2263,  2272,  2273,  2274,  2278,  2280,  2282,  2287,  2289,  2291,
     1078    2296,  2298,  2300,  2315,  2317,  2318,  2320,  2325,  2326,  2331,
     1079    2333,  2335,  2340,  2342,  2344,  2346,  2351,  2353,  2355,  2365,
     1080    2367,  2368,  2370,  2375,  2377,  2379,  2384,  2386,  2388,  2390,
     1081    2395,  2397,  2399,  2430,  2432,  2433,  2435,  2440,  2445,  2453,
     1082    2455,  2457,  2462,  2464,  2469,  2471,  2485,  2486,  2488,  2493,
     1083    2495,  2497,  2499,  2501,  2506,  2507,  2509,  2511,  2516,  2518,
     1084    2520,  2526,  2528,  2530,  2534,  2536,  2538,  2540,  2554,  2555,
     1085    2557,  2562,  2564,  2566,  2568,  2570,  2575,  2576,  2578,  2580,
     1086    2585,  2587,  2589,  2595,  2596,  2598,  2607,  2610,  2612,  2615,
     1087    2617,  2619,  2632,  2633,  2635,  2640,  2642,  2644,  2646,  2648,
     1088    2653,  2654,  2656,  2658,  2663,  2665,  2673,  2674,  2675,  2680,
     1089    2681,  2685,  2687,  2689,  2691,  2693,  2695,  2702,  2704,  2706,
     1090    2708,  2710,  2712,  2714,  2716,  2718,  2720,  2725,  2727,  2729,
     1091    2734,  2760,  2761,  2763,  2767,  2768,  2772,  2774,  2776,  2778,
     1092    2780,  2782,  2789,  2791,  2793,  2795,  2797,  2799,  2804,  2809,
     1093    2811,  2813,  2831,  2833,  2838,  2839
    10941094};
    10951095#endif
     
    60066006/* Line 1806 of yacc.c  */
    60076007#line 714 "parser.yy"
    6008     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
     6008    {
     6009                        StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
     6010                        // The semantics of the declaration list is changed to include associated initialization, which is performed
     6011                        // *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
     6012                        // statement around the switch.  Statements after the initial declaration list can never be executed, and
     6013                        // therefore, are removed from the grammar even though C allows it. Change also applies to choose statement.
     6014                        (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
     6015                }
    60096016    break;
    60106017
     
    60126019
    60136020/* Line 1806 of yacc.c  */
    6014 #line 719 "parser.yy"
    6015     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     6021#line 723 "parser.yy"
     6022    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    60166023    break;
    60176024
     
    60196026
    60206027/* Line 1806 of yacc.c  */
    6021 #line 721 "parser.yy"
    6022     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
     6028#line 725 "parser.yy"
     6029    {
     6030                        StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
     6031                        (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
     6032                }
    60236033    break;
    60246034
     
    60266036
    60276037/* Line 1806 of yacc.c  */
    6028 #line 728 "parser.yy"
     6038#line 735 "parser.yy"
    60296039    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    60306040    break;
     
    60336043
    60346044/* Line 1806 of yacc.c  */
    6035 #line 730 "parser.yy"
     6045#line 737 "parser.yy"
    60366046    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    60376047    break;
     
    60406050
    60416051/* Line 1806 of yacc.c  */
    6042 #line 737 "parser.yy"
     6052#line 744 "parser.yy"
    60436053    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    60446054    break;
     
    60476057
    60486058/* Line 1806 of yacc.c  */
    6049 #line 741 "parser.yy"
     6059#line 748 "parser.yy"
    60506060    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    60516061    break;
     
    60546064
    60556065/* Line 1806 of yacc.c  */
    6056 #line 742 "parser.yy"
     6066#line 749 "parser.yy"
    60576067    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    60586068    break;
     
    60616071
    60626072/* Line 1806 of yacc.c  */
    6063 #line 748 "parser.yy"
     6073#line 755 "parser.yy"
    60646074    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    60656075    break;
     
    60686078
    60696079/* Line 1806 of yacc.c  */
    6070 #line 752 "parser.yy"
     6080#line 759 "parser.yy"
     6081    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     6082    break;
     6083
     6084  case 169:
     6085
     6086/* Line 1806 of yacc.c  */
     6087#line 764 "parser.yy"
     6088    { (yyval.sn) = 0; }
     6089    break;
     6090
     6091  case 171:
     6092
     6093/* Line 1806 of yacc.c  */
     6094#line 770 "parser.yy"
     6095    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     6096    break;
     6097
     6098  case 172:
     6099
     6100/* Line 1806 of yacc.c  */
     6101#line 772 "parser.yy"
     6102    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     6103    break;
     6104
     6105  case 173:
     6106
     6107/* Line 1806 of yacc.c  */
     6108#line 777 "parser.yy"
     6109    { (yyval.sn) = 0; }
     6110    break;
     6111
     6112  case 175:
     6113
     6114/* Line 1806 of yacc.c  */
     6115#line 783 "parser.yy"
    60716116    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    60726117    break;
    60736118
    6074   case 169:
    6075 
    6076 /* Line 1806 of yacc.c  */
    6077 #line 757 "parser.yy"
     6119  case 176:
     6120
     6121/* Line 1806 of yacc.c  */
     6122#line 785 "parser.yy"
     6123    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     6124    break;
     6125
     6126  case 177:
     6127
     6128/* Line 1806 of yacc.c  */
     6129#line 787 "parser.yy"
     6130    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     6131    break;
     6132
     6133  case 178:
     6134
     6135/* Line 1806 of yacc.c  */
     6136#line 789 "parser.yy"
     6137    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     6138    break;
     6139
     6140  case 179:
     6141
     6142/* Line 1806 of yacc.c  */
     6143#line 794 "parser.yy"
     6144    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     6145    break;
     6146
     6147  case 181:
     6148
     6149/* Line 1806 of yacc.c  */
     6150#line 800 "parser.yy"
    60786151    { (yyval.sn) = 0; }
    60796152    break;
    60806153
    6081   case 171:
    6082 
    6083 /* Line 1806 of yacc.c  */
    6084 #line 763 "parser.yy"
    6085     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    6086     break;
    6087 
    6088   case 172:
    6089 
    6090 /* Line 1806 of yacc.c  */
    6091 #line 765 "parser.yy"
    6092     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    6093     break;
    6094 
    6095   case 173:
    6096 
    6097 /* Line 1806 of yacc.c  */
    6098 #line 770 "parser.yy"
     6154  case 182:
     6155
     6156/* Line 1806 of yacc.c  */
     6157#line 802 "parser.yy"
    60996158    { (yyval.sn) = 0; }
    61006159    break;
    61016160
    6102   case 175:
    6103 
    6104 /* Line 1806 of yacc.c  */
    6105 #line 776 "parser.yy"
    6106     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    6107     break;
    6108 
    6109   case 176:
    6110 
    6111 /* Line 1806 of yacc.c  */
    6112 #line 778 "parser.yy"
    6113     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
    6114     break;
    6115 
    6116   case 177:
    6117 
    6118 /* Line 1806 of yacc.c  */
    6119 #line 780 "parser.yy"
    6120     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    6121     break;
    6122 
    6123   case 178:
    6124 
    6125 /* Line 1806 of yacc.c  */
    6126 #line 782 "parser.yy"
    6127     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
    6128     break;
    6129 
    6130   case 179:
    6131 
    6132 /* Line 1806 of yacc.c  */
    6133 #line 787 "parser.yy"
    6134     { (yyval.sn) = 0; }
    6135     break;
    6136 
    6137   case 181:
    6138 
    6139 /* Line 1806 of yacc.c  */
    6140 #line 792 "parser.yy"
    6141     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    6142     break;
    6143 
    6144   case 182:
    6145 
    6146 /* Line 1806 of yacc.c  */
    6147 #line 793 "parser.yy"
    6148     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    6149     break;
    6150 
    61516161  case 183:
    61526162
    61536163/* Line 1806 of yacc.c  */
    6154 #line 798 "parser.yy"
     6164#line 807 "parser.yy"
    61556165    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    61566166    break;
     
    61596169
    61606170/* Line 1806 of yacc.c  */
    6161 #line 800 "parser.yy"
     6171#line 809 "parser.yy"
    61626172    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    61636173    break;
     
    61666176
    61676177/* Line 1806 of yacc.c  */
    6168 #line 802 "parser.yy"
     6178#line 811 "parser.yy"
    61696179    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    61706180    break;
     
    61736183
    61746184/* Line 1806 of yacc.c  */
    6175 #line 807 "parser.yy"
     6185#line 816 "parser.yy"
    61766186    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    61776187    break;
     
    61806190
    61816191/* Line 1806 of yacc.c  */
    6182 #line 809 "parser.yy"
     6192#line 818 "parser.yy"
    61836193    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    61846194    break;
     
    61876197
    61886198/* Line 1806 of yacc.c  */
    6189 #line 814 "parser.yy"
     6199#line 823 "parser.yy"
    61906200    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    61916201    break;
     
    61946204
    61956205/* Line 1806 of yacc.c  */
    6196 #line 818 "parser.yy"
     6206#line 827 "parser.yy"
    61976207    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    61986208    break;
     
    62016211
    62026212/* Line 1806 of yacc.c  */
    6203 #line 821 "parser.yy"
     6213#line 830 "parser.yy"
    62046214    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    62056215    break;
     
    62086218
    62096219/* Line 1806 of yacc.c  */
    6210 #line 825 "parser.yy"
     6220#line 834 "parser.yy"
    62116221    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    62126222    break;
     
    62156225
    62166226/* Line 1806 of yacc.c  */
    6217 #line 828 "parser.yy"
     6227#line 837 "parser.yy"
    62186228    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    62196229    break;
     
    62226232
    62236233/* Line 1806 of yacc.c  */
    6224 #line 832 "parser.yy"
     6234#line 841 "parser.yy"
    62256235    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    62266236    break;
     
    62296239
    62306240/* Line 1806 of yacc.c  */
    6231 #line 834 "parser.yy"
     6241#line 843 "parser.yy"
    62326242    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    62336243    break;
     
    62366246
    62376247/* Line 1806 of yacc.c  */
    6238 #line 836 "parser.yy"
     6248#line 845 "parser.yy"
    62396249    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    62406250    break;
     
    62436253
    62446254/* Line 1806 of yacc.c  */
    6245 #line 840 "parser.yy"
     6255#line 849 "parser.yy"
    62466256    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    62476257    break;
     
    62506260
    62516261/* Line 1806 of yacc.c  */
    6252 #line 842 "parser.yy"
     6262#line 851 "parser.yy"
    62536263    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    62546264    break;
     
    62576267
    62586268/* Line 1806 of yacc.c  */
    6259 #line 849 "parser.yy"
     6269#line 858 "parser.yy"
    62606270    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    62616271    break;
     
    62646274
    62656275/* Line 1806 of yacc.c  */
    6266 #line 851 "parser.yy"
     6276#line 860 "parser.yy"
    62676277    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    62686278    break;
     
    62716281
    62726282/* Line 1806 of yacc.c  */
    6273 #line 853 "parser.yy"
     6283#line 862 "parser.yy"
    62746284    {
    62756285                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    62816291
    62826292/* Line 1806 of yacc.c  */
    6283 #line 864 "parser.yy"
     6293#line 873 "parser.yy"
    62846294    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    62856295    break;
     
    62886298
    62896299/* Line 1806 of yacc.c  */
    6290 #line 866 "parser.yy"
     6300#line 875 "parser.yy"
    62916301    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    62926302    break;
     
    62956305
    62966306/* Line 1806 of yacc.c  */
    6297 #line 868 "parser.yy"
     6307#line 877 "parser.yy"
    62986308    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    62996309    break;
     
    63026312
    63036313/* Line 1806 of yacc.c  */
    6304 #line 870 "parser.yy"
     6314#line 879 "parser.yy"
    63056315    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    63066316    break;
     
    63096319
    63106320/* Line 1806 of yacc.c  */
    6311 #line 875 "parser.yy"
     6321#line 884 "parser.yy"
    63126322    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    63136323    break;
     
    63166326
    63176327/* Line 1806 of yacc.c  */
    6318 #line 877 "parser.yy"
     6328#line 886 "parser.yy"
    63196329    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    63206330    break;
     
    63236333
    63246334/* Line 1806 of yacc.c  */
    6325 #line 879 "parser.yy"
     6335#line 888 "parser.yy"
    63266336    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    63276337    break;
     
    63306340
    63316341/* Line 1806 of yacc.c  */
    6332 #line 881 "parser.yy"
     6342#line 890 "parser.yy"
    63336343    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    63346344    break;
     
    63376347
    63386348/* Line 1806 of yacc.c  */
    6339 #line 886 "parser.yy"
     6349#line 895 "parser.yy"
    63406350    {
    63416351                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    63476357
    63486358/* Line 1806 of yacc.c  */
    6349 #line 900 "parser.yy"
     6359#line 909 "parser.yy"
    63506360    {
    63516361                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63576367
    63586368/* Line 1806 of yacc.c  */
    6359 #line 905 "parser.yy"
     6369#line 914 "parser.yy"
    63606370    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    63616371    break;
     
    63646374
    63656375/* Line 1806 of yacc.c  */
    6366 #line 907 "parser.yy"
     6376#line 916 "parser.yy"
    63676377    {
    63686378                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63746384
    63756385/* Line 1806 of yacc.c  */
    6376 #line 916 "parser.yy"
     6386#line 925 "parser.yy"
    63776387    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
    63786388    break;
     
    63816391
    63826392/* Line 1806 of yacc.c  */
    6383 #line 918 "parser.yy"
     6393#line 927 "parser.yy"
    63846394    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
    63856395    break;
     
    63886398
    63896399/* Line 1806 of yacc.c  */
    6390 #line 920 "parser.yy"
     6400#line 929 "parser.yy"
    63916401    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
    63926402    break;
     
    63956405
    63966406/* Line 1806 of yacc.c  */
    6397 #line 922 "parser.yy"
     6407#line 931 "parser.yy"
    63986408    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
    63996409    break;
     
    64026412
    64036413/* Line 1806 of yacc.c  */
    6404 #line 924 "parser.yy"
     6414#line 933 "parser.yy"
    64056415    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
    64066416    break;
     
    64096419
    64106420/* Line 1806 of yacc.c  */
    6411 #line 929 "parser.yy"
     6421#line 938 "parser.yy"
    64126422    { (yyval.flag) = false; }
    64136423    break;
     
    64166426
    64176427/* Line 1806 of yacc.c  */
    6418 #line 931 "parser.yy"
     6428#line 940 "parser.yy"
    64196429    { (yyval.flag) = true; }
    64206430    break;
     
    64236433
    64246434/* Line 1806 of yacc.c  */
    6425 #line 936 "parser.yy"
     6435#line 945 "parser.yy"
    64266436    { (yyval.en) = 0; }
    64276437    break;
     
    64306440
    64316441/* Line 1806 of yacc.c  */
    6432 #line 943 "parser.yy"
     6442#line 952 "parser.yy"
    64336443    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    64346444    break;
     
    64376447
    64386448/* Line 1806 of yacc.c  */
    6439 #line 948 "parser.yy"
     6449#line 957 "parser.yy"
    64406450    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
    64416451    break;
     
    64446454
    64456455/* Line 1806 of yacc.c  */
    6446 #line 950 "parser.yy"
     6456#line 959 "parser.yy"
    64476457    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
    64486458    break;
     
    64516461
    64526462/* Line 1806 of yacc.c  */
    6453 #line 955 "parser.yy"
     6463#line 964 "parser.yy"
    64546464    { (yyval.constant) = 0; }
    64556465    break;
     
    64586468
    64596469/* Line 1806 of yacc.c  */
    6460 #line 957 "parser.yy"
     6470#line 966 "parser.yy"
    64616471    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    64626472    break;
     
    64656475
    64666476/* Line 1806 of yacc.c  */
    6467 #line 959 "parser.yy"
     6477#line 968 "parser.yy"
    64686478    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    64696479    break;
     
    64726482
    64736483/* Line 1806 of yacc.c  */
    6474 #line 964 "parser.yy"
     6484#line 973 "parser.yy"
    64756485    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
    64766486    break;
     
    64796489
    64806490/* Line 1806 of yacc.c  */
    6481 #line 966 "parser.yy"
     6491#line 975 "parser.yy"
    64826492    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
    64836493    break;
     
    64866496
    64876497/* Line 1806 of yacc.c  */
    6488 #line 973 "parser.yy"
     6498#line 982 "parser.yy"
    64896499    { (yyval.decl) = 0; }
    64906500    break;
     
    64936503
    64946504/* Line 1806 of yacc.c  */
    6495 #line 980 "parser.yy"
     6505#line 989 "parser.yy"
    64966506    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    64976507    break;
     
    65006510
    65016511/* Line 1806 of yacc.c  */
    6502 #line 985 "parser.yy"
     6512#line 994 "parser.yy"
    65036513    { (yyval.decl) = 0; }
    65046514    break;
     
    65076517
    65086518/* Line 1806 of yacc.c  */
    6509 #line 992 "parser.yy"
     6519#line 1001 "parser.yy"
    65106520    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    65116521    break;
     
    65146524
    65156525/* Line 1806 of yacc.c  */
    6516 #line 1006 "parser.yy"
     6526#line 1015 "parser.yy"
    65176527    {}
    65186528    break;
     
    65216531
    65226532/* Line 1806 of yacc.c  */
    6523 #line 1007 "parser.yy"
     6533#line 1016 "parser.yy"
    65246534    {}
    65256535    break;
     
    65286538
    65296539/* Line 1806 of yacc.c  */
    6530 #line 1036 "parser.yy"
     6540#line 1045 "parser.yy"
    65316541    {
    65326542                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65386548
    65396549/* Line 1806 of yacc.c  */
    6540 #line 1043 "parser.yy"
     6550#line 1052 "parser.yy"
    65416551    {
    65426552                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65486558
    65496559/* Line 1806 of yacc.c  */
    6550 #line 1048 "parser.yy"
     6560#line 1057 "parser.yy"
    65516561    {
    65526562                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    65586568
    65596569/* Line 1806 of yacc.c  */
    6560 #line 1058 "parser.yy"
     6570#line 1067 "parser.yy"
    65616571    {
    65626572                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65686578
    65696579/* Line 1806 of yacc.c  */
    6570 #line 1063 "parser.yy"
     6580#line 1072 "parser.yy"
    65716581    {
    65726582                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65786588
    65796589/* Line 1806 of yacc.c  */
    6580 #line 1068 "parser.yy"
     6590#line 1077 "parser.yy"
    65816591    {
    65826592                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    65886598
    65896599/* Line 1806 of yacc.c  */
    6590 #line 1076 "parser.yy"
     6600#line 1085 "parser.yy"
    65916601    {
    65926602                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65986608
    65996609/* Line 1806 of yacc.c  */
    6600 #line 1081 "parser.yy"
     6610#line 1090 "parser.yy"
    66016611    {
    66026612                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66086618
    66096619/* Line 1806 of yacc.c  */
    6610 #line 1086 "parser.yy"
     6620#line 1095 "parser.yy"
    66116621    {
    66126622                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66186628
    66196629/* Line 1806 of yacc.c  */
    6620 #line 1091 "parser.yy"
     6630#line 1100 "parser.yy"
    66216631    {
    66226632                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66286638
    66296639/* Line 1806 of yacc.c  */
    6630 #line 1096 "parser.yy"
     6640#line 1105 "parser.yy"
    66316641    {
    66326642                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    66386648
    66396649/* Line 1806 of yacc.c  */
    6640 #line 1104 "parser.yy"
     6650#line 1113 "parser.yy"
    66416651    {
    66426652                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    66476657
    66486658/* Line 1806 of yacc.c  */
    6649 #line 1127 "parser.yy"
     6659#line 1136 "parser.yy"
    66506660    {
    66516661                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    66566666
    66576667/* Line 1806 of yacc.c  */
    6658 #line 1131 "parser.yy"
     6668#line 1140 "parser.yy"
    66596669    {
    66606670                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    66656675
    66666676/* Line 1806 of yacc.c  */
    6667 #line 1138 "parser.yy"
     6677#line 1147 "parser.yy"
    66686678    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    66696679    break;
     
    66726682
    66736683/* Line 1806 of yacc.c  */
    6674 #line 1142 "parser.yy"
     6684#line 1151 "parser.yy"
    66756685    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    66766686    break;
     
    66796689
    66806690/* Line 1806 of yacc.c  */
    6681 #line 1147 "parser.yy"
     6691#line 1156 "parser.yy"
    66826692    {
    66836693                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    66896699
    66906700/* Line 1806 of yacc.c  */
    6691 #line 1152 "parser.yy"
     6701#line 1161 "parser.yy"
    66926702    {
    66936703                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    66996709
    67006710/* Line 1806 of yacc.c  */
    6701 #line 1157 "parser.yy"
     6711#line 1166 "parser.yy"
    67026712    {
    67036713                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    67096719
    67106720/* Line 1806 of yacc.c  */
    6711 #line 1168 "parser.yy"
     6721#line 1177 "parser.yy"
    67126722    {
    67136723                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67196729
    67206730/* Line 1806 of yacc.c  */
    6721 #line 1173 "parser.yy"
     6731#line 1182 "parser.yy"
    67226732    {
    67236733                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67296739
    67306740/* Line 1806 of yacc.c  */
    6731 #line 1178 "parser.yy"
     6741#line 1187 "parser.yy"
    67326742    {
    67336743                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67396749
    67406750/* Line 1806 of yacc.c  */
    6741 #line 1183 "parser.yy"
     6751#line 1192 "parser.yy"
    67426752    {
    67436753                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67496759
    67506760/* Line 1806 of yacc.c  */
    6751 #line 1188 "parser.yy"
     6761#line 1197 "parser.yy"
    67526762    {
    67536763                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67596769
    67606770/* Line 1806 of yacc.c  */
    6761 #line 1197 "parser.yy"
     6771#line 1206 "parser.yy"
    67626772    {
    67636773                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    67696779
    67706780/* Line 1806 of yacc.c  */
    6771 #line 1202 "parser.yy"
     6781#line 1211 "parser.yy"
    67726782    {
    67736783                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    67796789
    67806790/* Line 1806 of yacc.c  */
    6781 #line 1219 "parser.yy"
     6791#line 1228 "parser.yy"
    67826792    {
    67836793                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    67896799
    67906800/* Line 1806 of yacc.c  */
    6791 #line 1224 "parser.yy"
     6801#line 1233 "parser.yy"
    67926802    {
    67936803                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    67996809
    68006810/* Line 1806 of yacc.c  */
    6801 #line 1246 "parser.yy"
     6811#line 1255 "parser.yy"
    68026812    { (yyval.decl) = 0; }
    68036813    break;
     
    68066816
    68076817/* Line 1806 of yacc.c  */
    6808 #line 1258 "parser.yy"
     6818#line 1267 "parser.yy"
    68096819    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68106820    break;
     
    68136823
    68146824/* Line 1806 of yacc.c  */
    6815 #line 1269 "parser.yy"
     6825#line 1278 "parser.yy"
    68166826    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    68176827    break;
     
    68206830
    68216831/* Line 1806 of yacc.c  */
    6822 #line 1271 "parser.yy"
     6832#line 1280 "parser.yy"
    68236833    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    68246834    break;
     
    68276837
    68286838/* Line 1806 of yacc.c  */
    6829 #line 1273 "parser.yy"
     6839#line 1282 "parser.yy"
    68306840    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    68316841    break;
     
    68346844
    68356845/* Line 1806 of yacc.c  */
    6836 #line 1275 "parser.yy"
     6846#line 1284 "parser.yy"
    68376847    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    68386848    break;
     
    68416851
    68426852/* Line 1806 of yacc.c  */
    6843 #line 1277 "parser.yy"
     6853#line 1286 "parser.yy"
    68446854    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    68456855    break;
     
    68486858
    68496859/* Line 1806 of yacc.c  */
    6850 #line 1279 "parser.yy"
     6860#line 1288 "parser.yy"
    68516861    {
    68526862                        typedefTable.enterScope();
     
    68576867
    68586868/* Line 1806 of yacc.c  */
    6859 #line 1283 "parser.yy"
     6869#line 1292 "parser.yy"
    68606870    {
    68616871                        typedefTable.leaveScope();
     
    68676877
    68686878/* Line 1806 of yacc.c  */
    6869 #line 1292 "parser.yy"
     6879#line 1301 "parser.yy"
    68706880    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68716881    break;
     
    68746884
    68756885/* Line 1806 of yacc.c  */
    6876 #line 1294 "parser.yy"
     6886#line 1303 "parser.yy"
    68776887    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68786888    break;
     
    68816891
    68826892/* Line 1806 of yacc.c  */
    6883 #line 1305 "parser.yy"
     6893#line 1314 "parser.yy"
    68846894    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68856895    break;
     
    68886898
    68896899/* Line 1806 of yacc.c  */
    6890 #line 1314 "parser.yy"
     6900#line 1323 "parser.yy"
    68916901    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    68926902    break;
     
    68956905
    68966906/* Line 1806 of yacc.c  */
    6897 #line 1316 "parser.yy"
     6907#line 1325 "parser.yy"
    68986908    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    68996909    break;
     
    69026912
    69036913/* Line 1806 of yacc.c  */
    6904 #line 1318 "parser.yy"
     6914#line 1327 "parser.yy"
    69056915    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    69066916    break;
     
    69096919
    69106920/* Line 1806 of yacc.c  */
    6911 #line 1320 "parser.yy"
     6921#line 1329 "parser.yy"
    69126922    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    69136923    break;
     
    69166926
    69176927/* Line 1806 of yacc.c  */
    6918 #line 1322 "parser.yy"
     6928#line 1331 "parser.yy"
    69196929    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    69206930    break;
     
    69236933
    69246934/* Line 1806 of yacc.c  */
    6925 #line 1324 "parser.yy"
     6935#line 1333 "parser.yy"
    69266936    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    69276937    break;
     
    69306940
    69316941/* Line 1806 of yacc.c  */
    6932 #line 1326 "parser.yy"
     6942#line 1335 "parser.yy"
    69336943    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    69346944    break;
     
    69376947
    69386948/* Line 1806 of yacc.c  */
    6939 #line 1328 "parser.yy"
     6949#line 1337 "parser.yy"
    69406950    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    69416951    break;
     
    69446954
    69456955/* Line 1806 of yacc.c  */
    6946 #line 1333 "parser.yy"
     6956#line 1342 "parser.yy"
    69476957    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    69486958    break;
     
    69516961
    69526962/* Line 1806 of yacc.c  */
    6953 #line 1335 "parser.yy"
     6963#line 1344 "parser.yy"
    69546964    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    69556965    break;
     
    69586968
    69596969/* Line 1806 of yacc.c  */
    6960 #line 1337 "parser.yy"
     6970#line 1346 "parser.yy"
    69616971    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    69626972    break;
     
    69656975
    69666976/* Line 1806 of yacc.c  */
    6967 #line 1339 "parser.yy"
     6977#line 1348 "parser.yy"
    69686978    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    69696979    break;
     
    69726982
    69736983/* Line 1806 of yacc.c  */
    6974 #line 1341 "parser.yy"
     6984#line 1350 "parser.yy"
    69756985    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    69766986    break;
     
    69796989
    69806990/* Line 1806 of yacc.c  */
    6981 #line 1343 "parser.yy"
     6991#line 1352 "parser.yy"
    69826992    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    69836993    break;
     
    69866996
    69876997/* Line 1806 of yacc.c  */
    6988 #line 1345 "parser.yy"
     6998#line 1354 "parser.yy"
    69896999    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    69907000    break;
     
    69937003
    69947004/* Line 1806 of yacc.c  */
    6995 #line 1347 "parser.yy"
     7005#line 1356 "parser.yy"
    69967006    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    69977007    break;
     
    70007010
    70017011/* Line 1806 of yacc.c  */
    7002 #line 1349 "parser.yy"
     7012#line 1358 "parser.yy"
    70037013    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    70047014    break;
     
    70077017
    70087018/* Line 1806 of yacc.c  */
    7009 #line 1351 "parser.yy"
     7019#line 1360 "parser.yy"
    70107020    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    70117021    break;
     
    70147024
    70157025/* Line 1806 of yacc.c  */
    7016 #line 1353 "parser.yy"
     7026#line 1362 "parser.yy"
    70177027    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    70187028    break;
     
    70217031
    70227032/* Line 1806 of yacc.c  */
    7023 #line 1355 "parser.yy"
     7033#line 1364 "parser.yy"
    70247034    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    70257035    break;
     
    70287038
    70297039/* Line 1806 of yacc.c  */
    7030 #line 1357 "parser.yy"
     7040#line 1366 "parser.yy"
    70317041    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    70327042    break;
     
    70357045
    70367046/* Line 1806 of yacc.c  */
    7037 #line 1364 "parser.yy"
     7047#line 1373 "parser.yy"
    70387048    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70397049    break;
     
    70427052
    70437053/* Line 1806 of yacc.c  */
    7044 #line 1366 "parser.yy"
     7054#line 1375 "parser.yy"
    70457055    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70467056    break;
     
    70497059
    70507060/* Line 1806 of yacc.c  */
    7051 #line 1368 "parser.yy"
     7061#line 1377 "parser.yy"
    70527062    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    70537063    break;
     
    70567066
    70577067/* Line 1806 of yacc.c  */
    7058 #line 1370 "parser.yy"
     7068#line 1379 "parser.yy"
    70597069    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    70607070    break;
     
    70637073
    70647074/* Line 1806 of yacc.c  */
    7065 #line 1376 "parser.yy"
     7075#line 1385 "parser.yy"
    70667076    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    70677077    break;
     
    70707080
    70717081/* Line 1806 of yacc.c  */
    7072 #line 1383 "parser.yy"
     7082#line 1392 "parser.yy"
    70737083    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70747084    break;
     
    70777087
    70787088/* Line 1806 of yacc.c  */
    7079 #line 1385 "parser.yy"
     7089#line 1394 "parser.yy"
    70807090    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70817091    break;
     
    70847094
    70857095/* Line 1806 of yacc.c  */
    7086 #line 1387 "parser.yy"
     7096#line 1396 "parser.yy"
    70877097    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    70887098    break;
     
    70917101
    70927102/* Line 1806 of yacc.c  */
    7093 #line 1392 "parser.yy"
     7103#line 1401 "parser.yy"
    70947104    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    70957105    break;
     
    70987108
    70997109/* Line 1806 of yacc.c  */
    7100 #line 1394 "parser.yy"
     7110#line 1403 "parser.yy"
    71017111    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    71027112    break;
     
    71057115
    71067116/* Line 1806 of yacc.c  */
    7107 #line 1396 "parser.yy"
     7117#line 1405 "parser.yy"
    71087118    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    71097119    break;
     
    71127122
    71137123/* Line 1806 of yacc.c  */
    7114 #line 1398 "parser.yy"
     7124#line 1407 "parser.yy"
    71157125    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    71167126    break;
     
    71197129
    71207130/* Line 1806 of yacc.c  */
    7121 #line 1404 "parser.yy"
     7131#line 1413 "parser.yy"
    71227132    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71237133    break;
     
    71267136
    71277137/* Line 1806 of yacc.c  */
    7128 #line 1406 "parser.yy"
     7138#line 1415 "parser.yy"
    71297139    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71307140    break;
     
    71337143
    71347144/* Line 1806 of yacc.c  */
    7135 #line 1408 "parser.yy"
     7145#line 1417 "parser.yy"
    71367146    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    71377147    break;
     
    71407150
    71417151/* Line 1806 of yacc.c  */
    7142 #line 1414 "parser.yy"
     7152#line 1423 "parser.yy"
    71437153    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71447154    break;
     
    71477157
    71487158/* Line 1806 of yacc.c  */
    7149 #line 1416 "parser.yy"
     7159#line 1425 "parser.yy"
    71507160    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71517161    break;
     
    71547164
    71557165/* Line 1806 of yacc.c  */
    7156 #line 1422 "parser.yy"
     7166#line 1431 "parser.yy"
    71577167    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71587168    break;
     
    71617171
    71627172/* Line 1806 of yacc.c  */
    7163 #line 1424 "parser.yy"
     7173#line 1433 "parser.yy"
    71647174    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71657175    break;
     
    71687178
    71697179/* Line 1806 of yacc.c  */
    7170 #line 1426 "parser.yy"
     7180#line 1435 "parser.yy"
    71717181    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    71727182    break;
     
    71757185
    71767186/* Line 1806 of yacc.c  */
    7177 #line 1431 "parser.yy"
     7187#line 1440 "parser.yy"
    71787188    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    71797189    break;
     
    71827192
    71837193/* Line 1806 of yacc.c  */
    7184 #line 1433 "parser.yy"
     7194#line 1442 "parser.yy"
    71857195    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    71867196    break;
     
    71897199
    71907200/* Line 1806 of yacc.c  */
    7191 #line 1435 "parser.yy"
     7201#line 1444 "parser.yy"
    71927202    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    71937203    break;
     
    71967206
    71977207/* Line 1806 of yacc.c  */
    7198 #line 1445 "parser.yy"
     7208#line 1454 "parser.yy"
    71997209    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    72007210    break;
     
    72037213
    72047214/* Line 1806 of yacc.c  */
    7205 #line 1447 "parser.yy"
     7215#line 1456 "parser.yy"
    72067216    {
    72077217                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    72137223
    72147224/* Line 1806 of yacc.c  */
    7215 #line 1452 "parser.yy"
     7225#line 1461 "parser.yy"
    72167226    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    72177227    break;
     
    72207230
    72217231/* Line 1806 of yacc.c  */
    7222 #line 1454 "parser.yy"
    7223     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }
     7232#line 1463 "parser.yy"
     7233    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl) ); }
    72247234    break;
    72257235
     
    72277237
    72287238/* Line 1806 of yacc.c  */
    7229 #line 1456 "parser.yy"
     7239#line 1465 "parser.yy"
    72307240    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    72317241    break;
     
    72347244
    72357245/* Line 1806 of yacc.c  */
    7236 #line 1458 "parser.yy"
     7246#line 1467 "parser.yy"
    72377247    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    72387248    break;
     
    72417251
    72427252/* Line 1806 of yacc.c  */
    7243 #line 1463 "parser.yy"
     7253#line 1472 "parser.yy"
    72447254    { (yyval.aggKey) = DeclarationNode::Struct; }
    72457255    break;
     
    72487258
    72497259/* Line 1806 of yacc.c  */
    7250 #line 1465 "parser.yy"
     7260#line 1474 "parser.yy"
    72517261    { (yyval.aggKey) = DeclarationNode::Union; }
    72527262    break;
     
    72557265
    72567266/* Line 1806 of yacc.c  */
    7257 #line 1470 "parser.yy"
     7267#line 1479 "parser.yy"
    72587268    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    72597269    break;
     
    72627272
    72637273/* Line 1806 of yacc.c  */
    7264 #line 1472 "parser.yy"
     7274#line 1481 "parser.yy"
    72657275    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    72667276    break;
     
    72697279
    72707280/* Line 1806 of yacc.c  */
    7271 #line 1478 "parser.yy"
     7281#line 1487 "parser.yy"
    72727282    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
    72737283    break;
     
    72767286
    72777287/* Line 1806 of yacc.c  */
    7278 #line 1481 "parser.yy"
     7288#line 1490 "parser.yy"
    72797289    {   // mark all fields in list
    72807290                        for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     
    72877297
    72887298/* Line 1806 of yacc.c  */
    7289 #line 1491 "parser.yy"
     7299#line 1500 "parser.yy"
    72907300    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    72917301    break;
     
    72947304
    72957305/* Line 1806 of yacc.c  */
    7296 #line 1493 "parser.yy"
     7306#line 1502 "parser.yy"
    72977307    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    72987308    break;
     
    73017311
    73027312/* Line 1806 of yacc.c  */
    7303 #line 1495 "parser.yy"
     7313#line 1504 "parser.yy"
    73047314    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    73057315    break;
     
    73087318
    73097319/* Line 1806 of yacc.c  */
    7310 #line 1500 "parser.yy"
     7320#line 1509 "parser.yy"
    73117321    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73127322    break;
     
    73157325
    73167326/* Line 1806 of yacc.c  */
    7317 #line 1502 "parser.yy"
     7327#line 1511 "parser.yy"
    73187328    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    73197329    break;
     
    73227332
    73237333/* Line 1806 of yacc.c  */
    7324 #line 1507 "parser.yy"
     7334#line 1516 "parser.yy"
    73257335    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    73267336    break;
     
    73297339
    73307340/* Line 1806 of yacc.c  */
    7331 #line 1509 "parser.yy"
     7341#line 1518 "parser.yy"
    73327342    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    73337343    break;
     
    73367346
    73377347/* Line 1806 of yacc.c  */
    7338 #line 1512 "parser.yy"
     7348#line 1521 "parser.yy"
    73397349    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    73407350    break;
     
    73437353
    73447354/* Line 1806 of yacc.c  */
    7345 #line 1515 "parser.yy"
     7355#line 1524 "parser.yy"
    73467356    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    73477357    break;
     
    73507360
    73517361/* Line 1806 of yacc.c  */
    7352 #line 1521 "parser.yy"
     7362#line 1530 "parser.yy"
    73537363    { (yyval.en) = 0; }
    73547364    break;
     
    73577367
    73587368/* Line 1806 of yacc.c  */
    7359 #line 1523 "parser.yy"
     7369#line 1532 "parser.yy"
    73607370    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    73617371    break;
     
    73647374
    73657375/* Line 1806 of yacc.c  */
    7366 #line 1528 "parser.yy"
     7376#line 1537 "parser.yy"
    73677377    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    73687378    break;
     
    73717381
    73727382/* Line 1806 of yacc.c  */
    7373 #line 1537 "parser.yy"
     7383#line 1546 "parser.yy"
    73747384    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    73757385    break;
     
    73787388
    73797389/* Line 1806 of yacc.c  */
    7380 #line 1539 "parser.yy"
     7390#line 1548 "parser.yy"
    73817391    {
    73827392                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    73887398
    73897399/* Line 1806 of yacc.c  */
    7390 #line 1544 "parser.yy"
     7400#line 1553 "parser.yy"
    73917401    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    73927402    break;
     
    73957405
    73967406/* Line 1806 of yacc.c  */
    7397 #line 1546 "parser.yy"
     7407#line 1555 "parser.yy"
    73987408    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
    73997409    break;
     
    74027412
    74037413/* Line 1806 of yacc.c  */
    7404 #line 1551 "parser.yy"
     7414#line 1560 "parser.yy"
    74057415    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    74067416    break;
     
    74097419
    74107420/* Line 1806 of yacc.c  */
    7411 #line 1553 "parser.yy"
     7421#line 1562 "parser.yy"
    74127422    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    74137423    break;
     
    74167426
    74177427/* Line 1806 of yacc.c  */
    7418 #line 1558 "parser.yy"
     7428#line 1567 "parser.yy"
    74197429    { (yyval.en) = 0; }
    74207430    break;
     
    74237433
    74247434/* Line 1806 of yacc.c  */
    7425 #line 1560 "parser.yy"
     7435#line 1569 "parser.yy"
    74267436    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    74277437    break;
     
    74307440
    74317441/* Line 1806 of yacc.c  */
    7432 #line 1567 "parser.yy"
     7442#line 1576 "parser.yy"
    74337443    { (yyval.decl) = 0; }
    74347444    break;
     
    74377447
    74387448/* Line 1806 of yacc.c  */
    7439 #line 1575 "parser.yy"
     7449#line 1584 "parser.yy"
    74407450    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74417451    break;
     
    74447454
    74457455/* Line 1806 of yacc.c  */
    7446 #line 1577 "parser.yy"
     7456#line 1586 "parser.yy"
    74477457    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74487458    break;
     
    74517461
    74527462/* Line 1806 of yacc.c  */
    7453 #line 1579 "parser.yy"
     7463#line 1588 "parser.yy"
    74547464    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74557465    break;
     
    74587468
    74597469/* Line 1806 of yacc.c  */
    7460 #line 1587 "parser.yy"
     7470#line 1596 "parser.yy"
    74617471    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74627472    break;
     
    74657475
    74667476/* Line 1806 of yacc.c  */
    7467 #line 1589 "parser.yy"
     7477#line 1598 "parser.yy"
    74687478    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74697479    break;
     
    74727482
    74737483/* Line 1806 of yacc.c  */
    7474 #line 1591 "parser.yy"
     7484#line 1600 "parser.yy"
    74757485    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    74767486    break;
     
    74797489
    74807490/* Line 1806 of yacc.c  */
    7481 #line 1597 "parser.yy"
     7491#line 1606 "parser.yy"
    74827492    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74837493    break;
     
    74867496
    74877497/* Line 1806 of yacc.c  */
    7488 #line 1602 "parser.yy"
     7498#line 1611 "parser.yy"
    74897499    { (yyval.decl) = 0; }
    74907500    break;
     
    74937503
    74947504/* Line 1806 of yacc.c  */
    7495 #line 1609 "parser.yy"
     7505#line 1618 "parser.yy"
    74967506    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74977507    break;
     
    75007510
    75017511/* Line 1806 of yacc.c  */
    7502 #line 1616 "parser.yy"
     7512#line 1625 "parser.yy"
    75037513    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    75047514    break;
     
    75077517
    75087518/* Line 1806 of yacc.c  */
    7509 #line 1618 "parser.yy"
     7519#line 1627 "parser.yy"
    75107520    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    75117521    break;
     
    75147524
    75157525/* Line 1806 of yacc.c  */
    7516 #line 1627 "parser.yy"
     7526#line 1636 "parser.yy"
    75177527    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    75187528    break;
     
    75217531
    75227532/* Line 1806 of yacc.c  */
    7523 #line 1630 "parser.yy"
     7533#line 1639 "parser.yy"
    75247534    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    75257535    break;
     
    75287538
    75297539/* Line 1806 of yacc.c  */
    7530 #line 1632 "parser.yy"
     7540#line 1641 "parser.yy"
    75317541    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    75327542    break;
     
    75357545
    75367546/* Line 1806 of yacc.c  */
    7537 #line 1642 "parser.yy"
     7547#line 1651 "parser.yy"
    75387548    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75397549    break;
     
    75427552
    75437553/* Line 1806 of yacc.c  */
    7544 #line 1648 "parser.yy"
     7554#line 1657 "parser.yy"
    75457555    {
    75467556                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75527562
    75537563/* Line 1806 of yacc.c  */
    7554 #line 1653 "parser.yy"
     7564#line 1662 "parser.yy"
    75557565    {
    75567566                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75627572
    75637573/* Line 1806 of yacc.c  */
    7564 #line 1662 "parser.yy"
     7574#line 1671 "parser.yy"
    75657575    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    75667576    break;
     
    75697579
    75707580/* Line 1806 of yacc.c  */
    7571 #line 1671 "parser.yy"
     7581#line 1680 "parser.yy"
    75727582    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    75737583    break;
     
    75767586
    75777587/* Line 1806 of yacc.c  */
    7578 #line 1673 "parser.yy"
     7588#line 1682 "parser.yy"
    75797589    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    75807590    break;
     
    75837593
    75847594/* Line 1806 of yacc.c  */
    7585 #line 1698 "parser.yy"
     7595#line 1707 "parser.yy"
    75867596    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    75877597    break;
     
    75907600
    75917601/* Line 1806 of yacc.c  */
    7592 #line 1706 "parser.yy"
     7602#line 1715 "parser.yy"
    75937603    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    75947604    break;
     
    75977607
    75987608/* Line 1806 of yacc.c  */
    7599 #line 1711 "parser.yy"
     7609#line 1720 "parser.yy"
    76007610    { (yyval.in) = 0; }
    76017611    break;
     
    76047614
    76057615/* Line 1806 of yacc.c  */
    7606 #line 1713 "parser.yy"
     7616#line 1722 "parser.yy"
    76077617    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    76087618    break;
     
    76117621
    76127622/* Line 1806 of yacc.c  */
    7613 #line 1715 "parser.yy"
     7623#line 1724 "parser.yy"
    76147624    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
    76157625    break;
     
    76187628
    76197629/* Line 1806 of yacc.c  */
    7620 #line 1719 "parser.yy"
     7630#line 1728 "parser.yy"
    76217631    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    76227632    break;
     
    76257635
    76267636/* Line 1806 of yacc.c  */
    7627 #line 1720 "parser.yy"
     7637#line 1729 "parser.yy"
    76287638    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    76297639    break;
     
    76327642
    76337643/* Line 1806 of yacc.c  */
    7634 #line 1725 "parser.yy"
     7644#line 1734 "parser.yy"
    76357645    { (yyval.in) = 0; }
    76367646    break;
     
    76397649
    76407650/* Line 1806 of yacc.c  */
    7641 #line 1727 "parser.yy"
     7651#line 1736 "parser.yy"
    76427652    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    76437653    break;
     
    76467656
    76477657/* Line 1806 of yacc.c  */
    7648 #line 1728 "parser.yy"
     7658#line 1737 "parser.yy"
    76497659    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    76507660    break;
     
    76537663
    76547664/* Line 1806 of yacc.c  */
    7655 #line 1730 "parser.yy"
     7665#line 1739 "parser.yy"
    76567666    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    76577667    break;
     
    76607670
    76617671/* Line 1806 of yacc.c  */
    7662 #line 1746 "parser.yy"
     7672#line 1755 "parser.yy"
    76637673    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    76647674    break;
     
    76677677
    76687678/* Line 1806 of yacc.c  */
    7669 #line 1752 "parser.yy"
     7679#line 1761 "parser.yy"
    76707680    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    76717681    break;
     
    76747684
    76757685/* Line 1806 of yacc.c  */
    7676 #line 1760 "parser.yy"
     7686#line 1769 "parser.yy"
    76777687    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    76787688    break;
     
    76817691
    76827692/* Line 1806 of yacc.c  */
    7683 #line 1762 "parser.yy"
     7693#line 1771 "parser.yy"
    76847694    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    76857695    break;
     
    76887698
    76897699/* Line 1806 of yacc.c  */
    7690 #line 1765 "parser.yy"
     7700#line 1774 "parser.yy"
    76917701    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    76927702    break;
     
    76957705
    76967706/* Line 1806 of yacc.c  */
    7697 #line 1767 "parser.yy"
     7707#line 1776 "parser.yy"
    76987708    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    76997709    break;
     
    77027712
    77037713/* Line 1806 of yacc.c  */
    7704 #line 1769 "parser.yy"
     7714#line 1778 "parser.yy"
    77057715    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    77067716    break;
     
    77097719
    77107720/* Line 1806 of yacc.c  */
    7711 #line 1771 "parser.yy"
     7721#line 1780 "parser.yy"
    77127722    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    77137723    break;
     
    77167726
    77177727/* Line 1806 of yacc.c  */
    7718 #line 1795 "parser.yy"
     7728#line 1804 "parser.yy"
    77197729    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77207730    break;
     
    77237733
    77247734/* Line 1806 of yacc.c  */
    7725 #line 1797 "parser.yy"
     7735#line 1806 "parser.yy"
    77267736    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77277737    break;
     
    77307740
    77317741/* Line 1806 of yacc.c  */
    7732 #line 1799 "parser.yy"
     7742#line 1808 "parser.yy"
    77337743    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    77347744    break;
     
    77377747
    77387748/* Line 1806 of yacc.c  */
    7739 #line 1805 "parser.yy"
     7749#line 1814 "parser.yy"
    77407750    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77417751    break;
     
    77447754
    77457755/* Line 1806 of yacc.c  */
    7746 #line 1807 "parser.yy"
     7756#line 1816 "parser.yy"
    77477757    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77487758    break;
     
    77517761
    77527762/* Line 1806 of yacc.c  */
    7753 #line 1812 "parser.yy"
     7763#line 1821 "parser.yy"
    77547764    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    77557765    break;
     
    77587768
    77597769/* Line 1806 of yacc.c  */
    7760 #line 1818 "parser.yy"
     7770#line 1827 "parser.yy"
    77617771    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    77627772    break;
     
    77657775
    77667776/* Line 1806 of yacc.c  */
    7767 #line 1823 "parser.yy"
     7777#line 1832 "parser.yy"
    77687778    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    77697779    break;
     
    77727782
    77737783/* Line 1806 of yacc.c  */
    7774 #line 1825 "parser.yy"
     7784#line 1834 "parser.yy"
    77757785    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    77767786    break;
     
    77797789
    77807790/* Line 1806 of yacc.c  */
    7781 #line 1831 "parser.yy"
     7791#line 1840 "parser.yy"
    77827792    { (yyval.tclass) = DeclarationNode::Type; }
    77837793    break;
     
    77867796
    77877797/* Line 1806 of yacc.c  */
    7788 #line 1833 "parser.yy"
     7798#line 1842 "parser.yy"
    77897799    { (yyval.tclass) = DeclarationNode::Ftype; }
    77907800    break;
     
    77937803
    77947804/* Line 1806 of yacc.c  */
    7795 #line 1835 "parser.yy"
     7805#line 1844 "parser.yy"
    77967806    { (yyval.tclass) = DeclarationNode::Dtype; }
    77977807    break;
     
    78007810
    78017811/* Line 1806 of yacc.c  */
    7802 #line 1840 "parser.yy"
     7812#line 1849 "parser.yy"
    78037813    { (yyval.decl) = 0; }
    78047814    break;
     
    78077817
    78087818/* Line 1806 of yacc.c  */
    7809 #line 1842 "parser.yy"
    7810     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     7819#line 1851 "parser.yy"
     7820    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    78117821    break;
    78127822
     
    78147824
    78157825/* Line 1806 of yacc.c  */
    7816 #line 1847 "parser.yy"
     7826#line 1856 "parser.yy"
    78177827    {
    78187828                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    78247834
    78257835/* Line 1806 of yacc.c  */
    7826 #line 1852 "parser.yy"
     7836#line 1861 "parser.yy"
    78277837    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    78287838    break;
     
    78317841
    78327842/* Line 1806 of yacc.c  */
    7833 #line 1854 "parser.yy"
     7843#line 1863 "parser.yy"
    78347844    { (yyval.decl) = 0; }
    78357845    break;
     
    78387848
    78397849/* Line 1806 of yacc.c  */
    7840 #line 1859 "parser.yy"
     7850#line 1868 "parser.yy"
    78417851    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    78427852    break;
     
    78457855
    78467856/* Line 1806 of yacc.c  */
    7847 #line 1862 "parser.yy"
     7857#line 1871 "parser.yy"
    78487858    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    78497859    break;
     
    78527862
    78537863/* Line 1806 of yacc.c  */
    7854 #line 1864 "parser.yy"
     7864#line 1873 "parser.yy"
    78557865    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    78567866    break;
     
    78597869
    78607870/* Line 1806 of yacc.c  */
    7861 #line 1869 "parser.yy"
     7871#line 1878 "parser.yy"
    78627872    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78637873    break;
     
    78667876
    78677877/* Line 1806 of yacc.c  */
    7868 #line 1871 "parser.yy"
     7878#line 1880 "parser.yy"
    78697879    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    78707880    break;
     
    78737883
    78747884/* Line 1806 of yacc.c  */
    7875 #line 1873 "parser.yy"
     7885#line 1882 "parser.yy"
    78767886    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    78777887    break;
     
    78807890
    78817891/* Line 1806 of yacc.c  */
    7882 #line 1878 "parser.yy"
     7892#line 1887 "parser.yy"
    78837893    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    78847894    break;
     
    78877897
    78887898/* Line 1806 of yacc.c  */
    7889 #line 1880 "parser.yy"
     7899#line 1889 "parser.yy"
    78907900    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    78917901    break;
     
    78947904
    78957905/* Line 1806 of yacc.c  */
    7896 #line 1885 "parser.yy"
     7906#line 1894 "parser.yy"
    78977907    {
    78987908                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    79047914
    79057915/* Line 1806 of yacc.c  */
    7906 #line 1890 "parser.yy"
     7916#line 1899 "parser.yy"
    79077917    {
    79087918                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    79147924
    79157925/* Line 1806 of yacc.c  */
    7916 #line 1898 "parser.yy"
     7926#line 1907 "parser.yy"
    79177927    {
    79187928                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    79247934
    79257935/* Line 1806 of yacc.c  */
    7926 #line 1903 "parser.yy"
     7936#line 1912 "parser.yy"
    79277937    {
    79287938                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    79347944
    79357945/* Line 1806 of yacc.c  */
    7936 #line 1908 "parser.yy"
     7946#line 1917 "parser.yy"
    79377947    {
    79387948                        typedefTable.leaveTrait();
     
    79457955
    79467956/* Line 1806 of yacc.c  */
    7947 #line 1918 "parser.yy"
     7957#line 1927 "parser.yy"
    79487958    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    79497959    break;
     
    79527962
    79537963/* Line 1806 of yacc.c  */
    7954 #line 1928 "parser.yy"
     7964#line 1937 "parser.yy"
    79557965    {
    79567966                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79627972
    79637973/* Line 1806 of yacc.c  */
    7964 #line 1933 "parser.yy"
     7974#line 1942 "parser.yy"
    79657975    {
    79667976                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79727982
    79737983/* Line 1806 of yacc.c  */
    7974 #line 1938 "parser.yy"
     7984#line 1947 "parser.yy"
    79757985    {
    79767986                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    79827992
    79837993/* Line 1806 of yacc.c  */
    7984 #line 1946 "parser.yy"
     7994#line 1955 "parser.yy"
    79857995    {
    79867996                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79928002
    79938003/* Line 1806 of yacc.c  */
    7994 #line 1951 "parser.yy"
     8004#line 1960 "parser.yy"
    79958005    {
    79968006                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    80028012
    80038013/* Line 1806 of yacc.c  */
    8004 #line 1961 "parser.yy"
     8014#line 1970 "parser.yy"
    80058015    {}
    80068016    break;
     
    80098019
    80108020/* Line 1806 of yacc.c  */
    8011 #line 1963 "parser.yy"
     8021#line 1972 "parser.yy"
    80128022    {
    80138023                        if ( theTree ) {
     
    80228032
    80238033/* Line 1806 of yacc.c  */
    8024 #line 1975 "parser.yy"
     8034#line 1984 "parser.yy"
    80258035    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    80268036    break;
     
    80298039
    80308040/* Line 1806 of yacc.c  */
    8031 #line 1980 "parser.yy"
     8041#line 1989 "parser.yy"
    80328042    { (yyval.decl) = 0; }
    80338043    break;
     
    80368046
    80378047/* Line 1806 of yacc.c  */
    8038 #line 1988 "parser.yy"
     8048#line 1997 "parser.yy"
    80398049    {}
    80408050    break;
     
    80438053
    80448054/* Line 1806 of yacc.c  */
    8045 #line 1990 "parser.yy"
     8055#line 1999 "parser.yy"
    80468056    {
    80478057                        linkageStack.push( linkage );
     
    80538063
    80548064/* Line 1806 of yacc.c  */
    8055 #line 1995 "parser.yy"
     8065#line 2004 "parser.yy"
    80568066    {
    80578067                        linkage = linkageStack.top();
     
    80648074
    80658075/* Line 1806 of yacc.c  */
    8066 #line 2001 "parser.yy"
     8076#line 2010 "parser.yy"
    80678077    {   // mark all fields in list
    80688078                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     
    80758085
    80768086/* Line 1806 of yacc.c  */
    8077 #line 2016 "parser.yy"
     8087#line 2025 "parser.yy"
    80788088    {
    80798089                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80868096
    80878097/* Line 1806 of yacc.c  */
    8088 #line 2022 "parser.yy"
     8098#line 2031 "parser.yy"
    80898099    {
    80908100                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80978107
    80988108/* Line 1806 of yacc.c  */
    8099 #line 2031 "parser.yy"
     8109#line 2040 "parser.yy"
    81008110    {
    81018111                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81088118
    81098119/* Line 1806 of yacc.c  */
    8110 #line 2037 "parser.yy"
     8120#line 2046 "parser.yy"
    81118121    {
    81128122                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81198129
    81208130/* Line 1806 of yacc.c  */
    8121 #line 2043 "parser.yy"
     8131#line 2052 "parser.yy"
    81228132    {
    81238133                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81308140
    81318141/* Line 1806 of yacc.c  */
    8132 #line 2049 "parser.yy"
     8142#line 2058 "parser.yy"
    81338143    {
    81348144                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81418151
    81428152/* Line 1806 of yacc.c  */
    8143 #line 2055 "parser.yy"
     8153#line 2064 "parser.yy"
    81448154    {
    81458155                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81528162
    81538163/* Line 1806 of yacc.c  */
    8154 #line 2063 "parser.yy"
     8164#line 2072 "parser.yy"
    81558165    {
    81568166                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81638173
    81648174/* Line 1806 of yacc.c  */
    8165 #line 2069 "parser.yy"
     8175#line 2078 "parser.yy"
    81668176    {
    81678177                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81748184
    81758185/* Line 1806 of yacc.c  */
    8176 #line 2077 "parser.yy"
     8186#line 2086 "parser.yy"
    81778187    {
    81788188                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81858195
    81868196/* Line 1806 of yacc.c  */
    8187 #line 2083 "parser.yy"
     8197#line 2092 "parser.yy"
    81888198    {
    81898199                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81968206
    81978207/* Line 1806 of yacc.c  */
    8198 #line 2098 "parser.yy"
     8208#line 2107 "parser.yy"
    81998209    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    82008210    break;
     
    82038213
    82048214/* Line 1806 of yacc.c  */
    8205 #line 2108 "parser.yy"
     8215#line 2117 "parser.yy"
    82068216    { (yyval.decl) = 0; }
    82078217    break;
     
    82108220
    82118221/* Line 1806 of yacc.c  */
    8212 #line 2115 "parser.yy"
     8222#line 2124 "parser.yy"
    82138223    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    82148224    break;
     
    82178227
    82188228/* Line 1806 of yacc.c  */
    8219 #line 2121 "parser.yy"
     8229#line 2130 "parser.yy"
    82208230    { (yyval.decl) = 0; }
    82218231    break;
     
    82248234
    82258235/* Line 1806 of yacc.c  */
    8226 #line 2136 "parser.yy"
     8236#line 2145 "parser.yy"
    82278237    {}
    82288238    break;
     
    82318241
    82328242/* Line 1806 of yacc.c  */
    8233 #line 2137 "parser.yy"
     8243#line 2146 "parser.yy"
    82348244    {}
    82358245    break;
     
    82388248
    82398249/* Line 1806 of yacc.c  */
    8240 #line 2138 "parser.yy"
     8250#line 2147 "parser.yy"
    82418251    {}
    82428252    break;
     
    82458255
    82468256/* Line 1806 of yacc.c  */
    8247 #line 2139 "parser.yy"
     8257#line 2148 "parser.yy"
    82488258    {}
    82498259    break;
     
    82528262
    82538263/* Line 1806 of yacc.c  */
    8254 #line 2174 "parser.yy"
     8264#line 2183 "parser.yy"
    82558265    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82568266    break;
     
    82598269
    82608270/* Line 1806 of yacc.c  */
    8261 #line 2177 "parser.yy"
     8271#line 2186 "parser.yy"
    82628272    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82638273    break;
     
    82668276
    82678277/* Line 1806 of yacc.c  */
    8268 #line 2179 "parser.yy"
     8278#line 2188 "parser.yy"
    82698279    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82708280    break;
     
    82738283
    82748284/* Line 1806 of yacc.c  */
    8275 #line 2184 "parser.yy"
     8285#line 2193 "parser.yy"
    82768286    {
    82778287                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    82838293
    82848294/* Line 1806 of yacc.c  */
    8285 #line 2189 "parser.yy"
    8286     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8287     break;
    8288 
    8289   case 570:
    8290 
    8291 /* Line 1806 of yacc.c  */
    8292 #line 2194 "parser.yy"
    8293     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8294     break;
    8295 
    8296   case 571:
    8297 
    8298 /* Line 1806 of yacc.c  */
    8299 #line 2196 "parser.yy"
    8300     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8301     break;
    8302 
    8303   case 572:
    8304 
    8305 /* Line 1806 of yacc.c  */
    83068295#line 2198 "parser.yy"
    83078296    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83088297    break;
    83098298
     8299  case 570:
     8300
     8301/* Line 1806 of yacc.c  */
     8302#line 2203 "parser.yy"
     8303    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8304    break;
     8305
     8306  case 571:
     8307
     8308/* Line 1806 of yacc.c  */
     8309#line 2205 "parser.yy"
     8310    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8311    break;
     8312
     8313  case 572:
     8314
     8315/* Line 1806 of yacc.c  */
     8316#line 2207 "parser.yy"
     8317    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8318    break;
     8319
    83108320  case 573:
    83118321
    83128322/* Line 1806 of yacc.c  */
    8313 #line 2203 "parser.yy"
     8323#line 2212 "parser.yy"
    83148324    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83158325    break;
     
    83188328
    83198329/* Line 1806 of yacc.c  */
    8320 #line 2205 "parser.yy"
     8330#line 2214 "parser.yy"
    83218331    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83228332    break;
     
    83258335
    83268336/* Line 1806 of yacc.c  */
    8327 #line 2207 "parser.yy"
     8337#line 2216 "parser.yy"
    83288338    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83298339    break;
     
    83328342
    83338343/* Line 1806 of yacc.c  */
    8334 #line 2209 "parser.yy"
     8344#line 2218 "parser.yy"
    83358345    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83368346    break;
     
    83398349
    83408350/* Line 1806 of yacc.c  */
    8341 #line 2214 "parser.yy"
     8351#line 2223 "parser.yy"
    83428352    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83438353    break;
     
    83468356
    83478357/* Line 1806 of yacc.c  */
    8348 #line 2216 "parser.yy"
     8358#line 2225 "parser.yy"
    83498359    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83508360    break;
     
    83538363
    83548364/* Line 1806 of yacc.c  */
    8355 #line 2225 "parser.yy"
     8365#line 2234 "parser.yy"
    83568366    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83578367    break;
     
    83608370
    83618371/* Line 1806 of yacc.c  */
    8362 #line 2228 "parser.yy"
     8372#line 2237 "parser.yy"
    83638373    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83648374    break;
     
    83678377
    83688378/* Line 1806 of yacc.c  */
    8369 #line 2233 "parser.yy"
     8379#line 2242 "parser.yy"
    83708380    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83718381    break;
     
    83748384
    83758385/* Line 1806 of yacc.c  */
    8376 #line 2235 "parser.yy"
     8386#line 2244 "parser.yy"
    83778387    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83788388    break;
    83798389
    83808390  case 584:
    8381 
    8382 /* Line 1806 of yacc.c  */
    8383 #line 2237 "parser.yy"
    8384     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8385     break;
    8386 
    8387   case 585:
    8388 
    8389 /* Line 1806 of yacc.c  */
    8390 #line 2242 "parser.yy"
    8391     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8392     break;
    8393 
    8394   case 586:
    8395 
    8396 /* Line 1806 of yacc.c  */
    8397 #line 2244 "parser.yy"
    8398     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8399     break;
    8400 
    8401   case 587:
    84028391
    84038392/* Line 1806 of yacc.c  */
     
    84068395    break;
    84078396
    8408   case 588:
     8397  case 585:
    84098398
    84108399/* Line 1806 of yacc.c  */
    84118400#line 2251 "parser.yy"
    8412     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8413     break;
    8414 
    8415   case 589:
     8401    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8402    break;
     8403
     8404  case 586:
    84168405
    84178406/* Line 1806 of yacc.c  */
    84188407#line 2253 "parser.yy"
    8419     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8420     break;
    8421 
    8422   case 590:
     8408    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8409    break;
     8410
     8411  case 587:
    84238412
    84248413/* Line 1806 of yacc.c  */
     
    84278416    break;
    84288417
     8418  case 588:
     8419
     8420/* Line 1806 of yacc.c  */
     8421#line 2260 "parser.yy"
     8422    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8423    break;
     8424
     8425  case 589:
     8426
     8427/* Line 1806 of yacc.c  */
     8428#line 2262 "parser.yy"
     8429    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8430    break;
     8431
     8432  case 590:
     8433
     8434/* Line 1806 of yacc.c  */
     8435#line 2264 "parser.yy"
     8436    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8437    break;
     8438
    84298439  case 594:
    84308440
    84318441/* Line 1806 of yacc.c  */
    8432 #line 2270 "parser.yy"
     8442#line 2279 "parser.yy"
    84338443    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    84348444    break;
     
    84378447
    84388448/* Line 1806 of yacc.c  */
    8439 #line 2272 "parser.yy"
     8449#line 2281 "parser.yy"
    84408450    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    84418451    break;
    84428452
    84438453  case 596:
    8444 
    8445 /* Line 1806 of yacc.c  */
    8446 #line 2274 "parser.yy"
    8447     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8448     break;
    8449 
    8450   case 597:
    8451 
    8452 /* Line 1806 of yacc.c  */
    8453 #line 2279 "parser.yy"
    8454     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8455     break;
    8456 
    8457   case 598:
    8458 
    8459 /* Line 1806 of yacc.c  */
    8460 #line 2281 "parser.yy"
    8461     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8462     break;
    8463 
    8464   case 599:
    84658454
    84668455/* Line 1806 of yacc.c  */
     
    84698458    break;
    84708459
    8471   case 600:
     8460  case 597:
    84728461
    84738462/* Line 1806 of yacc.c  */
    84748463#line 2288 "parser.yy"
    8475     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8476     break;
    8477 
    8478   case 601:
     8464    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8465    break;
     8466
     8467  case 598:
    84798468
    84808469/* Line 1806 of yacc.c  */
    84818470#line 2290 "parser.yy"
    8482     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8483     break;
    8484 
    8485   case 602:
     8471    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8472    break;
     8473
     8474  case 599:
    84868475
    84878476/* Line 1806 of yacc.c  */
     
    84908479    break;
    84918480
     8481  case 600:
     8482
     8483/* Line 1806 of yacc.c  */
     8484#line 2297 "parser.yy"
     8485    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8486    break;
     8487
     8488  case 601:
     8489
     8490/* Line 1806 of yacc.c  */
     8491#line 2299 "parser.yy"
     8492    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8493    break;
     8494
     8495  case 602:
     8496
     8497/* Line 1806 of yacc.c  */
     8498#line 2301 "parser.yy"
     8499    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8500    break;
     8501
    84928502  case 603:
    84938503
    84948504/* Line 1806 of yacc.c  */
    8495 #line 2307 "parser.yy"
     8505#line 2316 "parser.yy"
    84968506    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84978507    break;
     
    85008510
    85018511/* Line 1806 of yacc.c  */
    8502 #line 2310 "parser.yy"
     8512#line 2319 "parser.yy"
    85038513    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85048514    break;
     
    85078517
    85088518/* Line 1806 of yacc.c  */
    8509 #line 2312 "parser.yy"
     8519#line 2321 "parser.yy"
    85108520    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85118521    break;
    85128522
    85138523  case 608:
    8514 
    8515 /* Line 1806 of yacc.c  */
    8516 #line 2318 "parser.yy"
    8517     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8518     break;
    8519 
    8520   case 609:
    8521 
    8522 /* Line 1806 of yacc.c  */
    8523 #line 2323 "parser.yy"
    8524     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8525     break;
    8526 
    8527   case 610:
    8528 
    8529 /* Line 1806 of yacc.c  */
    8530 #line 2325 "parser.yy"
    8531     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8532     break;
    8533 
    8534   case 611:
    85358524
    85368525/* Line 1806 of yacc.c  */
     
    85398528    break;
    85408529
     8530  case 609:
     8531
     8532/* Line 1806 of yacc.c  */
     8533#line 2332 "parser.yy"
     8534    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8535    break;
     8536
     8537  case 610:
     8538
     8539/* Line 1806 of yacc.c  */
     8540#line 2334 "parser.yy"
     8541    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8542    break;
     8543
     8544  case 611:
     8545
     8546/* Line 1806 of yacc.c  */
     8547#line 2336 "parser.yy"
     8548    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8549    break;
     8550
    85418551  case 612:
    85428552
    85438553/* Line 1806 of yacc.c  */
    8544 #line 2332 "parser.yy"
     8554#line 2341 "parser.yy"
    85458555    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    85468556    break;
     
    85498559
    85508560/* Line 1806 of yacc.c  */
    8551 #line 2334 "parser.yy"
     8561#line 2343 "parser.yy"
    85528562    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85538563    break;
     
    85568566
    85578567/* Line 1806 of yacc.c  */
    8558 #line 2336 "parser.yy"
     8568#line 2345 "parser.yy"
    85598569    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85608570    break;
    85618571
    85628572  case 615:
    8563 
    8564 /* Line 1806 of yacc.c  */
    8565 #line 2338 "parser.yy"
    8566     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8567     break;
    8568 
    8569   case 616:
    8570 
    8571 /* Line 1806 of yacc.c  */
    8572 #line 2343 "parser.yy"
    8573     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8574     break;
    8575 
    8576   case 617:
    8577 
    8578 /* Line 1806 of yacc.c  */
    8579 #line 2345 "parser.yy"
    8580     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8581     break;
    8582 
    8583   case 618:
    85848573
    85858574/* Line 1806 of yacc.c  */
     
    85888577    break;
    85898578
     8579  case 616:
     8580
     8581/* Line 1806 of yacc.c  */
     8582#line 2352 "parser.yy"
     8583    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8584    break;
     8585
     8586  case 617:
     8587
     8588/* Line 1806 of yacc.c  */
     8589#line 2354 "parser.yy"
     8590    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8591    break;
     8592
     8593  case 618:
     8594
     8595/* Line 1806 of yacc.c  */
     8596#line 2356 "parser.yy"
     8597    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8598    break;
     8599
    85908600  case 619:
    85918601
    85928602/* Line 1806 of yacc.c  */
    8593 #line 2357 "parser.yy"
     8603#line 2366 "parser.yy"
    85948604    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85958605    break;
     
    85988608
    85998609/* Line 1806 of yacc.c  */
    8600 #line 2360 "parser.yy"
     8610#line 2369 "parser.yy"
    86018611    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86028612    break;
     
    86058615
    86068616/* Line 1806 of yacc.c  */
    8607 #line 2362 "parser.yy"
     8617#line 2371 "parser.yy"
    86088618    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86098619    break;
     
    86128622
    86138623/* Line 1806 of yacc.c  */
    8614 #line 2367 "parser.yy"
     8624#line 2376 "parser.yy"
    86158625    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86168626    break;
     
    86198629
    86208630/* Line 1806 of yacc.c  */
    8621 #line 2369 "parser.yy"
     8631#line 2378 "parser.yy"
    86228632    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86238633    break;
     
    86268636
    86278637/* Line 1806 of yacc.c  */
    8628 #line 2371 "parser.yy"
     8638#line 2380 "parser.yy"
    86298639    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86308640    break;
     
    86338643
    86348644/* Line 1806 of yacc.c  */
    8635 #line 2376 "parser.yy"
     8645#line 2385 "parser.yy"
    86368646    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    86378647    break;
     
    86408650
    86418651/* Line 1806 of yacc.c  */
    8642 #line 2378 "parser.yy"
     8652#line 2387 "parser.yy"
    86438653    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86448654    break;
     
    86478657
    86488658/* Line 1806 of yacc.c  */
    8649 #line 2380 "parser.yy"
     8659#line 2389 "parser.yy"
    86508660    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86518661    break;
    86528662
    86538663  case 629:
    8654 
    8655 /* Line 1806 of yacc.c  */
    8656 #line 2382 "parser.yy"
    8657     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8658     break;
    8659 
    8660   case 630:
    8661 
    8662 /* Line 1806 of yacc.c  */
    8663 #line 2387 "parser.yy"
    8664     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8665     break;
    8666 
    8667   case 631:
    8668 
    8669 /* Line 1806 of yacc.c  */
    8670 #line 2389 "parser.yy"
    8671     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8672     break;
    8673 
    8674   case 632:
    86758664
    86768665/* Line 1806 of yacc.c  */
     
    86798668    break;
    86808669
     8670  case 630:
     8671
     8672/* Line 1806 of yacc.c  */
     8673#line 2396 "parser.yy"
     8674    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8675    break;
     8676
     8677  case 631:
     8678
     8679/* Line 1806 of yacc.c  */
     8680#line 2398 "parser.yy"
     8681    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8682    break;
     8683
     8684  case 632:
     8685
     8686/* Line 1806 of yacc.c  */
     8687#line 2400 "parser.yy"
     8688    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8689    break;
     8690
    86818691  case 633:
    86828692
    86838693/* Line 1806 of yacc.c  */
    8684 #line 2422 "parser.yy"
     8694#line 2431 "parser.yy"
    86858695    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86868696    break;
     
    86898699
    86908700/* Line 1806 of yacc.c  */
    8691 #line 2425 "parser.yy"
     8701#line 2434 "parser.yy"
    86928702    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    86938703    break;
     
    86968706
    86978707/* Line 1806 of yacc.c  */
    8698 #line 2427 "parser.yy"
     8708#line 2436 "parser.yy"
    86998709    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87008710    break;
     
    87038713
    87048714/* Line 1806 of yacc.c  */
    8705 #line 2432 "parser.yy"
     8715#line 2441 "parser.yy"
    87068716    {
    87078717                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87138723
    87148724/* Line 1806 of yacc.c  */
    8715 #line 2437 "parser.yy"
     8725#line 2446 "parser.yy"
    87168726    {
    87178727                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87238733
    87248734/* Line 1806 of yacc.c  */
    8725 #line 2445 "parser.yy"
     8735#line 2454 "parser.yy"
    87268736    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87278737    break;
     
    87308740
    87318741/* Line 1806 of yacc.c  */
    8732 #line 2447 "parser.yy"
     8742#line 2456 "parser.yy"
    87338743    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87348744    break;
     
    87378747
    87388748/* Line 1806 of yacc.c  */
    8739 #line 2449 "parser.yy"
     8749#line 2458 "parser.yy"
    87408750    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87418751    break;
     
    87448754
    87458755/* Line 1806 of yacc.c  */
    8746 #line 2454 "parser.yy"
     8756#line 2463 "parser.yy"
    87478757    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87488758    break;
     
    87518761
    87528762/* Line 1806 of yacc.c  */
    8753 #line 2456 "parser.yy"
     8763#line 2465 "parser.yy"
    87548764    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87558765    break;
     
    87588768
    87598769/* Line 1806 of yacc.c  */
    8760 #line 2461 "parser.yy"
     8770#line 2470 "parser.yy"
    87618771    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    87628772    break;
     
    87658775
    87668776/* Line 1806 of yacc.c  */
    8767 #line 2463 "parser.yy"
     8777#line 2472 "parser.yy"
    87688778    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87698779    break;
     
    87728782
    87738783/* Line 1806 of yacc.c  */
    8774 #line 2478 "parser.yy"
     8784#line 2487 "parser.yy"
    87758785    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87768786    break;
     
    87798789
    87808790/* Line 1806 of yacc.c  */
    8781 #line 2480 "parser.yy"
     8791#line 2489 "parser.yy"
    87828792    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87838793    break;
     
    87868796
    87878797/* Line 1806 of yacc.c  */
    8788 #line 2485 "parser.yy"
     8798#line 2494 "parser.yy"
    87898799    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    87908800    break;
     
    87938803
    87948804/* Line 1806 of yacc.c  */
    8795 #line 2487 "parser.yy"
     8805#line 2496 "parser.yy"
    87968806    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    87978807    break;
     
    88008810
    88018811/* Line 1806 of yacc.c  */
    8802 #line 2489 "parser.yy"
     8812#line 2498 "parser.yy"
    88038813    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88048814    break;
     
    88078817
    88088818/* Line 1806 of yacc.c  */
    8809 #line 2491 "parser.yy"
     8819#line 2500 "parser.yy"
    88108820    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88118821    break;
     
    88148824
    88158825/* Line 1806 of yacc.c  */
    8816 #line 2493 "parser.yy"
     8826#line 2502 "parser.yy"
    88178827    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88188828    break;
     
    88218831
    88228832/* Line 1806 of yacc.c  */
    8823 #line 2499 "parser.yy"
     8833#line 2508 "parser.yy"
    88248834    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88258835    break;
     
    88288838
    88298839/* Line 1806 of yacc.c  */
    8830 #line 2501 "parser.yy"
     8840#line 2510 "parser.yy"
    88318841    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88328842    break;
    88338843
    88348844  case 657:
    8835 
    8836 /* Line 1806 of yacc.c  */
    8837 #line 2503 "parser.yy"
    8838     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8839     break;
    8840 
    8841   case 658:
    8842 
    8843 /* Line 1806 of yacc.c  */
    8844 #line 2508 "parser.yy"
    8845     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8846     break;
    8847 
    8848   case 659:
    8849 
    8850 /* Line 1806 of yacc.c  */
    8851 #line 2510 "parser.yy"
    8852     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8853     break;
    8854 
    8855   case 660:
    88568845
    88578846/* Line 1806 of yacc.c  */
     
    88608849    break;
    88618850
     8851  case 658:
     8852
     8853/* Line 1806 of yacc.c  */
     8854#line 2517 "parser.yy"
     8855    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8856    break;
     8857
     8858  case 659:
     8859
     8860/* Line 1806 of yacc.c  */
     8861#line 2519 "parser.yy"
     8862    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8863    break;
     8864
     8865  case 660:
     8866
     8867/* Line 1806 of yacc.c  */
     8868#line 2521 "parser.yy"
     8869    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8870    break;
     8871
    88628872  case 661:
    88638873
    88648874/* Line 1806 of yacc.c  */
    8865 #line 2518 "parser.yy"
     8875#line 2527 "parser.yy"
    88668876    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    88678877    break;
     
    88708880
    88718881/* Line 1806 of yacc.c  */
    8872 #line 2520 "parser.yy"
     8882#line 2529 "parser.yy"
    88738883    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    88748884    break;
     
    88778887
    88788888/* Line 1806 of yacc.c  */
    8879 #line 2526 "parser.yy"
     8889#line 2535 "parser.yy"
    88808890    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    88818891    break;
     
    88848894
    88858895/* Line 1806 of yacc.c  */
    8886 #line 2528 "parser.yy"
     8896#line 2537 "parser.yy"
    88878897    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    88888898    break;
     
    88918901
    88928902/* Line 1806 of yacc.c  */
    8893 #line 2530 "parser.yy"
     8903#line 2539 "parser.yy"
    88948904    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    88958905    break;
     
    88988908
    88998909/* Line 1806 of yacc.c  */
    8900 #line 2532 "parser.yy"
     8910#line 2541 "parser.yy"
    89018911    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    89028912    break;
     
    89058915
    89068916/* Line 1806 of yacc.c  */
    8907 #line 2547 "parser.yy"
     8917#line 2556 "parser.yy"
    89088918    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    89098919    break;
     
    89128922
    89138923/* Line 1806 of yacc.c  */
    8914 #line 2549 "parser.yy"
     8924#line 2558 "parser.yy"
    89158925    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    89168926    break;
     
    89198929
    89208930/* Line 1806 of yacc.c  */
    8921 #line 2554 "parser.yy"
     8931#line 2563 "parser.yy"
    89228932    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    89238933    break;
     
    89268936
    89278937/* Line 1806 of yacc.c  */
    8928 #line 2556 "parser.yy"
     8938#line 2565 "parser.yy"
    89298939    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    89308940    break;
     
    89338943
    89348944/* Line 1806 of yacc.c  */
    8935 #line 2558 "parser.yy"
     8945#line 2567 "parser.yy"
    89368946    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    89378947    break;
     
    89408950
    89418951/* Line 1806 of yacc.c  */
    8942 #line 2560 "parser.yy"
     8952#line 2569 "parser.yy"
    89438953    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    89448954    break;
     
    89478957
    89488958/* Line 1806 of yacc.c  */
    8949 #line 2562 "parser.yy"
     8959#line 2571 "parser.yy"
    89508960    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89518961    break;
     
    89548964
    89558965/* Line 1806 of yacc.c  */
    8956 #line 2568 "parser.yy"
     8966#line 2577 "parser.yy"
    89578967    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    89588968    break;
     
    89618971
    89628972/* Line 1806 of yacc.c  */
    8963 #line 2570 "parser.yy"
     8973#line 2579 "parser.yy"
    89648974    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    89658975    break;
    89668976
    89678977  case 679:
    8968 
    8969 /* Line 1806 of yacc.c  */
    8970 #line 2572 "parser.yy"
    8971     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8972     break;
    8973 
    8974   case 680:
    8975 
    8976 /* Line 1806 of yacc.c  */
    8977 #line 2577 "parser.yy"
    8978     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8979     break;
    8980 
    8981   case 681:
    8982 
    8983 /* Line 1806 of yacc.c  */
    8984 #line 2579 "parser.yy"
    8985     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8986     break;
    8987 
    8988   case 682:
    89898978
    89908979/* Line 1806 of yacc.c  */
     
    89938982    break;
    89948983
     8984  case 680:
     8985
     8986/* Line 1806 of yacc.c  */
     8987#line 2586 "parser.yy"
     8988    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8989    break;
     8990
     8991  case 681:
     8992
     8993/* Line 1806 of yacc.c  */
     8994#line 2588 "parser.yy"
     8995    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8996    break;
     8997
     8998  case 682:
     8999
     9000/* Line 1806 of yacc.c  */
     9001#line 2590 "parser.yy"
     9002    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     9003    break;
     9004
    89959005  case 684:
    89969006
    89979007/* Line 1806 of yacc.c  */
    8998 #line 2588 "parser.yy"
     9008#line 2597 "parser.yy"
    89999009    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    90009010    break;
     
    90039013
    90049014/* Line 1806 of yacc.c  */
    9005 #line 2599 "parser.yy"
     9015#line 2608 "parser.yy"
    90069016    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    90079017    break;
     
    90109020
    90119021/* Line 1806 of yacc.c  */
    9012 #line 2602 "parser.yy"
     9022#line 2611 "parser.yy"
    90139023    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    90149024    break;
     
    90179027
    90189028/* Line 1806 of yacc.c  */
    9019 #line 2604 "parser.yy"
     9029#line 2613 "parser.yy"
    90209030    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    90219031    break;
     
    90249034
    90259035/* Line 1806 of yacc.c  */
    9026 #line 2607 "parser.yy"
     9036#line 2616 "parser.yy"
    90279037    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    90289038    break;
     
    90319041
    90329042/* Line 1806 of yacc.c  */
    9033 #line 2609 "parser.yy"
     9043#line 2618 "parser.yy"
    90349044    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    90359045    break;
     
    90389048
    90399049/* Line 1806 of yacc.c  */
    9040 #line 2611 "parser.yy"
     9050#line 2620 "parser.yy"
    90419051    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    90429052    break;
     
    90459055
    90469056/* Line 1806 of yacc.c  */
    9047 #line 2625 "parser.yy"
     9057#line 2634 "parser.yy"
    90489058    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    90499059    break;
     
    90529062
    90539063/* Line 1806 of yacc.c  */
    9054 #line 2627 "parser.yy"
     9064#line 2636 "parser.yy"
    90559065    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    90569066    break;
     
    90599069
    90609070/* Line 1806 of yacc.c  */
    9061 #line 2632 "parser.yy"
     9071#line 2641 "parser.yy"
    90629072    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    90639073    break;
     
    90669076
    90679077/* Line 1806 of yacc.c  */
    9068 #line 2634 "parser.yy"
     9078#line 2643 "parser.yy"
    90699079    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    90709080    break;
     
    90739083
    90749084/* Line 1806 of yacc.c  */
    9075 #line 2636 "parser.yy"
     9085#line 2645 "parser.yy"
    90769086    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    90779087    break;
     
    90809090
    90819091/* Line 1806 of yacc.c  */
    9082 #line 2638 "parser.yy"
     9092#line 2647 "parser.yy"
    90839093    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    90849094    break;
     
    90879097
    90889098/* Line 1806 of yacc.c  */
    9089 #line 2640 "parser.yy"
     9099#line 2649 "parser.yy"
    90909100    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    90919101    break;
     
    90949104
    90959105/* Line 1806 of yacc.c  */
    9096 #line 2646 "parser.yy"
     9106#line 2655 "parser.yy"
    90979107    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    90989108    break;
     
    91019111
    91029112/* Line 1806 of yacc.c  */
    9103 #line 2648 "parser.yy"
     9113#line 2657 "parser.yy"
    91049114    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    91059115    break;
     
    91089118
    91099119/* Line 1806 of yacc.c  */
    9110 #line 2650 "parser.yy"
     9120#line 2659 "parser.yy"
    91119121    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    91129122    break;
     
    91159125
    91169126/* Line 1806 of yacc.c  */
    9117 #line 2655 "parser.yy"
     9127#line 2664 "parser.yy"
    91189128    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    91199129    break;
     
    91229132
    91239133/* Line 1806 of yacc.c  */
    9124 #line 2657 "parser.yy"
     9134#line 2666 "parser.yy"
    91259135    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    91269136    break;
     
    91299139
    91309140/* Line 1806 of yacc.c  */
    9131 #line 2667 "parser.yy"
     9141#line 2676 "parser.yy"
    91329142    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    91339143    break;
     
    91369146
    91379147/* Line 1806 of yacc.c  */
    9138 #line 2677 "parser.yy"
     9148#line 2686 "parser.yy"
    91399149    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91409150    break;
     
    91439153
    91449154/* Line 1806 of yacc.c  */
    9145 #line 2679 "parser.yy"
     9155#line 2688 "parser.yy"
    91469156    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91479157    break;
     
    91509160
    91519161/* Line 1806 of yacc.c  */
    9152 #line 2681 "parser.yy"
     9162#line 2690 "parser.yy"
    91539163    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91549164    break;
     
    91579167
    91589168/* Line 1806 of yacc.c  */
    9159 #line 2683 "parser.yy"
     9169#line 2692 "parser.yy"
    91609170    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91619171    break;
     
    91649174
    91659175/* Line 1806 of yacc.c  */
    9166 #line 2685 "parser.yy"
     9176#line 2694 "parser.yy"
    91679177    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91689178    break;
     
    91719181
    91729182/* Line 1806 of yacc.c  */
    9173 #line 2687 "parser.yy"
     9183#line 2696 "parser.yy"
    91749184    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91759185    break;
     
    91789188
    91799189/* Line 1806 of yacc.c  */
    9180 #line 2694 "parser.yy"
     9190#line 2703 "parser.yy"
    91819191    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91829192    break;
     
    91859195
    91869196/* Line 1806 of yacc.c  */
    9187 #line 2696 "parser.yy"
     9197#line 2705 "parser.yy"
    91889198    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91899199    break;
     
    91929202
    91939203/* Line 1806 of yacc.c  */
    9194 #line 2698 "parser.yy"
     9204#line 2707 "parser.yy"
    91959205    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91969206    break;
     
    91999209
    92009210/* Line 1806 of yacc.c  */
    9201 #line 2700 "parser.yy"
     9211#line 2709 "parser.yy"
    92029212    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    92039213    break;
     
    92069216
    92079217/* Line 1806 of yacc.c  */
    9208 #line 2702 "parser.yy"
     9218#line 2711 "parser.yy"
    92099219    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92109220    break;
     
    92139223
    92149224/* Line 1806 of yacc.c  */
    9215 #line 2704 "parser.yy"
     9225#line 2713 "parser.yy"
    92169226    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92179227    break;
     
    92209230
    92219231/* Line 1806 of yacc.c  */
    9222 #line 2706 "parser.yy"
     9232#line 2715 "parser.yy"
    92239233    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92249234    break;
     
    92279237
    92289238/* Line 1806 of yacc.c  */
    9229 #line 2708 "parser.yy"
     9239#line 2717 "parser.yy"
    92309240    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92319241    break;
     
    92349244
    92359245/* Line 1806 of yacc.c  */
    9236 #line 2710 "parser.yy"
     9246#line 2719 "parser.yy"
    92379247    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    92389248    break;
     
    92419251
    92429252/* Line 1806 of yacc.c  */
    9243 #line 2712 "parser.yy"
     9253#line 2721 "parser.yy"
    92449254    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    92459255    break;
     
    92489258
    92499259/* Line 1806 of yacc.c  */
    9250 #line 2717 "parser.yy"
     9260#line 2726 "parser.yy"
    92519261    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    92529262    break;
     
    92559265
    92569266/* Line 1806 of yacc.c  */
    9257 #line 2719 "parser.yy"
     9267#line 2728 "parser.yy"
    92589268    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    92599269    break;
     
    92629272
    92639273/* Line 1806 of yacc.c  */
    9264 #line 2724 "parser.yy"
     9274#line 2733 "parser.yy"
    92659275    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    92669276    break;
     
    92699279
    92709280/* Line 1806 of yacc.c  */
    9271 #line 2726 "parser.yy"
     9281#line 2735 "parser.yy"
    92729282    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    92739283    break;
     
    92769286
    92779287/* Line 1806 of yacc.c  */
    9278 #line 2753 "parser.yy"
     9288#line 2762 "parser.yy"
    92799289    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    92809290    break;
     
    92839293
    92849294/* Line 1806 of yacc.c  */
    9285 #line 2764 "parser.yy"
     9295#line 2773 "parser.yy"
    92869296    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    92879297    break;
     
    92909300
    92919301/* Line 1806 of yacc.c  */
    9292 #line 2766 "parser.yy"
     9302#line 2775 "parser.yy"
    92939303    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    92949304    break;
     
    92979307
    92989308/* Line 1806 of yacc.c  */
    9299 #line 2768 "parser.yy"
     9309#line 2777 "parser.yy"
    93009310    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    93019311    break;
     
    93049314
    93059315/* Line 1806 of yacc.c  */
    9306 #line 2770 "parser.yy"
     9316#line 2779 "parser.yy"
    93079317    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    93089318    break;
     
    93119321
    93129322/* Line 1806 of yacc.c  */
    9313 #line 2772 "parser.yy"
     9323#line 2781 "parser.yy"
    93149324    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    93159325    break;
     
    93189328
    93199329/* Line 1806 of yacc.c  */
    9320 #line 2774 "parser.yy"
     9330#line 2783 "parser.yy"
    93219331    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    93229332    break;
     
    93259335
    93269336/* Line 1806 of yacc.c  */
    9327 #line 2781 "parser.yy"
     9337#line 2790 "parser.yy"
    93289338    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93299339    break;
     
    93329342
    93339343/* Line 1806 of yacc.c  */
    9334 #line 2783 "parser.yy"
     9344#line 2792 "parser.yy"
    93359345    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93369346    break;
     
    93399349
    93409350/* Line 1806 of yacc.c  */
    9341 #line 2785 "parser.yy"
     9351#line 2794 "parser.yy"
    93429352    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    93439353    break;
     
    93469356
    93479357/* Line 1806 of yacc.c  */
    9348 #line 2787 "parser.yy"
     9358#line 2796 "parser.yy"
    93499359    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93509360    break;
     
    93539363
    93549364/* Line 1806 of yacc.c  */
    9355 #line 2789 "parser.yy"
     9365#line 2798 "parser.yy"
    93569366    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    93579367    break;
     
    93609370
    93619371/* Line 1806 of yacc.c  */
    9362 #line 2791 "parser.yy"
     9372#line 2800 "parser.yy"
    93639373    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    93649374    break;
     
    93679377
    93689378/* Line 1806 of yacc.c  */
    9369 #line 2796 "parser.yy"
     9379#line 2805 "parser.yy"
    93709380    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    93719381    break;
     
    93749384
    93759385/* Line 1806 of yacc.c  */
    9376 #line 2801 "parser.yy"
     9386#line 2810 "parser.yy"
    93779387    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    93789388    break;
     
    93819391
    93829392/* Line 1806 of yacc.c  */
    9383 #line 2803 "parser.yy"
     9393#line 2812 "parser.yy"
    93849394    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    93859395    break;
     
    93889398
    93899399/* Line 1806 of yacc.c  */
    9390 #line 2805 "parser.yy"
     9400#line 2814 "parser.yy"
    93919401    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    93929402    break;
     
    93959405
    93969406/* Line 1806 of yacc.c  */
    9397 #line 2829 "parser.yy"
     9407#line 2838 "parser.yy"
    93989408    { (yyval.en) = 0; }
    93999409    break;
     
    94029412
    94039413/* Line 1806 of yacc.c  */
    9404 #line 2831 "parser.yy"
     9414#line 2840 "parser.yy"
    94059415    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    94069416    break;
     
    94099419
    94109420/* Line 1806 of yacc.c  */
    9411 #line 9412 "Parser/parser.cc"
     9421#line 9422 "Parser/parser.cc"
    94129422      default: break;
    94139423    }
     
    96409650
    96419651/* Line 2067 of yacc.c  */
    9642 #line 2834 "parser.yy"
     9652#line 2843 "parser.yy"
    96439653
    96449654// ----end of grammar----
  • src/Parser/parser.yy

    r7d5e243 r6066e32  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun 30 21:15:54 2016
    13 // Update Count     : 1657
     12// Last Modified On : Tue Jul 12 17:26:32 2016
     13// Update Count     : 1659
    1414//
    1515
     
    712712                { $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
    713713        | SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
    714                 { $$ = new StatementNode( StatementNode::Switch, $3, $8 ); /* xxx */ }
    715                 // The semantics of the declaration list is changed to include any associated initialization, which is performed
    716                 // *before* the transfer to the appropriate case clause.  Statements after the initial declaration list can
    717                 // never be executed, and therefore, are removed from the grammar even though C allows it.
     714                {
     715                        StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
     716                        // The semantics of the declaration list is changed to include associated initialization, which is performed
     717                        // *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
     718                        // statement around the switch.  Statements after the initial declaration list can never be executed, and
     719                        // therefore, are removed from the grammar even though C allows it. Change also applies to choose statement.
     720                        $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
     721                }
    718722        | CHOOSE '(' comma_expression ')' case_clause           // CFA
    719                 { $$ = new StatementNode( StatementNode::Choose, $3, $5 ); }
     723                { $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
    720724        | CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
    721                 { $$ = new StatementNode( StatementNode::Choose, $3, $8 ); }
     725                {
     726                        StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
     727                        $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
     728                }
    722729        ;
    723730
     
    750757
    751758case_clause:                                                                                    // CFA
    752         case_label_list statement                                       { $$ = $1->append_last_case( $2 ); }
     759        case_label_list statement                                       { $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
    753760        ;
    754761
     
    761768switch_clause_list:                                                                             // CFA
    762769        case_label_list statement_list
    763                 { $$ = $1->append_last_case( $2 ); }
     770                { $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
    764771        | switch_clause_list case_label_list statement_list
    765                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); }
     772                { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
    766773        ;
    767774
     
    776783                { $$ = $1->append_last_case( $2 ); }
    777784        | case_label_list statement_list fall_through_opt
    778                 { $$ = $1->append_last_case((StatementNode *)mkList((*$2,*$3 ))); }
     785                { $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); }
    779786        | choose_clause_list case_label_list fall_through
    780787                { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); }
    781788        | choose_clause_list case_label_list statement_list fall_through_opt
    782                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case((StatementNode *)mkList((*$3,*$4 ))))); }
     789                { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
    783790        ;
    784791
    785792fall_through_opt:                                                                               // CFA
    786793        // empty
     794                { $$ = new StatementNode( StatementNode::Break ); }     // insert implicit break
     795        | fall_through
     796        ;
     797
     798fall_through:                                                                                   // CFA
     799        FALLTHRU
    787800                { $$ = 0; }
    788         | fall_through
    789         ;
    790 
    791 fall_through:                                                                                   // CFA
    792         FALLTHRU                                                                        { $$ = new StatementNode( StatementNode::Fallthru ); }
    793         | FALLTHRU ';'                                                          { $$ = new StatementNode( StatementNode::Fallthru ); }
     801        | FALLTHRU ';'
     802                { $$ = 0; }
    794803        ;
    795804
     
    814823                { $$ = new StatementNode( StatementNode::Goto, $2 ); }
    815824        | GOTO '*' comma_expression ';'                                         // GCC, computed goto
    816                 // The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3 );
     825                // The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
    817826                // whereas normal operator precedence yields goto (*i)+3;
    818827                { $$ = new StatementNode( StatementNode::Goto, $3 ); }
     
    820829                // A semantic check is required to ensure this statement appears only in the body of an iteration statement.
    821830                { $$ = new StatementNode( StatementNode::Continue ); }
    822         | CONTINUE IDENTIFIER ';'                                       // CFA, multi-level continue
     831        | CONTINUE IDENTIFIER ';'                                                       // CFA, multi-level continue
    823832                // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
    824833                // the target of the transfer appears only at the start of an iteration statement.
     
    827836                // A semantic check is required to ensure this statement appears only in the body of an iteration statement.
    828837                { $$ = new StatementNode( StatementNode::Break ); }
    829         | BREAK IDENTIFIER ';'                                          // CFA, multi-level exit
     838        | BREAK IDENTIFIER ';'                                                          // CFA, multi-level exit
    830839                // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
    831840                // the target of the transfer appears only at the start of an iteration statement.
     
    951960        ;
    952961
    953 asm_clobbers_list_opt:                                                                          // GCC
     962asm_clobbers_list_opt:                                                                  // GCC
    954963        // empty
    955964                { $$ = 0; }                                                                             // use default argument
     
    14521461                { typedefTable.makeTypedef( *$2 ); }
    14531462                '{' field_declaration_list '}'
    1454                 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $5); }
     1463                { $$ = DeclarationNode::newAggregate( $1, $2, 0, $5 ); }
    14551464        | aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA
    14561465                { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }
     
    18401849                { $$ = 0; }
    18411850        | assertion_list_opt assertion
    1842                 { $$ = $1 == 0 ? $2 : $1->appendList( $2 ); }
     1851                { $$ = $1 != 0 ? $1->appendList( $2 ) : $2; }
    18431852        ;
    18441853
  • src/ResolvExpr/Resolver.cc

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 12:17:01 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Fri May 13 11:36:40 2016
    13 // Update Count     : 203
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:45:42 2016
     13// Update Count     : 204
    1414//
    1515
     
    4949                virtual void visit( ForStmt *forStmt );
    5050                virtual void visit( SwitchStmt *switchStmt );
    51                 virtual void visit( ChooseStmt *switchStmt );
    5251                virtual void visit( CaseStmt *caseStmt );
    5352                virtual void visit( BranchStmt *branchStmt );
     
    302301
    303302        void Resolver::visit( SwitchStmt *switchStmt ) {
    304                 handleSwitchStmt( switchStmt, *this );
    305         }
    306 
    307         void Resolver::visit( ChooseStmt *switchStmt ) {
    308303                handleSwitchStmt( switchStmt, *this );
    309304        }
  • src/SymTab/AddVisit.h

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 16:14:32 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 14 15:52:42 2016
    13 // Update Count     : 5
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:46:33 2016
     13// Update Count     : 6
    1414//
    1515
     
    3838
    3939        template< typename Visitor >
    40         inline void addVisit(ChooseStmt *switchStmt, Visitor &visitor) {
    41                 addVisitStatementList( switchStmt->get_branches(), visitor );
    42                 maybeAccept( switchStmt->get_condition(), visitor );
    43         }
    44 
    45         // template< typename Visitor >
    46         // inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) {
    47         //      addVisitStatementList( caseStmt->get_statements(), visitor );
    48         //      maybeAccept( caseStmt->get_condition(), visitor );
    49         // }
    50 
    51         template< typename Visitor >
    5240        void acceptAndAdd( std::list< Declaration * > &translationUnit, Visitor &visitor, bool addBefore ) {
    5341                std::list< Declaration * >::iterator i = translationUnit.begin();
  • src/SymTab/Autogen.cc

    r7d5e243 r6066e32  
    99// Author           : Rob Schluntz
    1010// Created On       : Thu Mar 03 15:45:56 2016
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu May 26 14:14:09 2016
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:47:17 2016
     13// Update Count     : 2
    1414//
    1515
     
    4242                virtual void visit( CompoundStmt *compoundStmt );
    4343                virtual void visit( SwitchStmt *switchStmt );
    44                 virtual void visit( ChooseStmt *chooseStmt );
    45                 // virtual void visit( CaseStmt *caseStmt );
    4644
    4745                AutogenerateRoutines() : functionNesting( 0 ) {}
     
    559557                visitStatement( switchStmt );
    560558        }
    561 
    562         void AutogenerateRoutines::visit( ChooseStmt *switchStmt ) {
    563                 visitStatement( switchStmt );
    564         }
    565 
    566         // void AutogenerateRoutines::visit( CaseStmt *caseStmt ) {
    567         //      visitStatement( caseStmt );
    568         // }
    569559} // SymTab
  • src/SymTab/Indexer.cc

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:37:33 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Fri Apr 22 15:25:43 2016
    13 // Update Count     : 11
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:47:47 2016
     13// Update Count     : 12
    1414//
    1515
     
    520520                        const MangleTable &mangleTable = decls->second;
    521521                        for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    522                                 // check for C decls with the same name, skipping
    523                                 // those with a compatible type (by mangleName)
     522                                // check for C decls with the same name, skipping those with a compatible type (by mangleName)
    524523                                if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true;
    525524                        }
  • src/SymTab/Validate.cc

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:50:04 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed May 11 13:17:52 2016
    13 // Update Count     : 297
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:49:21 2016
     13// Update Count     : 298
    1414//
    1515
     
    7474                virtual void visit( CompoundStmt *compoundStmt );
    7575                virtual void visit( SwitchStmt *switchStmt );
    76                 virtual void visit( ChooseStmt *chooseStmt );
    77                 // virtual void visit( CaseStmt *caseStmt );
    7876          private:
    7977                HoistStruct();
     
    268266                addVisit( switchStmt, *this );
    269267        }
    270 
    271         void HoistStruct::visit( ChooseStmt *switchStmt ) {
    272                 addVisit( switchStmt, *this );
    273         }
    274 
    275         // void HoistStruct::visit( CaseStmt *caseStmt ) {
    276         //      addVisit( caseStmt, *this );
    277         // }
    278268
    279269        void Pass1::visit( EnumDecl *enumDecl ) {
     
    551541                if ( StructInstType *aggDecl = dynamic_cast< StructInstType * >( tyDecl->get_base() ) ) {
    552542                        return new StructDecl( aggDecl->get_name() );
     543//                      return aggDecl->get_baseStruct();
    553544                } else if ( UnionInstType *aggDecl = dynamic_cast< UnionInstType * >( tyDecl->get_base() ) ) {
    554545                        return new UnionDecl( aggDecl->get_name() );
     
    645636                } // if
    646637        }
     638
    647639        Declaration *EliminateTypedef::mutate( StructDecl * structDecl ) {
    648640                addImplicitTypedef( structDecl );
     
    691683
    692684                Visitor::visit( funcDecl );
    693                 // original idea: modify signature of ctor/dtors and insert appropriate return statements
    694                 // to cause desired behaviour
    695                 // new idea: add comma exprs to every ctor call to produce first parameter.
    696                 // this requires some memoization of the first parameter, because it can be a
    697                 // complicated expression with side effects (see: malloc). idea: add temporary variable
    698                 // that is assigned address of constructed object in ctor argument position and
    699                 // return the temporary. It should also be done after all implicit ctors are
    700                 // added, so not in this pass!
    701685        }
    702686
  • src/SynTree/AddStmtVisitor.cc

    r7d5e243 r6066e32  
    99// Author           : Rob Schluntz
    1010// Created On       : Wed Jun 22 12:11:17 2016
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jun 22 12:16:29 2016
    13 // Update Count     : 11
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:49:59 2016
     13// Update Count     : 12
    1414//
    1515
     
    7575}
    7676
    77 void AddStmtVisitor::visit(ChooseStmt *switchStmt) {
    78         visitStatementList( switchStmt->get_branches() );
    79         maybeAccept( switchStmt->get_condition(), *this );
    80 }
    81 
    8277void AddStmtVisitor::visit(CaseStmt *caseStmt) {
    8378        visitStatementList( caseStmt->get_statements() );
  • src/SynTree/AddStmtVisitor.h

    r7d5e243 r6066e32  
    99// Author           : Rob Schluntz
    1010// Created On       : Wed Jun 22 12:05:48 2016
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jun 22 12:12:05 2016
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:50:32 2016
     13// Update Count     : 8
    1414//
    1515
     
    3232        virtual void visit(ForStmt *forStmt);
    3333        virtual void visit(SwitchStmt *switchStmt);
    34         virtual void visit(ChooseStmt *chooseStmt);
    3534        virtual void visit(CaseStmt *caseStmt);
    3635        virtual void visit(CatchStmt *catchStmt);
  • src/SynTree/Mutator.cc

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Apr 27 17:07:29 2016
    13 // Update Count     : 16
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:51:19 2016
     13// Update Count     : 17
    1414//
    1515
     
    130130}
    131131
    132 Statement *Mutator::mutate( ChooseStmt *switchStmt ) {
    133         switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) );
    134         mutateAll( switchStmt->get_branches(), *this );
    135         return switchStmt;
    136 }
    137 
    138 Statement *Mutator::mutate( FallthruStmt *fallthruStmt ) {
    139         return fallthruStmt;
    140 }
    141 
    142132Statement *Mutator::mutate( CaseStmt *caseStmt ) {
    143133        caseStmt->set_condition( maybeMutate( caseStmt->get_condition(), *this ) );
  • src/SynTree/Mutator.h

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 14 15:32:00 2016
    13 // Update Count     : 10
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:51:43 2016
     13// Update Count     : 11
    1414//
    1515#include <cassert>
     
    4242        virtual Statement* mutate( ForStmt *forStmt );
    4343        virtual Statement* mutate( SwitchStmt *switchStmt );
    44         virtual Statement* mutate( ChooseStmt *chooseStmt );
    45         virtual Statement* mutate( FallthruStmt *fallthruStmt );
    4644        virtual Statement* mutate( CaseStmt *caseStmt );
    4745        virtual Statement* mutate( BranchStmt *branchStmt );
  • src/SynTree/Statement.cc

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu May 12 13:33:18 2016
    13 // Update Count     : 54
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:52:32 2016
     13// Update Count     : 55
    1414//
    1515
     
    206206        for ( i = stmts.begin(); i != stmts.end(); i++)
    207207                (*i )->print( os, indent + 4 );
    208 }
    209 
    210 //ChooseStmt::ChooseStmt( std::list<Label> labels, Expression *condition, Statement *body ) {}
    211 ChooseStmt::ChooseStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_branches ):
    212         Statement( _labels ), condition( _condition ), branches( _branches ) {
    213 }
    214 
    215 ChooseStmt::ChooseStmt( const ChooseStmt & other ):
    216         Statement( other ), condition( maybeClone( other.condition ) ) {
    217                 cloneAll( other.branches, branches );
    218 }
    219 
    220 ChooseStmt::~ChooseStmt() {
    221         delete condition;
    222 }
    223 
    224 void ChooseStmt::add_case( CaseStmt *c ) {}
    225 
    226 void ChooseStmt::print( std::ostream &os, int indent ) const {
    227         os << "Choose on condition: ";
    228         condition->print( os );
    229         os << endl;
    230 
    231         // branches
    232         std::list<Statement *>::const_iterator i;
    233         for ( i = branches.begin(); i != branches.end(); i++)
    234                 (*i )->print( os, indent + 4 );
    235 
    236         //for_each( branches.begin(), branches.end(), mem_fun( bind1st(&Statement::print ), os ));
    237 }
    238 
    239 void FallthruStmt::print( std::ostream &os, int indent ) const {
    240         os << string( indent, ' ' ) << "Fall-through statement" << endl;
    241208}
    242209
  • src/SynTree/Statement.h

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Dec 09 14:09:24 2015
    13 // Update Count     : 46
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:53:29 2016
     13// Update Count     : 47
    1414//
    1515
     
    149149};
    150150
    151 class ChooseStmt : public Statement {
    152   public:
    153         ChooseStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches );
    154         ChooseStmt( const ChooseStmt &other );
    155         virtual ~ChooseStmt();
    156 
    157         Expression *get_condition() { return condition; }
    158         void set_condition( Expression *newValue ) { condition = newValue; }
    159 
    160         std::list<Statement *>& get_branches() { return branches; }
    161         void add_case( CaseStmt * );
    162 
    163         virtual void accept( Visitor &v ) { v.visit( this ); }
    164         virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    165 
    166         virtual ChooseStmt *clone() const { return new ChooseStmt( *this ); }
    167         virtual void print( std::ostream &os, int indent = 0 ) const;
    168   private:
    169         Expression *condition;
    170         std::list<Statement *> branches; // should be list of CaseStmt
    171 };
    172 
    173 class FallthruStmt : public Statement {
    174   public:
    175         FallthruStmt( std::list<Label> labels ) : Statement( labels ) { }
    176 
    177         virtual void accept( Visitor &v ) { v.visit( this ); }
    178         virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    179 
    180         virtual FallthruStmt *clone() const { return new FallthruStmt( *this ); }
    181         virtual void print( std::ostream &os, int indent = 0 ) const;
    182 };
    183 
    184151class CaseStmt : public Statement {
    185152  public:
  • src/SynTree/SynTree.h

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 14 15:31:36 2016
    13 // Update Count     : 5
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:54:02 2016
     13// Update Count     : 6
    1414//
    1515
     
    4545class ForStmt;
    4646class SwitchStmt;
    47 class ChooseStmt;
    48 class FallthruStmt;
    4947class CaseStmt;
    5048class BranchStmt;
  • src/SynTree/Visitor.cc

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Apr 27 17:07:40 2016
    13 // Update Count     : 18
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:54:39 2016
     13// Update Count     : 19
    1414//
    1515
     
    112112}
    113113
    114 void Visitor::visit( ChooseStmt *switchStmt ) {
    115         maybeAccept( switchStmt->get_condition(), *this );
    116         acceptAll( switchStmt->get_branches(), *this );
    117 }
    118 
    119 void Visitor::visit( FallthruStmt *fallthruStmt ) {}
    120 
    121114void Visitor::visit( CaseStmt *caseStmt ) {
    122115        maybeAccept( caseStmt->get_condition(), *this );
  • src/SynTree/Visitor.h

    r7d5e243 r6066e32  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Thu Apr 14 15:30:58 2016
    13 // Update Count     : 7
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 17:55:09 2016
     13// Update Count     : 8
    1414//
    1515
     
    4242        virtual void visit( ForStmt *forStmt );
    4343        virtual void visit( SwitchStmt *switchStmt );
    44         virtual void visit( ChooseStmt *switchStmt );
    45         virtual void visit( FallthruStmt *switchStmt );
    4644        virtual void visit( CaseStmt *caseStmt );
    4745        virtual void visit( BranchStmt *branchStmt );
  • src/examples/includes.c

    r7d5e243 r6066e32  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 22:30:02 2016
    13 // Update Count     : 370
     12// Last Modified On : Tue Jul 12 17:59:25 2016
     13// Update Count     : 371
    1414//
    1515
     
    2222#endif // __CFA__
    2323
     24#if 0
    2425#if 1
    2526#define _GNU_SOURCE
    26 //#include <aio.h>
    27 //#include <a.out.h>
    28 //#include <aliases.h>
    29 //#include <alloca.h>
    30 //#include <ansidecl.h>
    31 //#include <ar.h>
    32 //#include <argp.h>
     27#include <aio.h>
     28#include <a.out.h>
     29#include <aliases.h>
     30#include <alloca.h>
     31#include <ansidecl.h>
     32#include <ar.h>
     33#include <argp.h>
    3334#include <argz.h>
    34 //#include <assert.h>
     35#include <assert.h>
    3536#include <bfd.h>
    36 #if 0
    3737#include <bfdlink.h>
    3838#include <byteswap.h>
     
    4444#include <ctype.h>
    4545#include <curses.h>
    46 #include <demangle.h>
     46//#include <demangle.h>
    4747#include <dialog.h>
    4848#include <dirent.h>
    4949#include <dis-asm.h>
     50#endif
     51#if 0
    5052#include <dlfcn.h>
    5153#include <dlg_colors.h>
     
    128130#else
    129131
    130 //#define _GNU_SOURCE
    131 #include <bfd.h>
     132#define _GNU_SOURCE
     133//#include <bfd.h>
    132134//#include <error.h>
     135
     136#include <demangle.h>
    133137
    134138#endif // 0
  • src/libcfa/iostream

    r7d5e243 r6066e32  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Apr 10 23:00:12 2016
    13 // Update Count     : 92
     12// Last Modified On : Tue Jul 12 18:01:09 2016
     13// Update Count     : 93
    1414//
    1515
     
    4242};
    4343
    44 // implement writable for some intrinsic types
     44// implement writable for intrinsic types
    4545
    4646forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
     
    6767
    6868forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
     69// manipulators
    6970forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
    7071forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
  • src/libcfa/iostream.c

    r7d5e243 r6066e32  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu May 26 10:08:31 2016
    13 // Update Count     : 305
     12// Last Modified On : Tue Jul 12 18:01:39 2016
     13// Update Count     : 306
    1414//
    1515
     
    185185
    186186forall( dtype ostype | ostream( ostype ) )
    187 ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) {
     187ostype * ?|?( ostype * os, ostype * (* manip)( ostype * ) ) {
    188188        return manip( os );
    189189} // ?|?
  • src/tests/switch.c

    r7d5e243 r6066e32  
    1 int main(int argc, char const *argv[]) {
    2     int i;
    3     switch ( i ) case 3 : i = 1;
    4     switch ( i ) default : i = 1;
    5     switch ( 3 )
    6       default:
    7       case 2:
    8       case 3:
    9         3;
     1//
     2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
     3//
     4// The contents of this file are covered under the licence agreement in the
     5// file "LICENCE" distributed with Cforall.
     6//
     7// switch.c --
     8//
     9// Author           : Peter A. Buhr
     10// Created On       : Tue Jul 12 06:50:22 2016
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue Jul 12 18:02:23 2016
     13// Update Count     : 22
     14//
    1015
    11     switch ( i ) {
    12     }
     16int f( int i ) { return i; }
    1317
    14     switch ( i ) {
    15         int i;
    16       case 8~10:
    17       default:
    18         i = 3;
    19       case 3:
    20       case 'A' ... 'Z':
    21       case 5 ... 6:
    22       case 2, 4:
    23         i = 3;
    24         break;
    25     }
     18int main() {
     19        int i = 0;
     20        switch ( i ) case 3 : i = 1;
     21        switch ( i ) default : f( 3 );
    2622
    27     choose ( i ) case 3 : i = 1;
    28     choose ( i ) default : i = 1;
    29     choose ( i ) {
    30         int i;
    31       case 3:
    32       case 'A' ... 'Z':
    33       case 5 ... 6:
    34       case 2, 4, 7:
    35         i = 3;
    36         fallthru;
    37       default:
    38         i = 3;
    39       case 8~10:
    40         fallthru
    41     }
     23        switch ( 3 )
     24          default:
     25          case 2:
     26          case 3:
     27                f( 3 );
     28
     29        switch ( i ) {}
     30        switch ( i ) {
     31          case 3:
     32                f( 3 );
     33        } // switch
     34
     35        // switch (3 ) {
     36        //      int j;
     37        //   case 3:
     38        //      break;
     39        //   case 4:
     40        //      j = 0;
     41        // }
     42
     43        switch ( i ) {
     44                int j = 0;
     45                int k = 0;
     46                struct S { int i; };
     47                S s;
     48          case 8~10:
     49          default:
     50                i = 3;
     51          case 3:
     52          case 'A' ... 'Z':
     53          case 5 ... 6:
     54          case 2, 4:
     55                j = 3;
     56                f( 3 );
     57                break;
     58        } // switch
     59
     60        choose ( i ) case 3 : f( 3 );
     61        choose ( i ) default : i = 1;
     62
     63        choose ( 3 )
     64          case 2:
     65          default:
     66          case 3:
     67                f( 3 );
     68
     69        choose ( i ) {}
     70        choose ( i ) {
     71          case 3:
     72                f( 3 );
     73        } // choose
     74
     75        choose ( i ) {
     76                int j = 0;
     77                int k = 0;
     78                struct S { int i; };
     79                S s;
     80          case 3:
     81          case 'A' ... 'Z':
     82          case 5 ... 6:
     83          case 2, 4, 7:
     84                i = 3;
     85                f( 3 );
     86          default:
     87                j = 3;
     88          case 8~10:
     89                f( 3 );
     90                fallthru
     91          case 'd':
     92                j = 5;
     93        } // choose
    4294}
     95
     96// Local Variables: //
     97// tab-width: 4 //
     98// compile-command: "cfa switch.c" //
     99// End: //
Note: See TracChangeset for help on using the changeset viewer.