Changeset 7527e63


Ignore:
Timestamp:
Aug 16, 2016, 3:20:06 PM (9 years ago)
Author:
Thierry Delisle <tdelisle@…>
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:
1f6d4624
Parents:
950f7a7 (diff), 7880579 (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:software/cfa/cfa-cc

Files:
11 added
6 deleted
95 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    r950f7a7 r7527e63  
    3434# generated by bison and lex from cfa.yy and lex.ll, respectively
    3535src/Parser/parser.output
     36
     37# generated by xfig for user manual
     38doc/user/Cdecl.tex
     39doc/user/pointer1.tex
     40doc/user/pointer2.tex
  • INSTALL

    r950f7a7 r7527e63  
    33
    44Cforall is built using GNU Make and the GNU Autoconf system.  It also requires
    5 g++ version 4, bison and flex.  On systems where GNU Make is the default make
    6 it may suffice to build the system by entering the commands
     5g++ version >= 4.6, bison and flex.  On systems where GNU Make is the default
     6make, the system is built by entering the commands:
    77
    88        ./configure
     
    1717
    1818--prefix=/some/directory controls the path prefix common to all installed
    19   cfa-cc components.  Some components will be installed in /some/directory/bin,
     19  cfa-cc components.  Some components are installed in /some/directory/bin,
    2020  others in /some/directory/lib.  If unspecified, this defaults to /usr/local.
    21   If you wish to use (a subdirectory of) your home directory, ${HOME}/some/dir
    22   works, but it is important not to put quotes around the directory path;
    23   Cforall may appear to build, but the installed version may not work properly.
     21  To use (a subdirectory of) your home directory, ${HOME}/some/dir works, but
     22  it is important not to put quotes around the directory path; Cforall may
     23  appear to build, but the installed version may not work properly.
    2424
    2525--with-backend-compiler=PROGRAM specifies the installed path of gcc.  It
  • Jenkins/FullBuild

    r950f7a7 r7527e63  
    1414                          name: 'buildArchitecture',                    \
    1515                          value: arch]                                  \
    16                 ]
     16                ],                                                              \
     17                propagate: false
    1718
    1819        echo(result.result)
    19         echo(result.absoluteUrl)
     20
     21        if(result.result != 'SUCCESS') {
     22                sh("wget -q -O - ${result.absoluteUrl}/consoleText")
     23                error(result.result)
     24        }
    2025}
    2126
     
    3237                checkout scm
    3338
     39                collect_git_info()
     40
    3441                //parse git logs to find what changed
    3542                sh "git remote > ${out_dir}/GIT_REMOTE"
     
    4148                }
    4249
    43                 sh "git push DoLang ${gitRefNewValue}:master"
     50                //sh "GIT_SSH_COMMAND=\"ssh -v\" git push DoLang ${gitRefNewValue}:master"
     51                echo('BUILD NOT PUSH SINCE DO-LANG SERVER WAS DOWN')
     52}
     53
     54//Helper routine to collect information about the git history
     55def collect_git_info() {
     56
     57        //create the temporary output directory in case it doesn't already exist
     58        def out_dir = pwd tmp: true
     59        sh "mkdir -p ${out_dir}"
     60
     61        //parse git logs to find what changed
     62        dir("../Cforall_Full_Build@script") {
     63                sh "git reflog > ${out_dir}/GIT_COMMIT"
     64        }
     65        git_reflog = readFile("${out_dir}/GIT_COMMIT")
     66        gitRefOldValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][1]
     67        gitRefNewValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][2]
    4468}
    4569
     
    4973
    5074node ('master') {
     75        def err = null
     76
    5177        try {
    5278                //Prevent the build from exceeding 30 minutes
     
    78104        //attach the build log to the email
    79105        catch (Exception caughtError) {
     106                echo('error caught')
     107
    80108                //rethrow error later
    81109                err = caughtError
    82110
    83111                //Store the result of the build log
    84                 currentBuild.result = "${status_prefix} FAILURE".trim()
     112                currentBuild.result = 'FAILURE'
    85113
    86114                //Send email to notify the failure
    87                 promote_email(currentBuild.result)
     115                promote_failure_email()
    88116        }
    89117
     
    100128
    101129//Email notification on a full build failure
    102 def promote_email(String status) {
     130def promote_failure_email() {
     131        echo('notifying users')
     132
    103133        //Since tokenizer doesn't work, figure stuff out from the environnement variables and command line
    104134        //Configurations for email format
     
    113143- Status --------------------------------------------------------------
    114144
    115 PROMOTE FAILURE - ${status}
     145PROMOTE FAILURE
    116146"""
    117147
  • doc/LaTeXmacros/common.tex

    r950f7a7 r7527e63  
    1111%% Created On       : Sat Apr  9 10:06:17 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Tue Jul 12 20:37:57 2016
    14 %% Update Count     : 206
     13%% Last Modified On : Sun Aug 14 08:27:29 2016
     14%% Update Count     : 231
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    16 
    17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1816
    1917\setlength{\textheight}{9in}
    2018%\oddsidemargin 0.0in
    21 \renewcommand{\topfraction}{0.8}        % float must be greater than X of the page before it is forced onto its own page
    22 \renewcommand{\bottomfraction}{0.8}     % float must be greater than X of the page before it is forced onto its own page
     19\renewcommand{\topfraction}{0.8}                % float must be greater than X of the page before it is forced onto its own page
     20\renewcommand{\bottomfraction}{0.8}             % float must be greater than X of the page before it is forced onto its own page
    2321\renewcommand{\floatpagefraction}{0.8}  % float must be greater than X of the page before it is forced onto its own page
    24 \renewcommand{\textfraction}{0.0}       % the entire page maybe devoted to floats with no text on the page at all
    25 
    26 \lefthyphenmin=4
     22\renewcommand{\textfraction}{0.0}               % the entire page maybe devoted to floats with no text on the page at all
     23
     24\lefthyphenmin=4                                                % hyphen only after 4 characters
    2725\righthyphenmin=4
    2826
     
    3836% Names used in the document.
    3937
    40 \newcommand{\CFA}{C$\mathbf\forall$\xspace}              % set language symbolic name
    41 \newcommand{\CFL}{Cforall\xspace}                        % set language text name
     38\newcommand{\CFA}{C$\mathbf\forall$\xspace} % set language symbolic name
     39\newcommand{\CFL}{Cforall\xspace}               % set language text name
    4240\newcommand{\CC}{\rm C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    43 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     41\newcommand{\CCeleven}{\rm C\kern-.1em\hbox{+\kern-.25em+}11\xspace} % C++11 symbolic name
     42\newcommand{\Celeven}{C11\xspace}               % C11 symbolic name
    4443
    4544%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    5150\setlength{\parindentlnth}{\parindent}
    5251
    53 \newlength{\gcolumnposn}
     52\newlength{\gcolumnposn}                                % temporary hack because lstlisting does handle tabs correctly
    5453\newlength{\columnposn}
    5554\setlength{\gcolumnposn}{2.5in}
     
    6261%\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
    6362
    64 \usepackage{pslatex}                                                                    % reduce size of san serif font
    65 \usepackage{relsize}                                    % must be after change to small or selects old size
     63\usepackage{pslatex}                                    % reduce size of san serif font
     64\usepackage{relsize}                                    % must be after change to small or selects old size
    6665
    6766% reduce size of chapter/section titles
     
    119118
    120119% inline text and lowercase index: \Index{inline and lowercase index text}
     120\newcommand{\Index}{\@ifstar\@sIndex\@Index}
    121121% inline text and as-in index: \Index[as-is index text]{inline text}
     122\newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    122123% inline text but index with different as-is text: \Index[index text]{inline text}
    123 \newcommand{\Index}{\@ifstar\@sIndex\@Index}
    124 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    125124\newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
    126125
    127 % cannot use ©
     126% inline text and code index (cannot use ©)
    128127\newcommand{\Indexc}[1]{\lstinline$#1$\index{#1@\lstinline$#1$}}
     128% code index (cannot use ©)
    129129\newcommand{\indexc}[1]{\index{#1@\lstinline$#1$}}
    130130
     
    136136\newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    137137\newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
     138
     139% Latin abbreviation
     140\newcommand{\abbrevFont}{\textit}       % set empty for no italics
     141\newcommand*{\eg}{%
     142        \@ifnextchar{,}{\abbrevFont{e}.\abbrevFont{g}.}%
     143                {\@ifnextchar{:}{\abbrevFont{e}.\abbrevFont{g}.}%
     144                        {\abbrevFont{e}.\abbrevFont{g}.,\xspace}}%
     145}%
     146\newcommand*{\ie}{%
     147        \@ifnextchar{,}{\abbrevFont{i}.\abbrevFont{e}.}%
     148                {\@ifnextchar{:}{\abbrevFont{i}.\abbrevFont{e}.}%
     149                        {\abbrevFont{i}.\abbrevFont{e}.,\xspace}}%
     150}%
     151\newcommand*{\etc}{%
     152        \@ifnextchar{.}{\abbrevFont{etc}}%
     153        {\abbrevFont{etc}.\xspace}%
     154}%
     155\newcommand{\etal}{%
     156        \@ifnextchar{.}{\abbrevFont{et~al}}%
     157                {\abbrevFont{et al}.\xspace}%
     158}%
    138159\makeatother
    139160
     
    144165        \endlist
    145166}% quote2
     167
    146168\newenvironment{rationale}{%
    147169  \begin{quote2}\noindent$\Box$\enspace
     
    187209\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    188210
    189 % Go programming language
     211% Go programming language: https://github.com/julienc91/listings-golang/blob/master/listings-golang.sty
    190212\lstdefinelanguage{Golang}{
    191213        morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},%
     
    203225}
    204226
    205 % CFA programming language, based on ANSI C
     227% CFA programming language, based on ANSI C (with some gcc additions)
    206228\lstdefinelanguage{CFA}[ANSI]{C}{
    207229        morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto,
    208230                _Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__,
    209                 fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,otype,restrict,_Static_assert,
     231                fallthrough,fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,otype,restrict,_Static_assert,
    210232                _Thread_local,throw,throwResume,trait,try,typeof,__typeof,__typeof__,},
    211233}%
     
    214236language=CFA,
    215237columns=fullflexible,
    216 basicstyle=\linespread{0.9}\sf,
    217 stringstyle=\tt,
    218 tabsize=4,
    219 xleftmargin=\parindentlnth,
    220 extendedchars=true,
    221 escapechar=§,
    222 mathescape=true,
    223 keepspaces=true,
    224 showstringspaces=false,
    225 showlines=true,
    226 aboveskip=4pt,
     238basicstyle=\linespread{0.9}\sf,                 % reduce line spacing and use sanserif font
     239stringstyle=\tt,                                                % use typewriter font
     240tabsize=4,                                                              % 4 space tabbing
     241xleftmargin=\parindentlnth,                             % indent code to paragraph indentation
     242extendedchars=true,                                             % allow ASCII characters in the range 128-255
     243escapechar=§,                                                   % escape to latex in CFA code
     244mathescape=true,                                                % allow $...$ LaTeX math escapes in code
     245%keepspaces=true,                                               %
     246showstringspaces=false,                                 % do not show spaces with cup
     247showlines=true,                                                 % show blank lines at end of code
     248aboveskip=4pt,                                                  % spacing above/below code block
    227249belowskip=3pt,
    228 moredelim=**[is][\color{red}]{®}{®}, % red highlighting
    229 moredelim=**[is][\color{blue}]{ß}{ß}, % blue highlighting
     250moredelim=**[is][\color{red}]{®}{®},    % red highlighting
     251moredelim=**[is][\color{blue}]{ß}{ß},   % blue highlighting
    230252moredelim=**[is][\color{OliveGreen}]{¢}{¢}, % green highlighting
    231253moredelim=[is][\lstset{keywords={}}]{¶}{¶}, % temporarily turn off keywords
     
    233255literate={-}{\raisebox{-0.15ex}{\texttt{-}}}1 {^}{\raisebox{0.6ex}{$\scriptscriptstyle\land\,$}}1
    234256        {~}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}}1 {_}{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}1 {`}{\ttfamily\upshape\hspace*{-0.1ex}`}1
    235         {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {...}{$\dots$}2,
     257        {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2,
    236258}%
    237259
     
    241263\renewcommand\thebibliography[1]{
    242264  \Oldthebibliography{#1}
    243   \setlength{\parskip}{0pt}                     % reduce vertical spacing between references
     265  \setlength{\parskip}{0pt}                             % reduce vertical spacing between references
    244266  \setlength{\itemsep}{5pt plus 0.3ex}
    245267}%
  • doc/bibliography/cfa.bib

    r950f7a7 r7527e63  
    832832    address     = {http://www.iso.org},
    833833    year        = 2012,
     834}
     835
     836@manual{C++Concepts,
     837        keywords = {ISO/IEC TS 19217:2015},
     838        contributer = {a3moss@uwaterloo.ca},
     839        key = {C++ Concepts},
     840        title = {Information technology -- Programming languages -- {C}{\kern-.1em\hbox{\large\texttt{+\kern-.25em+}}} Extensions for concepts},
     841        organization = {International Standard ISO/IEC TS 19217:2015},
     842        publisher = {International Standard Organization},
     843        address = {http://www.iso.org},
     844        year = 2015
    834845}
    835846
     
    16231634    year        = 1974,
    16241635}
     1636
     1637@unpublished{Ditchfield:conversions,
     1638        contributer = {a3moss@uwaterloo.ca},
     1639        author = {Glen Ditchfield},
     1640        title = {Conversions for {Cforall}},
     1641        note = {\href{http://plg.uwaterloo.ca/~cforall/Conversions/index.html}{http://\-plg.uwaterloo.ca/\-\textasciitilde cforall/\-Conversions/\-index.html}},
     1642        month = {Nov},
     1643        year = {2002},
     1644        urldate = {28 July 2016},
     1645}
     1646
    16251647
    16261648@techreport{Dijkstra65,
     
    46634685}
    46644686
     4687@article{Ganzinger80,
     4688        contributer = {a3moss@uwaterloo.ca},
     4689        author = {Ganzinger, Harald and Ripken, Knut},
     4690        title = {Operator Identification in {ADA}: Formal Specification, Complexity, and Concrete Implementation},
     4691        journal = {SIGPLAN Notices},
     4692        issue_date = {February 1980},
     4693        volume = {15},
     4694        number = {2},
     4695        month = feb,
     4696        year = {1980},
     4697        issn = {0362-1340},
     4698        pages = {30--42},
     4699        numpages = {13},
     4700        url = {http://doi.acm.org/10.1145/947586.947589},
     4701        doi = {10.1145/947586.947589},
     4702        publisher = {ACM},
     4703        address = {New York, NY, USA}
     4704}
     4705
    46654706@article{Ford82,
    46664707    keywords    = {},
     
    58295870}
    58305871
     5872@article{Pennello80,
     5873        contributer = {a3moss@uwaterloo.ca},
     5874        author = {Pennello, Tom and DeRemer, Frank and Meyers, Richard},
     5875        title = {A Simplified Operator Identification Scheme for {Ada}},
     5876        journal = {SIGPLAN Notices},
     5877        issue_date = {July-August 1980},
     5878        volume = {15},
     5879        number = {7 and 8},
     5880        month = jul,
     5881        year = {1980},
     5882        issn = {0362-1340},
     5883        pages = {82--87},
     5884        numpages = {6},
     5885        url = {http://doi.acm.org/10.1145/947680.947688},
     5886        doi = {10.1145/947680.947688},
     5887        publisher = {ACM},
     5888        address = {New York, NY, USA},
     5889}
     5890
    58315891@inproceedings{Dice10,
    58325892    keywords    = {hardware, synchronization, transactional memory},
  • doc/user/user.tex

    r950f7a7 r7527e63  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Wed Jul 13 08:14:39 2016
    14 %% Update Count     : 1247
     13%% Last Modified On : Sun Aug 14 08:23:06 2016
     14%% Update Count     : 1323
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    211211however, it largely extended the language, and did not address many existing problems.\footnote{%
    212212Two important existing problems addressed were changing the type of character literals from ©int© to ©char© and enumerator from ©int© to the type of its enumerators.}
    213 \Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language features (e.g., objects, concurrency) are added and problems fixed within the framework of the existing language.
     213\Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language features (\eg objects, concurrency) are added and problems fixed within the framework of the existing language.
    214214\Index*{Java}~\cite{Java8}, \Index*{Go}~\cite{Go}, \Index*{Rust}~\cite{Rust} and \Index*{D}~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent.
    215215These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection.
     
    226226
    227227\section{Interoperability}
     228\label{s:Interoperability}
    228229
    229230\CFA is designed to integrate well with existing C programs and libraries.
     
    265266\section[Compiling CFA Program]{Compiling \CFA Program}
    266267
    267 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, e.g.:
     268The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, \eg:
    268269\begin{lstlisting}
    269270cfa§\indexc{cfa}\index{compilation!cfa@©cfa©}§ [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ]
     
    314315The \CFA compilation message is printed at the beginning of a compilation.
    315316\textbf{This option is the default.}
     317
     318\item
     319\Indexc{-no-include-stdhdr}\index{compilation option!-no-include-stdhdr@©-no-include-stdhdr©}
     320Do not supply ©extern "C"© wrappers for \Celeven standard include files (see~\VRef{s:StandardHeaders}).
     321\textbf{This option is \emph{not} the default.}
    316322\end{description}
    317323
     
    350356\section{Underscores in Constants}
    351357
    352 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.:
     358Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, \eg:
    353359\begin{lstlisting}
    3543602®_®147®_®483®_®648;                    §\C{// decimal constant}§
     
    366372\begin{enumerate}
    367373\item
    368 A sequence of underscores is disallowed, e.g., ©12__34© is invalid.
     374A sequence of underscores is disallowed, \eg ©12__34© is invalid.
    369375\item
    370376Underscores may only appear within a sequence of digits (regardless of the digit radix).
    371 In other words, an underscore cannot start or end a sequence of digits, e.g., ©_1©, ©1_© and ©_1_© are invalid (actually, the 1st and 3rd examples are identifier names).
     377In other words, an underscore cannot start or end a sequence of digits, \eg ©_1©, ©1_© and ©_1_© are invalid (actually, the 1st and 3rd examples are identifier names).
    372378\item
    373379A numeric prefix may end with an underscore;
     
    498504\end{quote2}
    499505
    500 All type qualifiers, e.g., ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, e.g.:
     506All type qualifiers, \eg ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, \eg:
    501507\begin{quote2}
    502508\begin{tabular}{@{}l@{\hspace{1em}}l@{\hspace{1em}}l@{}}
     
    518524\end{tabular}
    519525\end{quote2}
    520 All declaration qualifiers, e.g., ©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier}
    521 The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} e.g.:
     526All declaration qualifiers, \eg ©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier}
     527The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} \eg:
    522528\begin{quote2}
    523529\begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}}
     
    542548Unsupported are K\&R C declarations where the base type defaults to ©int©, if no type is specified,\footnote{
    543549At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}}
    544 e.g.:
     550\eg:
    545551\begin{lstlisting}
    546552x;                                                              §\C{// int x}§
     
    612618A \Index{pointer}/\Index{reference} is a generalization of a variable name, i.e., a mutable address that can point to more than one memory location during its lifetime.
    613619(Similarly, an integer variable can contain multiple integer literals during its lifetime versus an integer constant representing a single literal during its lifetime and may not occupy storage as the literal is embedded directly into instructions.)
    614 Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, e.g.:
     620Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, \eg:
    615621\begin{quote2}
    616622\begin{tabular}{@{}ll@{}}
     
    669675Except for auto-dereferencing by the compiler, this reference example is the same as the previous pointer example.
    670676Hence, a reference behaves like the variable name for the current variable it is pointing-to.
    671 The simplest way to understand a reference is to imagine the compiler inserting a dereference operator before the reference variable for each reference qualifier in a declaration, e.g.:
     677The simplest way to understand a reference is to imagine the compiler inserting a dereference operator before the reference variable for each reference qualifier in a declaration, \eg:
    672678\begin{lstlisting}
    673679r2 = ((r1 + r2) * (r3 - r1)) / (r3 - 15);
     
    677683®*®r2 = ((®*®r1 + ®*®r2) ®*® (®**®r3 - ®*®r1)) / (®**®r3 - 15);
    678684\end{lstlisting}
    679 When a reference operation appears beside a dereference operation, e.g., ©&*©, they cancel out.\footnote{
     685When a reference operation appears beside a dereference operation, \eg ©&*©, they cancel out.\footnote{
    680686The unary ©&© operator yields the address of its operand.
    681687If the operand has type ``type'', the result has type ``pointer to type''.
     
    721727®&®crc = &cx;                                   §\C{// error, cannot change crc}§
    722728\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}, e.g.:
     729Hence, 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}, \eg:
    724730\begin{lstlisting}
    725731int & const r = *0;                             §\C{// where 0 is the int * zero}§
    726732\end{lstlisting}
    727733Otherwise, 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.
     734Finally, the position of the ©const© qualifier \emph{after} the pointer/reference qualifier causes confuse for C programmers.
     735The ©const© qualifier cannot be moved before the pointer/reference qualifier for C style-declarations;
     736\CFA-style declarations attempt to address this issue:
     737\begin{quote2}
     738\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     739\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{C}}        \\
     740\begin{lstlisting}
     741®const® * ®const® * const int ccp;
     742®const® & ®const® & const int ccr;
     743\end{lstlisting}
     744&
     745\begin{lstlisting}
     746const int * ®const® * ®const® ccp;
     747
     748\end{lstlisting}
     749\end{tabular}
     750\end{quote2}
     751where the \CFA declaration is read left-to-right (see \VRef{s:Declarations}).
    728752
    729753\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.
     
    783807
    784808
     809\section{Backquote Identifiers}
     810\label{s:BackquoteIdentifiers}
     811
     812\CFA accommodates keyword clashes by syntactic transformations using the \CFA backquote escape-mechanism:
     813\begin{lstlisting}
     814int `otype` = 3;                                // make keyword an identifier
     815double `choose` = 3.5;
     816\end{lstlisting}
     817Programs can be converted easily by enclosing keyword identifiers in backquotes, and the backquotes can be removed later when the identifier name is changed to an non-keyword name.
     818Clashes in C header files (see~\VRef{s:StandardHeaders}) can be handled automatically using the preprocessor, ©#include_next© and ©-I filename©:
     819\begin{lstlisting}
     820// include file uses the CFA keyword "otype".
     821#if ! defined( otype )                  // nesting ?
     822#define otype `otype`
     823#define __CFA_BFD_H__
     824#endif // ! otype
     825
     826#include_next <bfd.h>                   // must have internal check for multiple expansion
     827
     828#if defined( otype ) && defined( __CFA_BFD_H__ )        // reset only if set
     829#undef otype
     830#undef __CFA_BFD_H__
     831#endif // otype && __CFA_BFD_H__
     832\end{lstlisting}
     833
     834
    785835\section{Type Operators}
    786836
    787 The new declaration syntax can be used in other contexts where types are required, e.g., casts and the pseudo-routine ©sizeof©:
     837The new declaration syntax can be used in other contexts where types are required, \eg casts and the pseudo-routine ©sizeof©:
    788838\begin{quote2}
    789839\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     
    805855
    806856\CFA also supports a new syntax for routine definition, as well as ISO C and K\&R routine syntax.
    807 The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, e.g.:
     857The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, \eg:
    808858\begin{lstlisting}
    809859®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) {
     
    817867\Index*{Michael Tiemann}, with help from \Index*{Doug Lea}, provided named return values in g++, circa 1989.}
    818868The value of each local return variable is automatically returned at routine termination.
    819 Declaration qualifiers can only appear at the start of a routine definition, e.g.:
     869Declaration qualifiers can only appear at the start of a routine definition, \eg:
    820870\begin{lstlisting}
    821871®extern® [ int x ] g( int y ) {§\,§}
     
    849899The inability to use \CFA declarations in these two contexts is probably a blessing because it precludes programmers from arbitrarily switching between declarations forms within a declaration contexts.
    850900
    851 C-style declarations can be used to declare parameters for \CFA style routine definitions, e.g.:
     901C-style declarations can be used to declare parameters for \CFA style routine definitions, \eg:
    852902\begin{lstlisting}
    853903[ int ] f( * int, int * );              §\C{// returns an integer, accepts 2 pointers to integers}§
     
    898948
    899949The syntax of the new routine prototype declaration follows directly from the new routine definition syntax;
    900 as well, parameter names are optional, e.g.:
     950as well, parameter names are optional, \eg:
    901951\begin{lstlisting}
    902952[ int x ] f ();                                 §\C{// returning int with no parameters}§
     
    906956\end{lstlisting}
    907957This syntax allows a prototype declaration to be created by cutting and pasting source text from the routine definition header (or vice versa).
    908 It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), e.g.:
     958It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), \eg:
    909959\begin{quote2}
    910960\begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     
    919969\end{tabular}
    920970\end{quote2}
    921 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} e.g.:
     971Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} \eg:
    922972\begin{lstlisting}
    923973extern [ int ] f (int);
     
    928978\section{Routine Pointers}
    929979
    930 The syntax for pointers to \CFA routines specifies the pointer name on the right, e.g.:
     980The syntax for pointers to \CFA routines specifies the pointer name on the right, \eg:
    931981\begin{lstlisting}
    932982* [ int x ] () fp;                      §\C{// pointer to routine returning int with no parameters}§
     
    9871037Alternatively, prototype definitions can be eliminated by using a two-pass compilation, and implicitly creating header files for exports.
    9881038The former is easy to do, while the latter is more complex.
    989 Currently, \CFA does \emph{not} attempt to support named arguments.
     1039
     1040Furthermore, named arguments do not work well in a \CFA-style programming-languages because they potentially introduces a new criteria for type matching.
     1041For example, it is technically possible to disambiguate between these two overloaded definitions of ©f© based on named arguments at the call site:
     1042\begin{lstlisting}
     1043int f( int i, int j );
     1044int f( int x, double y );
     1045
     1046f( j : 3, i : 4 );                              §\C{// 1st f}§
     1047f( x : 7, y : 8.1 );                    §\C{// 2nd f}§
     1048f( 4, 5 );                                              §\C{// ambiguous call}§
     1049\end{lstlisting}
     1050However, named arguments compound routine resolution in conjunction with conversions:
     1051\begin{lstlisting}
     1052f( i : 3, 5.7 );                                §\C{// ambiguous call ?}§
     1053\end{lstlisting}
     1054Depending on the cost associated with named arguments, this call could be resolvable or ambiguous.
     1055Adding named argument into the routine resolution algorithm does not seem worth the complexity.
     1056Therefore, \CFA does \emph{not} attempt to support named arguments.
    9901057
    9911058\item[Default Arguments]
     
    9971064the allowable positional calls are:
    9981065\begin{lstlisting}
    999 p();                            §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
    1000 p( 4 );                         §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
    1001 p( 4, 4 );                      §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
    1002 p( 4, 4, 4 );           §\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§
     1066p();                                                    §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
     1067p( 4 );                                                 §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
     1068p( 4, 4 );                                              §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
     1069p( 4, 4, 4 );                                   §\C{// rewrite $\Rightarrow$ p( 4, 4, 4 )}§
    10031070// empty arguments
    1004 p(  , 4, 4 );           §\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§
    1005 p( 4,  , 4 );           §\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§
    1006 p( 4, 4,   );           §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
    1007 p( 4,  ,   );           §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
    1008 p(  , 4,   );           §\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§
    1009 p(  ,  , 4 );           §\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§
    1010 p(  ,  ,   );           §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
     1071p(  , 4, 4 );                                   §\C{// rewrite $\Rightarrow$ p( 1, 4, 4 )}§
     1072p( 4,  , 4 );                                   §\C{// rewrite $\Rightarrow$ p( 4, 2, 4 )}§
     1073p( 4, 4,   );                                   §\C{// rewrite $\Rightarrow$ p( 4, 4, 3 )}§
     1074p( 4,  ,   );                                   §\C{// rewrite $\Rightarrow$ p( 4, 2, 3 )}§
     1075p(  , 4,   );                                   §\C{// rewrite $\Rightarrow$ p( 1, 4, 3 )}§
     1076p(  ,  , 4 );                                   §\C{// rewrite $\Rightarrow$ p( 1, 2, 4 )}§
     1077p(  ,  ,   );                                   §\C{// rewrite $\Rightarrow$ p( 1, 2, 3 )}§
    10111078\end{lstlisting}
    10121079Here the missing arguments are inserted from the default values in the parameter list.
     
    10431110The conflict occurs because both named and ellipse arguments must appear after positional arguments, giving two possibilities:
    10441111\begin{lstlisting}
    1045 p( /* positional */, . . ., /* named */ );
    1046 p( /* positional */, /* named */, . . . );
    1047 \end{lstlisting}
    1048 While it is possible to implement both approaches, the first possibly is more complex than the second, e.g.:
    1049 \begin{lstlisting}
    1050 p( int x, int y, int z, . . . );
    1051 p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, . . ., /* named */ );}§
    1052 p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, . . . );}§
     1112p( /* positional */, ... , /* named */ );
     1113p( /* positional */, /* named */, ... );
     1114\end{lstlisting}
     1115While it is possible to implement both approaches, the first possibly is more complex than the second, \eg:
     1116\begin{lstlisting}
     1117p( int x, int y, int z, ... );
     1118p( 1, 4, 5, 6, z : 3, y : 2 ); §\C{// assume p( /* positional */, ... , /* named */ );}§
     1119p( 1, z : 3, y : 2, 4, 5, 6 ); §\C{// assume p( /* positional */, /* named */, ... );}§
    10531120\end{lstlisting}
    10541121In the first call, it is necessary for the programmer to conceptually rewrite the call, changing named arguments into positional, before knowing where the ellipse arguments begin.
     
    10561123In the second call, the named arguments separate the positional and ellipse arguments, making it trivial to read the call.
    10571124
    1058 The problem is exacerbated with default arguments, e.g.:
    1059 \begin{lstlisting}
    1060 void p( int x, int y = 2, int z = 3. . . );
    1061 p( 1, 4, 5, 6, z : 3 );         §\C{// assume p( /* positional */, . . ., /* named */ );}§
    1062 p( 1, z : 3, 4, 5, 6 );         §\C{// assume p( /* positional */, /* named */, . . . );}§
     1125The problem is exacerbated with default arguments, \eg:
     1126\begin{lstlisting}
     1127void p( int x, int y = 2, int z = 3... );
     1128p( 1, 4, 5, 6, z : 3 );         §\C{// assume p( /* positional */, ... , /* named */ );}§
     1129p( 1, z : 3, 4, 5, 6 );         §\C{// assume p( /* positional */, /* named */, ... );}§
    10631130\end{lstlisting}
    10641131The first call is an error because arguments 4 and 5 are actually positional not ellipse arguments;
     
    11051172\subsection{Type Nesting}
    11061173
    1107 \CFA allows \Index{type nesting}, and type qualification of the nested types (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
     1174\CFA allows \Index{type nesting}, and type qualification of the nested typres (see \VRef[Figure]{f:TypeNestingQualification}), where as C hoists\index{type hoisting} (refactors) nested types into the enclosing scope and has no type qualification.
    11081175\begin{figure}
     1176\centering
    11091177\begin{tabular}{@{}l@{\hspace{3em}}l|l@{}}
    11101178\multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}}      & \multicolumn{1}{c}{\textbf{C Implicit Hoisting}}      & \multicolumn{1}{|c}{\textbf{\CFA}}    \\
     
    12641332
    12651333As mentioned, tuples can appear in contexts requiring a list of value, such as an argument list of a routine call.
    1266 In unambiguous situations, the tuple brackets may be omitted, e.g., a tuple that appears as an argument may have its
     1334In unambiguous situations, the tuple brackets may be omitted, \eg a tuple that appears as an argument may have its
    12671335square brackets omitted for convenience; therefore, the following routine invocations are equivalent:
    12681336\begin{lstlisting}
     
    13031371
    13041372Type qualifiers, i.e., const and volatile, may modify a tuple type.
    1305 The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], i.e., the qualifier is distributed across all of the types in the tuple, e.g.:
     1373The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], i.e., the qualifier is distributed across all of the types in the tuple, \eg:
    13061374\begin{lstlisting}
    13071375const volatile [ int, float, const int ] x;
     
    13111379[ const volatile int, const volatile float, const volatile int ] x;
    13121380\end{lstlisting}
    1313 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, e.g.:
     1381Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, \eg:
    13141382\begin{lstlisting}
    13151383extern [ int, int ] w1;
     
    13191387Unfortunately, C's syntax for subscripts precluded treating them as tuples.
    13201388The C subscript list has the form ©[i][j]...© and not ©[i, j, ...]©.
    1321 Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, e.g., ©f[g()]© always means a single subscript value because there is only one set of brackets.
     1389Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, \eg ©f[g()]© always means a single subscript value because there is only one set of brackets.
    13221390Fixing this requires a major change to C because the syntactic form ©M[i, j, k]© already has a particular meaning: ©i, j, k© is a comma expression.
    13231391\end{rationale}
     
    13731441Mass assignment has the following form:
    13741442\begin{lstlisting}
    1375 [ §\emph{lvalue}§, ..., §\emph{lvalue}§ ] = §\emph{expr}§;
     1443[ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = §\emph{expr}§;
    13761444\end{lstlisting}
    13771445\index{lvalue}
     
    13801448Clearly, the types of the entities being assigned must be type compatible with the value of the expression.
    13811449
    1382 Mass assignment has parallel semantics, e.g., the statement:
     1450Mass assignment has parallel semantics, \eg the statement:
    13831451\begin{lstlisting}
    13841452[ x, y, z ] = 1.5;
     
    14131481Multiple assignment has the following form:
    14141482\begin{lstlisting}
    1415 [ §\emph{lvalue}§, . . ., §\emph{lvalue}§ ] = [ §\emph{expr}§, . . ., §\emph{expr}§ ];
     1483[ §\emph{lvalue}§, ... , §\emph{lvalue}§ ] = [ §\emph{expr}§, ... , §\emph{expr}§ ];
    14161484\end{lstlisting}
    14171485\index{lvalue}
     
    14691537\section{Unnamed Structure Fields}
    14701538
    1471 C requires each field of a structure to have a name, except for a bit field associated with a basic type, e.g.:
     1539C requires each field of a structure to have a name, except for a bit field associated with a basic type, \eg:
    14721540\begin{lstlisting}
    14731541struct {
    1474         int f1;                 // named field
    1475         int f2 : 4;             // named field with bit field size
    1476         int : 3;                // unnamed field for basic type with bit field size
    1477         int ;                   // disallowed, unnamed field
    1478         int *;                  // disallowed, unnamed field
    1479         int (*)(int);   // disallowed, unnamed field
     1542        int f1;                                 §\C{// named field}§
     1543        int f2 : 4;                             §\C{// named field with bit field size}§
     1544        int : 3;                                §\C{// unnamed field for basic type with bit field size}§
     1545        int ;                                   §\C{// disallowed, unnamed field}§
     1546        int *;                                  §\C{// disallowed, unnamed field}§
     1547        int (*)(int);                   §\C{// disallowed, unnamed field}§
    14801548};
    14811549\end{lstlisting}
    14821550This requirement is relaxed by making the field name optional for all field declarations; therefore, all the field declarations in the example are allowed.
    14831551As for unnamed bit fields, an unnamed field is used for padding a structure to a particular size.
    1484 A list of unnamed fields is also supported, e.g.:
     1552A list of unnamed fields is also supported, \eg:
    14851553\begin{lstlisting}
    14861554struct {
    1487         int , , ;               // 3 unnamed fields
     1555        int , , ;                               §\C{// 3 unnamed fields}§
    14881556}
    14891557\end{lstlisting}
     
    14981566§\emph{expr}§ -> [ §\emph{fieldlist}§ ]
    14991567\end{lstlisting}
    1500 \emph{expr} is any expression yielding a value of type record, e.g., ©struct©, ©union©.
     1568\emph{expr} is any expression yielding a value of type record, \eg ©struct©, ©union©.
    15011569Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}.
    15021570A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is
     
    17601828}
    17611829\end{lstlisting}
    1762 While 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.
    1763 Furthermore, 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©.
    1764 As mentioned, transfer into control structures should be forbidden;
    1765 transfers from within the ©switch© body using a ©goto© are equally unpalatable.
    1766 As 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.
     1830While the declaration of the local variable ©y© is useful with a scope across all ©case© clauses, the initialization for such a variable is defined to never be executed because control always transfers over it.
     1831Furthermore, 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©, both of which are problematic.
     1832As well, the declaration of ©z© 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.
     1833The key observation is that the ©switch© statement branches into control structure, i.e., there are multiple entry points into its statement body.
    17671834\end{enumerate}
    17681835
     
    17781845and 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.
    17791846\end{itemize}
    1780 These observations help to put the suggested changes to the ©switch© into perspective.
     1847These observations help to put the \CFA changes to the ©switch© into perspective.
    17811848\begin{enumerate}
    17821849\item
    17831850Eliminating default fall-through has the greatest potential for affecting existing code.
    1784 However, even if fall-through is removed, most ©switch© statements would continue to work because of the explicit transfers already present at the end of each ©case© clause, the common placement of the ©default© clause at the end of the case list, and the most common use of fall-through, i.e., a list of ©case© clauses executing common code, e.g.:
    1785 \begin{lstlisting}
     1851However, even if fall-through is removed, most ©switch© statements would continue to work because of the explicit transfers already present at the end of each ©case© clause, the common placement of the ©default© clause at the end of the case list, and the most common use of fall-through, i.e., a list of ©case© clauses executing common code, \eg:
     1852 \begin{lstlisting}
    17861853case 1:  case 2:  case 3: ...
    17871854\end{lstlisting}
    17881855still work.
    17891856Nevertheless, reversing the default action would have a non-trivial effect on case actions that compound, such as the above example of processing shell arguments.
    1790 Therefore, 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.:
     1857<<<<<<< HEAD
     1858Therefore, 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©, \eg:
     1859=======
     1860Therefore, 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 ©fallthrough©/©fallthru©, e.g.:
     1861>>>>>>> 080615890f586cb9954c252b55cab47f52c25758
    17911862\begin{lstlisting}
    17921863®choose® ( i ) {
     
    18151886Therefore, no change is made for this issue.
    18161887\item
    1817 Dealing 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{
    1818 Essentially, 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.
    1819 Further declaration in the statement body are disallowed.
     1888Dealing 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{
     1889Essentially, these declarations are hoisted before the ©switch©/©choose© statement and both declarations and statement are surrounded by a compound statement.} and precluding statements before the first ©case© clause.
     1890Further declarations at the same nesting level as the statement body are disallowed to ensure every transfer into the body is sound.
    18201891\begin{lstlisting}
    18211892switch ( x ) {
    1822         ®int i = 0;®                            §\C{// allowed
     1893        ®int i = 0;®                            §\C{// allowed only at start
    18231894  case 0:
    18241895        ...
    1825         ®int i = 0;®                            §\C{// disallowed}§
     1896        ®int j = 0;®                            §\C{// disallowed}§
    18261897  case 1:
    18271898    {
    1828                 ®int i = 0;®                    §\C{// allowed in any compound statement
     1899                ®int k = 0;®                    §\C{// allowed at different nesting levels
    18291900                ...
    18301901        }
     
    18461917\begin{lstlisting}
    18471918switch ( i ) {
    1848   ®case 1, 3, 5®:
     1919  case ®1, 3, 5®:
    18491920        ...
    1850   ®case 2, 4, 6®:
     1921  case ®2, 4, 6®:
    18511922        ...
    18521923}
     
    18791950\begin{lstlisting}
    18801951switch ( i ) {
    1881   ®case 1~5:®
     1952  case ®1~5:®
    18821953        ...
    1883   ®case 10~15:®
     1954  case ®10~15:®
    18841955        ...
    18851956}
     
    18881959\begin{lstlisting}
    18891960switch ( i )
    1890   case 1 ... 5:
     1961  case ®1 ... 5®:
    18911962        ...
    1892   case 10 ... 15:
     1963  case ®10 ... 15®:
    18931964        ...
    18941965}
     
    27072778Like 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.
    27082779
    2709 There are several ambiguous cases with operator identifiers, e.g., ©int *?*?()©, where the string ©*?*?© can be lexed as ©*©/©?*?© or ©*?©/©*?©.
    2710 Since it is common practise to put a unary operator juxtaposed to an identifier, e.g., ©*i©, users will be annoyed if they cannot do this with respect to operator identifiers.
     2780There are several ambiguous cases with operator identifiers, \eg ©int *?*?()©, where the string ©*?*?© can be lexed as ©*©/©?*?© or ©*?©/©*?©.
     2781Since it is common practise to put a unary operator juxtaposed to an identifier, \eg ©*i©, users will be annoyed if they cannot do this with respect to operator identifiers.
    27112782Even with this special hack, there are 5 general cases that cannot be handled.
    27122783The first case is for the function-call identifier ©?()©:
     
    27732844This means that a function requiring mutual exclusion could block if the lock is already held by another thread.
    27742845Blocking on a monitor lock does not block the kernel thread, it simply blocks the user thread, which yields its kernel thread while waiting to obtain the lock.
    2775 If multiple mutex parameters are specified, they will be locked in parameter order (i.e. first parameter is locked first) and unlocked in the
     2846If multiple mutex parameters are specified, they will be locked in parameter order (\ie first parameter is locked first) and unlocked in the
    27762847reverse order.
    27772848\begin{lstlisting}
     
    43504421\begin{description}
    43514422\item[Change:] add new keywords \\
    4352 New keywords are added to \CFA.
     4423New keywords are added to \CFA (see~\VRef{s:NewKeywords}).
    43534424\item[Rationale:] keywords added to implement new semantics of \CFA.
    43544425\item[Effect on original feature:] change to semantics of well-defined feature. \\
    43554426Any ISO C programs using these keywords as identifiers are invalid \CFA programs.
    4356 \item[Difficulty of converting:] keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism:
    4357 \begin{lstlisting}
    4358 int `otype` = 3;                                // make keyword an identifier
    4359 double `choose` = 3.5;
    4360 \end{lstlisting}
    4361 Programs can be converted automatically by enclosing keyword identifiers in backquotes, and the backquotes can be remove later when the identifier name is changed.
    4362 Clashes in C system libraries (include files) can be handled automatically using preprocessor, ©#include_next© and ©-Ifilename©:
    4363 \begin{lstlisting}
    4364 // include file uses the CFA keyword "otype".
    4365 #if ! defined( otype )                  // nesting ?
    4366 #define otype `otype`
    4367 #define __CFA_BFD_H__
    4368 #endif // ! otype
    4369 
    4370 #include_next <bfd.h>                   // must have internal check for multiple expansion
    4371 
    4372 #if defined( otype ) && defined( __CFA_BFD_H__ )        // reset only if set
    4373 #undef otype
    4374 #undef __CFA_BFD_H__
    4375 #endif // otype && __CFA_BFD_H__
    4376 \end{lstlisting}
     4427\item[Difficulty of converting:] keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism (see~\VRef{s:BackquoteIdentifiers}):
    43774428\item[How widely used:] clashes among new \CFA keywords and existing identifiers are rare.
    43784429\end{description}
     
    43844435int rtn( int i );
    43854436int rtn( char c );
    4386 rtn( 'x' );                                             // programmer expects 2nd rtn to be called
     4437rtn( 'x' );                                             §\C{// programmer expects 2nd rtn to be called}§
    43874438\end{lstlisting}
    43884439\item[Rationale:] it is more intuitive for the call to ©rtn© to match the second version of definition of ©rtn© rather than the first.
     
    44064457\item[Change:] make string literals ©const©:
    44074458\begin{lstlisting}
    4408 char * p = "abc";                               // valid in C, deprecated in §\CFA§
    4409 char * q = expr ? "abc" : "de"; // valid in C, invalid in §\CFA§
     4459char * p = "abc";                               §\C{// valid in C, deprecated in \CFA}§
     4460char * q = expr ? "abc" : "de"; §\C{// valid in C, invalid in \CFA}§
    44104461\end{lstlisting}
    44114462The type of a string literal is changed from ©[] char© to ©const [] char©.
     
    44144465\begin{lstlisting}
    44154466char * p = "abc";
    4416 p[0] = 'w';                                             // segment fault or change constant literal
     4467p[0] = 'w';                                             §\C{// segment fault or change constant literal}§
    44174468\end{lstlisting}
    44184469The same problem occurs when passing a string literal to a routine that changes its argument.
     
    44264477\item[Change:] remove \newterm{tentative definitions}, which only occurs at file scope:
    44274478\begin{lstlisting}
    4428 int i;                                                  // forward definition
    4429 int *j = ®&i®;                                  // forward reference, valid in C, invalid in §\CFA§
    4430 int i = 0;                                              // definition
     4479int i;                                                  §\C{// forward definition}§
     4480int *j = ®&i®;                                  §\C{// forward reference, valid in C, invalid in \CFA}§
     4481int i = 0;                                              §\C{// definition}§
    44314482\end{lstlisting}
    44324483is valid in C, and invalid in \CFA because duplicate overloaded object definitions at the same scope level are disallowed.
     
    44344485\begin{lstlisting}
    44354486struct X { int i; struct X *next; };
    4436 static struct X a;                              // forward definition
    4437 static struct X b = { 0, ®&a® };        // forward reference, valid in C, invalid in §\CFA§
    4438 static struct X a = { 1, &b };  // definition
     4487static struct X a;                              §\C{// forward definition}§
     4488static struct X b = { 0, ®&a® };        §\C{// forward reference, valid in C, invalid in \CFA}§
     4489static struct X a = { 1, &b };  §\C{// definition}§
    44394490\end{lstlisting}
    44404491\item[Rationale:] avoids having different initialization rules for builtin types and userdefined types.
     
    44464497\item
    44474498\begin{description}
    4448 \item[Change:] have ©struct© introduce a scope for nested types
    4449 In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing
    4450 Example:
     4499\item[Change:] have ©struct© introduce a scope for nested types:
    44514500\begin{lstlisting}
    44524501enum ®Colour® { R, G, B, Y, C, M };
    44534502struct Person {
    4454         enum ®Colour® { R, G, B };      // nested type
    4455         struct Face {                           // nested type
    4456                 ®Colour® Eyes, Hair;            // type defined outside (1 level)
     4503        enum ®Colour® { R, G, B };      §\C{// nested type}§
     4504        struct Face {                           §\C{// nested type}§
     4505                ®Colour® Eyes, Hair;    §\C{// type defined outside (1 level)}§
    44574506        };
    4458         ß.ß®Colour® shirt;                              // type defined outside (top level)
    4459         ®Colour® pants;                         // type defined same level
    4460         Face looks[10];                         // type defined same level
     4507        ß.ß®Colour® shirt;                      §\C{// type defined outside (top level)}§
     4508        ®Colour® pants;                         §\C{// type defined same level}§
     4509        Face looks[10];                         §\C{// type defined same level}§
    44614510};
    4462 ®Colour® c = R;                                 // type/enum defined same level
    4463 Personß.ß®Colour® pc = Personß.ßR;      // type/enum defined inside
    4464 Personß.ßFace pretty;                           // type defined inside
    4465 \end{lstlisting}
     4511®Colour® c = R;                                 §\C{// type/enum defined same level}§
     4512Personß.ß®Colour® pc = Personß.ßR;      §\C{// type/enum defined inside}§
     4513Personß.ßFace pretty;                   §\C{// type defined inside}§
     4514\end{lstlisting}
     4515In C, the name of the nested types belongs to the same scope as the name of the outermost enclosing structure, i.e., the nested types are hoisted to the scope of the outer-most type, which is not useful and confusing.
     4516\CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}.
     4517Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''.
    44664518\item[Rationale:] ©struct© scope is crucial to \CFA as an information structuring and hiding mechanism.
    44674519\item[Effect on original feature:] change to semantics of well-defined feature.
    44684520\item[Difficulty of converting:] Semantic transformation.
    44694521\item[How widely used:] C programs rarely have nest types because they are equivalent to the hoisted version.
    4470 
    4471 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}.
    4472 Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''.
    4473 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
    44744522\end{description}
    44754523
     
    44804528\item[Difficulty of converting:] Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example:
    44814529\begin{lstlisting}
    4482 struct Y; // struct Y and struct X are at the same scope
     4530struct Y;                                               §\C{// struct Y and struct X are at the same scope}§
    44834531struct X {
    44844532struct Y { /* ... */ } y;
     
    45014549
    45024550
     4551\section{New Keywords}
     4552\label{s:NewKeywords}
     4553
     4554\begin{quote2}
     4555\begin{tabular}{lll}
     4556©catch©                 & ©fallthrough© & ©otype©               \\
     4557©catchResume©   & ©fallthru©    & ©throw©               \\
     4558©choose©                & ©finally©             & ©throwResume© \\
     4559©disable©               & ©forall©              & ©trait©               \\
     4560©dtype©                 & ©ftype©               & ©try©                 \\
     4561©enable©                & ©lvalue©              &                               \\
     4562\end{tabular}
     4563\end{quote2}
     4564
     4565
     4566\section{Standard Headers}
     4567\label{s:StandardHeaders}
     4568
     4569C prescribes the following standard header-files~\cite[\S~7.1.2]{C11}:
     4570\begin{quote2}
     4571\begin{minipage}{\linewidth}
     4572\begin{tabular}{lll}
     4573assert.h        & math.h                & stdlib.h              \\
     4574complex.h       & setjmp.h              & stdnoreturn.h \\
     4575ctype.h         & signal.h              & string.h              \\
     4576errno.h         & stdalign.h    & tgmath.h              \\
     4577fenv.h          & stdarg.h              & threads.h             \\
     4578float.h         & stdatomic.h   & time.h                \\
     4579inttypes.h      & stdbool.h             & uchar.h               \\
     4580iso646.h        & stddef.h              & wchar.h               \\
     4581limits.h        & stdint.h              & wctype.h              \\
     4582locale.h        & stdio.h               & unistd.h\footnote{\CFA extension}
     4583\end{tabular}
     4584\end{minipage}
     4585\end{quote2}
     4586For the prescribed head-files, \CFA implicitly wraps their includes in an ©extern "C"©;
     4587hence, names in these include files are not mangled\index{mangling!name} (see~\VRef{s:Interoperability}).
     4588All other C header files must be explicitly wrapped in ©extern "C"© to prevent name mangling.
     4589
     4590
    45034591\section{I/O Library}
    45044592\label{s:IOLibrary}
     
    45704658%$
    45714659\begin{lstlisting}[mathescape=off]
    4572 sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
     4660sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7
     4661         | "x ¿" | 8 | "x «" | 9 | endl;
    45734662\end{lstlisting}
    45744663%$
     
    45804669A seperator does not appear after a C string ending with the (extended) \Index{ASCII}\index{ASCII!extended} characters: ©,.:;!?)]}%¢»©
    45814670\begin{lstlisting}[belowskip=0pt]
    4582 sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"
    4583          | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
     4671sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7
     4672         | ") x" | 8 | "] x" | 9 | "} x" | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
    45844673\end{lstlisting}
    45854674\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    45974686The following \CC-style \Index{manipulator}s allow further control over implicit seperation.
    45984687\begin{lstlisting}[mathescape=off,belowskip=0pt]
    4599 sout | sepOn | 1 | 2 | 3 | sepOn | endl;        // separator at start of line
     4688sout | sepOn | 1 | 2 | 3 | sepOn | endl;        §\C{// separator at start of line}§
    46004689\end{lstlisting}
    46014690\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46034692\end{lstlisting}
    46044693\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4605 sout | 1 | sepOff | 2 | 3 | endl;                       // turn off implicit separator temporarily
     4694sout | 1 | sepOff | 2 | 3 | endl;                       §\C{// turn off implicit separator temporarily}§
    46064695\end{lstlisting}
    46074696\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46094698\end{lstlisting}
    46104699\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4611 sout | sepDisable | 1 | 2 | 3 | endl;           // turn off implicit separation, affects all subsequent prints
     4700sout | sepDisable | 1 | 2 | 3 | endl;           §\C{// turn off implicit separation, affects all subsequent prints}§
    46124701\end{lstlisting}
    46134702\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46154704\end{lstlisting}
    46164705\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4617 sout | 1 | sepOn | 2 | 3 | endl;                        // turn on implicit separator temporarily
     4706sout | 1 | sepOn | 2 | 3 | endl;                        §\C{// turn on implicit separator temporarily}§
    46184707\end{lstlisting}
    46194708\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46214710\end{lstlisting}
    46224711\begin{lstlisting}[mathescape=off,aboveskip=0pt,belowskip=0pt]
    4623 sout | sepEnable | 1 | 2 | 3 | endl;            // turn on implicit separation, affects all subsequent prints
     4712sout | sepEnable | 1 | 2 | 3 | endl;            §\C{// turn on implicit separation, affects all subsequent prints}§
    46244713\end{lstlisting}
    46254714\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
     
    46274716\end{lstlisting}
    46284717\begin{lstlisting}[mathescape=off,aboveskip=0pt,aboveskip=0pt,belowskip=0pt]
    4629 sepSet( sout, ", $" );                                          // change separator from " " to ", $"
     4718sepSet( sout, ", $" );                                          §\C{// change separator from " " to ", \$"}§
    46304719sout | 1 | 2 | 3 | endl;
    46314720\end{lstlisting}
     
    46734762\subsection{malloc}
    46744763
     4764\leavevmode
    46754765\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    46764766forall( otype T ) T * malloc( void );§\indexc{malloc}§
     
    46894779forall( otype T ) T * memset( T * ptr );                                // remove when default value available
    46904780\end{lstlisting}
    4691 \
     4781
    46924782
    46934783\subsection{ato / strto}
    46944784
     4785\leavevmode
    46954786\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    46964787int ato( const char * ptr );§\indexc{ato}§
     
    47204811long double _Complex strto( const char * sptr, char ** eptr );
    47214812\end{lstlisting}
    4722 \
    47234813
    47244814
    47254815\subsection{bsearch / qsort}
    47264816
     4817\leavevmode
    47274818\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    47284819forall( otype T | { int ?<?( T, T ); } )
     
    47324823void qsort( const T * arr, size_t dimension );§\indexc{qsort}§
    47334824\end{lstlisting}
    4734 \
    47354825
    47364826
    47374827\subsection{abs}
    47384828
     4829\leavevmode
    47394830\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    47404831char abs( char );§\indexc{abs}§
     
    47494840long double abs( long double _Complex );
    47504841\end{lstlisting}
    4751 \
    47524842
    47534843
    47544844\subsection{random}
    47554845
     4846\leavevmode
    47564847\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    47574848void rand48seed( long int s );§\indexc{rand48seed}§
     
    47674858long double _Complex rand48();
    47684859\end{lstlisting}
    4769 \
    47704860
    47714861
    47724862\subsection{min / max / clamp / swap}
    47734863
     4864\leavevmode
    47744865\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    47754866forall( otype T | { int ?<?( T, T ); } )
     
    47854876void swap( T * t1, T * t2 );§\indexc{swap}§
    47864877\end{lstlisting}
    4787 \
    47884878
    47894879
     
    47964886\subsection{General}
    47974887
     4888\leavevmode
    47984889\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    47994890float fabs( float );§\indexc{fabs}§
     
    48414932long double nan( const char * );
    48424933\end{lstlisting}
    4843 \
    48444934
    48454935
    48464936\subsection{Exponential}
    48474937
     4938\leavevmode
    48484939\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    48494940float exp( float );§\indexc{exp}§
     
    48984989long double logb( long double );
    48994990\end{lstlisting}
    4900 \
    49014991
    49024992
    49034993\subsection{Power}
    49044994
     4995\leavevmode
    49054996\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    49064997float sqrt( float );§\indexc{sqrt}§
     
    49265017long double _Complex pow( long double _Complex, long double _Complex );
    49275018\end{lstlisting}
    4928 \
    49295019
    49305020
    49315021\subsection{Trigonometric}
    49325022
     5023\leavevmode
    49335024\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    49345025float sin( float );§\indexc{sin}§
     
    49825073long double atan( long double, long double );
    49835074\end{lstlisting}
    4984 \
    49855075
    49865076
    49875077\subsection{Hyperbolic}
    49885078
     5079\leavevmode
    49895080\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    49905081float sinh( float );§\indexc{sinh}§
     
    50305121long double _Complex atanh( long double _Complex );
    50315122\end{lstlisting}
    5032 \
    50335123
    50345124
    50355125\subsection{Error / Gamma}
    50365126
     5127\leavevmode
    50375128\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    50385129float erf( float );§\indexc{erf}§
     
    50615152long double tgamma( long double );
    50625153\end{lstlisting}
    5063 \
    50645154
    50655155
    50665156\subsection{Nearest Integer}
    50675157
     5158\leavevmode
    50685159\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    50695160float floor( float );§\indexc{floor}§
     
    51155206long long int llround( long double );
    51165207\end{lstlisting}
    5117 \
    51185208
    51195209
    51205210\subsection{Manipulation}
    51215211
     5212\leavevmode
    51225213\begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
    51235214float copysign( float, float );§\indexc{copysign}§
     
    51565247long double scalbln( long double, long int );
    51575248\end{lstlisting}
    5158 \
    51595249
    51605250
     
    51625252\label{s:RationalNumbers}
    51635253
    5164 Rational numbers are numbers written as a ratio, i.e., as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.
     5254Rational numbers are numbers written as a ratio, \ie as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.
    51655255When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible.
    51665256
  • doc/working/resolver_design.md

    r950f7a7 r7527e63  
    3737
    3838An alternate possibility would be to only count two-arg constructors
    39 `void ?{} ( To*, From )` as unsafe conversions; under this semantics, safe and  
     39`void ?{} ( To*, From )` as unsafe conversions; under this semantics, safe and
    4040explicit conversions should also have a compiler-enforced restriction to
    4141ensure that they are two-arg functions (this restriction may be valuable
     
    6969two chains of conversions, one among the signed integral types, another among
    7070the unsigned, and to use monomorphic conversions to allow conversions between
    71 signed and unsigned integer types).   
     71signed and unsigned integer types).
    7272
    7373### Implementation Details ###
     
    509509A variant of the above scheme would be to fix a maximum depth of polymorphic
    510510type variables (16 seems like a reasonable choice) at which a parameter would
    511 be considered to be effectively monomorphic, and to subtract the value  
     511be considered to be effectively monomorphic, and to subtract the value
    512512described above from that maximum, clamping the result to a minimum of 0.
    513513Under this scheme, assuming a maximum value of 4, `int` has value 0, `T` has
     
    577577specifying the (completely arbitrary) maximum depth as part of the language or
    578578allowing the compiler to refuse to accept otherwise well-typed deeply-nested
    579 polymorphic types. 
     579polymorphic types.
    580580
    581581For purposes of determining polymorphism, the list of return types of a
     
    951951`sizeof`, `alignof`, and `offsetof` expressions have at most a single
    952952interpretation, of type `size_t`.
    953 `sizeof` and `alignof` expressions take either a type or an expression as a 
    954 an argument; if the argument is a type, it must be a complete type which is
    955 not a function type, if an expression, the expression must have a single
     953`sizeof` and `alignof` expressions take either a type or an expression as an
     954argument; if the argument is a type, it must be a complete type which is not a
     955function type, if an expression, the expression must have a single
    956956interpretation, the type of which conforms to the same rules.
    957957`offsetof` takes two arguments, a type and a member name; the type must be
     
    16201620                        = delete;
    16211621        }
     1622
     1623## Appendix E: Features to Add in Resolver Re-write ##
     1624* Reference types
     1625* Special types for 0 and 1 literals
     1626* Expression type for return statement that resolves similarly to ?=?
     1627  - This is to get rid of the kludge in the box pass that effectively
     1628    re-implements the resolver poorly.
  • src/CodeGen/CodeGenerator.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jul 15 15:53:15 2016
    13 // Update Count     : 306
     12// Last Modified On : Thu Aug  4 13:35:30 2016
     13// Update Count     : 352
    1414//
    1515
     
    4545        bool wantSpacing( Statement * stmt) {
    4646                return dynamic_cast< IfStmt * >( stmt ) || dynamic_cast< CompoundStmt * >( stmt ) ||
    47                         dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * > ( stmt ) || dynamic_cast< SwitchStmt *>( stmt );
    48         }
    49 
    50         void CodeGenerator::extension( Expression *expr ) {
     47                        dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * >( stmt ) || dynamic_cast< SwitchStmt *>( stmt );
     48        }
     49
     50        void CodeGenerator::extension( Expression * expr ) {
    5151                if ( expr->get_extension() ) {
    5252                        output << "__extension__ ";
     
    5454        } // extension
    5555
    56         void CodeGenerator::extension( Declaration *decl ) {
     56        void CodeGenerator::extension( Declaration * decl ) {
    5757                if ( decl->get_extension() ) {
    5858                        output << "__extension__ ";
     
    7373        }
    7474
    75         ostream & operator<<( ostream & output, CodeGenerator::LabelPrinter &printLabels ) {
     75        ostream & operator<<( ostream & output, CodeGenerator::LabelPrinter & printLabels ) {
    7676                std::list< Label > & labs = *printLabels.labels;
    7777                // l.unique(); // assumes a sorted list. Why not use set? Does order matter?
     
    7979                        output << l.get_name() + ": ";
    8080                        printLabels.cg.genAttributes( l.get_attributes() );
    81                 }
     81                } // for
    8282                return output;
    8383        }
    8484
    85         CodeGenerator::CodeGenerator( std::ostream &os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) { }
    86 
    87         CodeGenerator::CodeGenerator( std::ostream &os, std::string init, int indentation, bool infunp )
     85        CodeGenerator::CodeGenerator( std::ostream & os ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ) {}
     86
     87        CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )
    8888                        : indent( *this), cur_indent( indentation ), insideFunction( infunp ), output( os ), printLabels( *this ) {
    8989                //output << std::string( init );
    9090        }
    9191
    92         CodeGenerator::CodeGenerator( std::ostream &os, char *init, int indentation, bool infunp )
     92        CodeGenerator::CodeGenerator( std::ostream & os, char * init, int indentation, bool infunp )
    9393                        : indent( *this ), cur_indent( indentation ), insideFunction( infunp ), output( os ), printLabels( *this ) {
    9494                //output << std::string( init );
    9595        }
    9696
    97         string mangleName( DeclarationWithType *decl ) {
     97        string mangleName( DeclarationWithType * decl ) {
    9898                if ( decl->get_mangleName() != "" ) {
    9999                        // need to incorporate scope level in order to differentiate names for destructors
     
    112112                                        genCommaList( attr->get_parameters().begin(), attr->get_parameters().end() );
    113113                                        output << ")";
    114                                 }
     114                                } // if
    115115                                output << ",";
    116                         }
     116                        } // for
    117117                        output << ")) ";
    118                 }
     118                } // if
    119119        }
    120120
    121121
    122122        //*** Declarations
    123         void CodeGenerator::visit( FunctionDecl *functionDecl ) {
     123        void CodeGenerator::visit( FunctionDecl * functionDecl ) {
    124124                extension( functionDecl );
    125125                genAttributes( functionDecl->get_attributes() );
     
    146146        }
    147147
    148         void CodeGenerator::visit( ObjectDecl *objectDecl ) {
     148        void CodeGenerator::visit( ObjectDecl * objectDecl ) {
    149149                extension( objectDecl );
     150                genAttributes( objectDecl->get_attributes() );
     151
    150152                handleStorageClass( objectDecl );
    151153                output << genType( objectDecl->get_type(), mangleName( objectDecl ) );
     
    155157                        objectDecl->get_init()->accept( *this );
    156158                } // if
     159
    157160                if ( objectDecl->get_bitfieldWidth() ) {
    158161                        output << ":";
     
    161164        }
    162165
    163         void CodeGenerator::handleAggregate( AggregateDecl *aggDecl ) {
     166        void CodeGenerator::handleAggregate( AggregateDecl * aggDecl ) {
    164167                if ( aggDecl->get_name() != "" )
    165168                        output << aggDecl->get_name();
    166169
    167                 std::list< Declaration * > &memb = aggDecl->get_members();
     170                std::list< Declaration * > & memb = aggDecl->get_members();
    168171                if ( ! memb.empty() ) {
    169172//              if ( aggDecl->has_body() ) {
    170 //                      std::list< Declaration * > &memb = aggDecl->get_members();
     173//                      std::list< Declaration * > & memb = aggDecl->get_members();
    171174                        output << " {" << endl;
    172175
    173176                        cur_indent += CodeGenerator::tabsize;
    174                         for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
     177                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) {
    175178                                output << indent;
    176179                                (*i)->accept( *this );
    177180                                output << ";" << endl;
    178                         }
     181                        } // for
    179182
    180183                        cur_indent -= CodeGenerator::tabsize;
     
    184187        }
    185188
    186         void CodeGenerator::visit( StructDecl *structDecl ) {
     189        void CodeGenerator::visit( StructDecl * structDecl ) {
    187190                extension( structDecl );
    188191                output << "struct ";
     
    190193        }
    191194
    192         void CodeGenerator::visit( UnionDecl *unionDecl ) {
     195        void CodeGenerator::visit( UnionDecl * unionDecl ) {
    193196                extension( unionDecl );
    194197                output << "union ";
     
    196199        }
    197200
    198         void CodeGenerator::visit( EnumDecl *enumDecl ) {
     201        void CodeGenerator::visit( EnumDecl * enumDecl ) {
    199202                extension( enumDecl );
    200203                output << "enum ";
     
    210213                        cur_indent += CodeGenerator::tabsize;
    211214                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    212                                 ObjectDecl *obj = dynamic_cast< ObjectDecl* >( *i );
     215                                ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
    213216                                assert( obj );
    214217                                output << indent << mangleName( obj );
     
    226229        }
    227230
    228         void CodeGenerator::visit( TraitDecl *traitDecl ) {}
    229 
    230         void CodeGenerator::visit( TypedefDecl *typeDecl ) {
     231        void CodeGenerator::visit( TraitDecl * traitDecl ) {}
     232
     233        void CodeGenerator::visit( TypedefDecl * typeDecl ) {
    231234                assert( false && "Typedefs are removed and substituted in earlier passes." );
    232235                //output << "typedef ";
     
    234237        }
    235238
    236         void CodeGenerator::visit( TypeDecl *typeDecl ) {
     239        void CodeGenerator::visit( TypeDecl * typeDecl ) {
    237240                // really, we should mutate this into something that isn't a TypeDecl but that requires large-scale changes,
    238241                // still to be done
     
    257260                                (*iter)->accept( *this );
    258261                                output << "]";
    259                         }
    260                 }
     262                        } // if
     263                } // for
    261264                output << " = ";
    262265        }
    263266
    264         void CodeGenerator::visit( SingleInit *init ) {
     267        void CodeGenerator::visit( SingleInit * init ) {
    265268                printDesignators( init->get_designators() );
    266269                init->get_value()->accept( *this );
    267270        }
    268271
    269         void CodeGenerator::visit( ListInit *init ) {
     272        void CodeGenerator::visit( ListInit * init ) {
    270273                printDesignators( init->get_designators() );
    271274                output << "{ ";
    272                 if ( init->begin_initializers() == init->end_initializers() ) {
     275                if ( init->begin() == init->end() ) {
    273276                        // illegal to leave initializer list empty for scalar initializers, but always legal to have 0
    274277                        output << "0";
    275278                } else {
    276                         genCommaList( init->begin_initializers(), init->end_initializers() );
    277                 }
     279                        genCommaList( init->begin(), init->end() );
     280                } // if
    278281                output << " }";
    279282        }
    280283
    281         void CodeGenerator::visit( Constant *constant ) {
     284        void CodeGenerator::visit( Constant * constant ) {
    282285                output << constant->get_value() ;
    283286        }
    284287
    285288        //*** Expressions
    286         void CodeGenerator::visit( ApplicationExpr *applicationExpr ) {
     289        void CodeGenerator::visit( ApplicationExpr * applicationExpr ) {
    287290                extension( applicationExpr );
    288                 if ( VariableExpr *varExpr = dynamic_cast< VariableExpr* >( applicationExpr->get_function() ) ) {
     291                if ( VariableExpr * varExpr = dynamic_cast< VariableExpr* >( applicationExpr->get_function() ) ) {
    289292                        OperatorInfo opInfo;
    290293                        if ( varExpr->get_var()->get_linkage() == LinkageSpec::Intrinsic && operatorLookup( varExpr->get_var()->get_name(), opInfo ) ) {
     
    298301                                        {
    299302                                                assert( arg != applicationExpr->get_args().end() );
    300                                                 if ( AddressExpr *addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) {
     303                                                if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( *arg ) ) {
    301304                                                        // remove & from first assignment/ctor argument
    302305                                                        *arg = addrExpr->get_arg();
    303306                                                } else {
    304307                                                        // no address-of operator, so must be a pointer - add dereference
    305                                                         UntypedExpr *newExpr = new UntypedExpr( new NameExpr( "*?" ) );
     308                                                        UntypedExpr * newExpr = new UntypedExpr( new NameExpr( "*?" ) );
    306309                                                        newExpr->get_args().push_back( *arg );
    307310                                                        assert( (*arg)->get_results().size() == 1 );
     
    317320                                        // do nothing
    318321                                        ;
    319                                 }
     322                                } // switch
    320323
    321324                                switch ( opInfo.type ) {
     
    351354                                                // no constructors with 0 or more than 2 parameters
    352355                                                assert( false );
    353                                         }
     356                                        } // if
    354357                                        break;
    355358
     
    385388                                        // there are no intrinsic definitions of 0/1 or label addresses as functions
    386389                                        assert( false );
    387                                 }
     390                                } // switch
    388391                        } else {
    389392                                varExpr->accept( *this );
     
    400403        }
    401404
    402         void CodeGenerator::visit( UntypedExpr *untypedExpr ) {
     405        void CodeGenerator::visit( UntypedExpr * untypedExpr ) {
    403406                extension( untypedExpr );
    404                 if ( NameExpr *nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) {
     407                if ( NameExpr * nameExpr = dynamic_cast< NameExpr* >( untypedExpr->get_function() ) ) {
    405408                        OperatorInfo opInfo;
    406409                        if ( operatorLookup( nameExpr->get_name(), opInfo ) ) {
     
    417420                                  case OT_CALL:
    418421                                        assert( false );
    419 
    420422
    421423                                  case OT_CTOR:
     
    437439                                                // no constructors with 0 or more than 2 parameters
    438440                                                assert( false );
    439                                         }
     441                                        } // if
    440442                                        break;
    441443
     
    470472                                        // there are no intrinsic definitions of 0 or 1 as functions
    471473                                        assert( false );
    472                                 }
     474                                } // switch
    473475                        } else {
    474                                 nameExpr->accept( *this );
    475                                 output << "(";
    476                                 genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() );
    477                                 output << ")";
     476                                if ( nameExpr->get_name() == "..." ) { // case V1 ... V2 or case V1~V2
     477                                        assert( untypedExpr->get_args().size() == 2 );
     478                                        (*untypedExpr->get_args().begin())->accept( *this );
     479                                        output << " ... ";
     480                                        (*--untypedExpr->get_args().end())->accept( *this );
     481                                } else {                                                                // builtin routines
     482                                        nameExpr->accept( *this );
     483                                        output << "(";
     484                                        genCommaList( untypedExpr->get_args().begin(), untypedExpr->get_args().end() );
     485                                        output << ")";
     486                                } // if
    478487                        } // if
    479488                } else {
     
    485494        }
    486495
    487         void CodeGenerator::visit( NameExpr *nameExpr ) {
     496        void CodeGenerator::visit( RangeExpr * rangeExpr ) {
     497                rangeExpr->get_low()->accept( *this );
     498                output << " ... ";
     499                rangeExpr->get_high()->accept( *this );
     500        }
     501
     502        void CodeGenerator::visit( NameExpr * nameExpr ) {
    488503                extension( nameExpr );
    489504                OperatorInfo opInfo;
     
    496511        }
    497512
    498         void CodeGenerator::visit( AddressExpr *addressExpr ) {
     513        void CodeGenerator::visit( AddressExpr * addressExpr ) {
    499514                extension( addressExpr );
    500515                output << "(&";
    501516                // this hack makes sure that we don't convert "constant_zero" to "0" if we're taking its address
    502                 if ( VariableExpr *variableExpr = dynamic_cast< VariableExpr* >( addressExpr->get_arg() ) ) {
     517                if ( VariableExpr * variableExpr = dynamic_cast< VariableExpr* >( addressExpr->get_arg() ) ) {
    503518                        output << mangleName( variableExpr->get_var() );
    504519                } else {
     
    508523        }
    509524
    510         void CodeGenerator::visit( CastExpr *castExpr ) {
     525        void CodeGenerator::visit( CastExpr * castExpr ) {
    511526                extension( castExpr );
    512527                output << "(";
     
    521536                        // otherwise, the cast is to an lvalue type, so the cast should be dropped, since the result of a cast is
    522537                        // never an lvalue in C
    523                 }
     538                } // if
    524539                castExpr->get_arg()->accept( *this );
    525540                output << ")";
    526541        }
    527542
    528         void CodeGenerator::visit( UntypedMemberExpr *memberExpr ) {
     543        void CodeGenerator::visit( UntypedMemberExpr * memberExpr ) {
    529544                assert( false );
    530545        }
    531546
    532         void CodeGenerator::visit( MemberExpr *memberExpr ) {
     547        void CodeGenerator::visit( MemberExpr * memberExpr ) {
    533548                extension( memberExpr );
    534549                memberExpr->get_aggregate()->accept( *this );
     
    536551        }
    537552
    538         void CodeGenerator::visit( VariableExpr *variableExpr ) {
     553        void CodeGenerator::visit( VariableExpr * variableExpr ) {
    539554                extension( variableExpr );
    540555                OperatorInfo opInfo;
     
    546561        }
    547562
    548         void CodeGenerator::visit( ConstantExpr *constantExpr ) {
     563        void CodeGenerator::visit( ConstantExpr * constantExpr ) {
    549564                assert( constantExpr->get_constant() );
    550565                extension( constantExpr );
     
    552567        }
    553568
    554         void CodeGenerator::visit( SizeofExpr *sizeofExpr ) {
     569        void CodeGenerator::visit( SizeofExpr * sizeofExpr ) {
    555570                extension( sizeofExpr );
    556571                output << "sizeof(";
     
    563578        }
    564579
    565         void CodeGenerator::visit( AlignofExpr *alignofExpr ) {
     580        void CodeGenerator::visit( AlignofExpr * alignofExpr ) {
    566581                // use GCC extension to avoid bumping std to C11
    567582                extension( alignofExpr );
     
    575590        }
    576591
    577         void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) {
     592        void CodeGenerator::visit( UntypedOffsetofExpr * offsetofExpr ) {
    578593                assert( false && "UntypedOffsetofExpr should not reach code generation." );
    579594        }
    580595
    581         void CodeGenerator::visit( OffsetofExpr *offsetofExpr ) {
     596        void CodeGenerator::visit( OffsetofExpr * offsetofExpr ) {
    582597                // use GCC builtin
    583598                output << "__builtin_offsetof(";
     
    587602        }
    588603
    589         void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {
     604        void CodeGenerator::visit( OffsetPackExpr * offsetPackExpr ) {
    590605                assert( false && "OffsetPackExpr should not reach code generation." );
    591606        }
    592607
    593         void CodeGenerator::visit( LogicalExpr *logicalExpr ) {
     608        void CodeGenerator::visit( LogicalExpr * logicalExpr ) {
    594609                extension( logicalExpr );
    595610                output << "(";
     
    604619        }
    605620
    606         void CodeGenerator::visit( ConditionalExpr *conditionalExpr ) {
     621        void CodeGenerator::visit( ConditionalExpr * conditionalExpr ) {
    607622                extension( conditionalExpr );
    608623                output << "(";
     
    615630        }
    616631
    617         void CodeGenerator::visit( CommaExpr *commaExpr ) {
     632        void CodeGenerator::visit( CommaExpr * commaExpr ) {
    618633                extension( commaExpr );
    619634                output << "(";
     
    624639        }
    625640
    626         void CodeGenerator::visit( TupleExpr *tupleExpr ) {}
    627 
    628         void CodeGenerator::visit( TypeExpr *typeExpr ) {}
    629 
    630         void CodeGenerator::visit( AsmExpr *asmExpr ) {
     641        void CodeGenerator::visit( TupleExpr * tupleExpr ) {}
     642
     643        void CodeGenerator::visit( TypeExpr * typeExpr ) {}
     644
     645        void CodeGenerator::visit( AsmExpr * asmExpr ) {
    631646                if ( asmExpr->get_inout() ) {
    632647                        output << "[ ";
     
    641656
    642657        //*** Statements
    643         void CodeGenerator::visit( CompoundStmt *compoundStmt ) {
     658        void CodeGenerator::visit( CompoundStmt * compoundStmt ) {
    644659                std::list<Statement*> ks = compoundStmt->get_kids();
    645660                output << "{" << endl;
     
    654669                        if ( wantSpacing( *i ) ) {
    655670                                output << endl;
    656                         }
    657                 }
     671                        } // if
     672                } // for
    658673                cur_indent -= CodeGenerator::tabsize;
    659674
     
    661676        }
    662677
    663         void CodeGenerator::visit( ExprStmt *exprStmt ) {
     678        void CodeGenerator::visit( ExprStmt * exprStmt ) {
    664679                assert( exprStmt );
    665680                // cast the top-level expression to void to reduce gcc warnings.
     
    669684        }
    670685
    671         void CodeGenerator::visit( AsmStmt *asmStmt ) {
     686        void CodeGenerator::visit( AsmStmt * asmStmt ) {
    672687                output << "asm ";
    673688                if ( asmStmt->get_voltile() ) output << "volatile ";
     
    692707        }
    693708
    694         void CodeGenerator::visit( IfStmt *ifStmt ) {
     709        void CodeGenerator::visit( IfStmt * ifStmt ) {
    695710                output << "if ( ";
    696711                ifStmt->get_condition()->accept( *this );
     
    705720        }
    706721
    707         void CodeGenerator::visit( SwitchStmt *switchStmt ) {
     722        void CodeGenerator::visit( SwitchStmt * switchStmt ) {
    708723                output << "switch ( " ;
    709724                switchStmt->get_condition()->accept( *this );
     
    712727                output << "{" << std::endl;
    713728                cur_indent += CodeGenerator::tabsize;
    714 
    715                 acceptAll( switchStmt->get_branches(), *this );
    716 
     729                acceptAll( switchStmt->get_statements(), *this );
    717730                cur_indent -= CodeGenerator::tabsize;
    718 
    719731                output << indent << "}";
    720732        }
    721733
    722         void CodeGenerator::visit( CaseStmt *caseStmt ) {
     734        void CodeGenerator::visit( CaseStmt * caseStmt ) {
    723735                output << indent;
    724736                if ( caseStmt->isDefault()) {
     
    737749                        (*i)->accept( *this );
    738750                        output << endl;
    739                 }
     751                } // for
    740752                cur_indent -= CodeGenerator::tabsize;
    741753        }
    742754
    743         void CodeGenerator::visit( BranchStmt *branchStmt ) {
     755        void CodeGenerator::visit( BranchStmt * branchStmt ) {
    744756                switch ( branchStmt->get_type()) {
    745757                  case BranchStmt::Goto:
     
    759771                        output << "continue";
    760772                        break;
    761                 }
     773                } // switch
    762774                output << ";";
    763775        }
    764776
    765777
    766         void CodeGenerator::visit( ReturnStmt *returnStmt ) {
     778        void CodeGenerator::visit( ReturnStmt * returnStmt ) {
    767779                output << "return ";
    768780                maybeAccept( returnStmt->get_expr(), *this );
     
    770782        }
    771783
    772         void CodeGenerator::visit( WhileStmt *whileStmt ) {
     784        void CodeGenerator::visit( WhileStmt * whileStmt ) {
    773785                if ( whileStmt->get_isDoWhile() ) {
    774786                        output << "do" ;
     
    792804        }
    793805
    794         void CodeGenerator::visit( ForStmt *forStmt ) {
     806        void CodeGenerator::visit( ForStmt * forStmt ) {
    795807                // initialization is always hoisted, so don't bother doing anything with that
    796808                output << "for (;";
     
    798810                if ( forStmt->get_condition() != 0 ) {
    799811                        forStmt->get_condition()->accept( *this );
    800                 }
     812                } // if
    801813                output << ";";
    802814
     
    805817                        Expression * expr = new CastExpr( forStmt->get_increment() );
    806818                        expr->accept( *this );
    807                 }
     819                } // if
    808820                output << ") ";
    809821
     
    814826        }
    815827
    816         void CodeGenerator::visit( NullStmt *nullStmt ) {
     828        void CodeGenerator::visit( NullStmt * nullStmt ) {
    817829                //output << indent << CodeGenerator::printLabels( nullStmt->get_labels() );
    818830                output << "/* null statement */ ;";
    819831        }
    820832
    821         void CodeGenerator::visit( DeclStmt *declStmt ) {
     833        void CodeGenerator::visit( DeclStmt * declStmt ) {
    822834                declStmt->get_decl()->accept( *this );
    823835
     
    827839        }
    828840
    829         void CodeGenerator::handleStorageClass( Declaration *decl ) {
     841        void CodeGenerator::handleStorageClass( Declaration * decl ) {
    830842                switch ( decl->get_storageClass() ) {
    831843                  case DeclarationNode::Extern:
  • src/CodeGen/CodeGenerator.h

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul  4 17:12:40 2016
    13 // Update Count     : 34
     12// Last Modified On : Thu Aug  4 13:37:07 2016
     13// Update Count     : 38
    1414//
    1515
     
    5454                virtual void visit( ApplicationExpr *applicationExpr );
    5555                virtual void visit( UntypedExpr *untypedExpr );
     56                virtual void visit( RangeExpr * rangeExpr );
    5657                virtual void visit( NameExpr *nameExpr );
    5758                virtual void visit( AddressExpr *addressExpr );
     
    118119                void handleAggregate( AggregateDecl *aggDecl );
    119120                void handleTypedef( NamedTypeDecl *namedType );
    120         };
     121        }; // CodeGenerator
    121122
    122123        template< class Iterator >
  • src/ControlStruct/MLEMutator.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:36:51 2016
    13 // Update Count     : 197
     12// Last Modified On : Thu Aug  4 11:21:32 2016
     13// Update Count     : 202
    1414//
    1515
     
    128128                Label brkLabel = generator->newLabel("switchBreak");
    129129                enclosingControlStructures.push_back( Entry(switchStmt, brkLabel) );
    130                 mutateAll( switchStmt->get_branches(), *this );
     130                mutateAll( switchStmt->get_statements(), *this );
    131131
    132132                Entry &e = enclosingControlStructures.back();
     
    138138                        // switch should be CastStmts), append the exit label + break to the last case statement; create a default
    139139                        // case if there are no cases
    140                         std::list< Statement * > &branches = switchStmt->get_branches();
    141                         if ( branches.empty() ) {
    142                                 branches.push_back( CaseStmt::makeDefault() );
    143                         } // if
    144 
    145                         if ( CaseStmt * c = dynamic_cast< CaseStmt * >( branches.back() ) ) {
     140                        std::list< Statement * > &statements = switchStmt->get_statements();
     141                        if ( statements.empty() ) {
     142                                statements.push_back( CaseStmt::makeDefault() );
     143                        } // if
     144
     145                        if ( CaseStmt * c = dynamic_cast< CaseStmt * >( statements.back() ) ) {
    146146                                std::list<Label> temp; temp.push_back( brkLabel );
    147147                                c->get_statements().push_back( new BranchStmt( temp, Label("brkLabel"), BranchStmt::Break ) );
    148                         } else assert(0); // as of this point, all branches of a switch are still CaseStmts
     148                        } else assert(0); // as of this point, all statements of a switch are still CaseStmts
    149149                } // if
    150150
  • src/ControlStruct/Mutate.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:37:45 2016
    13 // Update Count     : 8
     12// Last Modified On : Thu Aug  4 11:39:08 2016
     13// Update Count     : 9
    1414//
    1515
     
    2222#include "LabelFixer.h"
    2323#include "MLEMutator.h"
    24 #include "CaseRangeMutator.h"
    2524#include "ForExprMutator.h"
    2625#include "LabelTypeChecker.h"
     
    4140                LabelFixer lfix;
    4241
    43                 // expand case ranges and turn fallthru into a null statement
    44                 CaseRangeMutator ranges;
    45 
    4642                //ExceptMutator exc;
    4743                // LabelTypeChecker lbl;
     
    4945                mutateAll( translationUnit, formut );
    5046                acceptAll( translationUnit, lfix );
    51                 mutateAll( translationUnit, ranges );
    5247                //mutateAll( translationUnit, exc );
    5348                //acceptAll( translationUnit, lbl );
  • src/ControlStruct/module.mk

    r950f7a7 r7527e63  
    1111## Created On       : Mon Jun  1 17:49:17 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Tue Jul 12 17:40:31 2016
    14 ## Update Count     : 2
     13## Last Modified On : Thu Aug  4 11:38:06 2016
     14## Update Count     : 3
    1515###############################################################################
    1616
     
    1818        ControlStruct/LabelFixer.cc \
    1919        ControlStruct/MLEMutator.cc \
    20         ControlStruct/CaseRangeMutator.cc \
    2120        ControlStruct/Mutate.cc \
    2221        ControlStruct/ForExprMutator.cc \
  • src/GenPoly/Box.cc

    r950f7a7 r7527e63  
    6262
    6363                FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
    64 
    65                 /// Abstracts type equality for a list of parameter types
    66                 struct TypeList {
    67                         TypeList() : params() {}
    68                         TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
    69                         TypeList( std::list< Type* > &&_params ) : params( _params ) {}
    70 
    71                         TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
    72                         TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
    73 
    74                         /// Extracts types from a list of TypeExpr*
    75                         TypeList( const std::list< TypeExpr* >& _params ) : params() {
    76                                 for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
    77                                         params.push_back( (*param)->get_type()->clone() );
    78                                 }
    79                         }
    80 
    81                         TypeList& operator= ( const TypeList &that ) {
    82                                 deleteAll( params );
    83 
    84                                 params.clear();
    85                                 cloneAll( that.params, params );
    86 
    87                                 return *this;
    88                         }
    89 
    90                         TypeList& operator= ( TypeList &&that ) {
    91                                 deleteAll( params );
    92 
    93                                 params = std::move( that.params );
    94 
    95                                 return *this;
    96                         }
    97 
    98                         ~TypeList() { deleteAll( params ); }
    99 
    100                         bool operator== ( const TypeList& that ) const {
    101                                 if ( params.size() != that.params.size() ) return false;
    102 
    103                                 SymTab::Indexer dummy;
    104                                 for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
    105                                         if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
    106                                 }
    107                                 return true;
    108                         }
    109 
    110                         std::list< Type* > params;  ///< Instantiation parameters
    111                 };
    112 
    113                 /// Maps a key and a TypeList to the some value, accounting for scope
    114                 template< typename Key, typename Value >
    115                 class InstantiationMap {
    116                         /// Wraps value for a specific (Key, TypeList) combination
    117                         typedef std::pair< TypeList, Value* > Instantiation;
    118                         /// List of TypeLists paired with their appropriate values
    119                         typedef std::vector< Instantiation > ValueList;
    120                         /// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
    121                         typedef ScopedMap< Key*, ValueList > InnerMap;
    122 
    123                         InnerMap instantiations;  ///< instantiations
    124 
    125                 public:
    126                         /// Starts a new scope
    127                         void beginScope() { instantiations.beginScope(); }
    128 
    129                         /// Ends a scope
    130                         void endScope() { instantiations.endScope(); }
    131 
    132                         /// Gets the value for the (key, typeList) pair, returns NULL on none such.
    133                         Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
    134                                 TypeList typeList( params );
    135 
    136                                 // scan scopes for matches to the key
    137                                 for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
    138                                         for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
    139                                                 if ( inst->first == typeList ) return inst->second;
    140                                         }
    141                                 }
    142                                 // no matching instantiations found
    143                                 return 0;
    144                         }
    145 
    146                         /// Adds a value for a (key, typeList) pair to the current scope
    147                         void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
    148                                 instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
    149                         }
    150                 };
    15164
    15265                /// Adds layout-generation functions to polymorphic types
     
    191104                        Type *replaceWithConcrete( ApplicationExpr *appExpr, Type *type, bool doClone = true );
    192105                        /// wraps a function application returning a polymorphic type with a new temporary for the out-parameter return value
    193                         Expression *addPolyRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg );
     106                        Expression *addDynRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg );
    194107                        Expression *applyAdapter( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars );
    195108                        void boxParam( Type *formal, Expression *&arg, const TyVarMap &exprTyVars );
     
    237150
    238151                        std::map< UniqueId, std::string > adapterName;
    239                 };
    240 
    241                 /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
    242                 class GenericInstantiator : public DeclMutator {
    243                         /// Map of (generic type, parameter list) pairs to concrete type instantiations
    244                         InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
    245                         /// Namer for concrete types
    246                         UniqueName typeNamer;
    247 
    248                 public:
    249                         GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {}
    250 
    251                         virtual Type* mutate( StructInstType *inst );
    252                         virtual Type* mutate( UnionInstType *inst );
    253 
    254         //              virtual Expression* mutate( MemberExpr *memberExpr );
    255 
    256                         virtual void doBeginScope();
    257                         virtual void doEndScope();
    258                 private:
    259                         /// Wrap instantiation lookup for structs
    260                         StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }
    261                         /// Wrap instantiation lookup for unions
    262                         UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }
    263                         /// Wrap instantiation insertion for structs
    264                         void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }
    265                         /// Wrap instantiation insertion for unions
    266                         void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
    267152                };
    268153
     
    354239                Pass1 pass1;
    355240                Pass2 pass2;
    356                 GenericInstantiator instantiator;
    357241                PolyGenericCalculator polyCalculator;
    358242                Pass3 pass3;
     
    361245                mutateTranslationUnit/*All*/( translationUnit, pass1 );
    362246                mutateTranslationUnit/*All*/( translationUnit, pass2 );
    363                 instantiator.mutateDeclarationList( translationUnit );
    364247                mutateTranslationUnit/*All*/( translationUnit, polyCalculator );
    365248                mutateTranslationUnit/*All*/( translationUnit, pass3 );
     
    619502                        return 0;
    620503                }
    621                
     504
    622505                /// Returns T if the given declaration is a function with parameters (T*, T) for some TypeInstType T, NULL otherwise
    623506                TypeInstType *isTypeInstPtrValFn( DeclarationWithType *decl ) {
     
    637520                        return 0;
    638521                }
    639                
     522
    640523                /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise
    641524                TypeInstType *isTypeInstAssignment( DeclarationWithType *decl ) {
     
    677560                        return 0;
    678561                }
    679                
     562
    680563                /// Returns T if the given declaration is a function with parameters (T*, T) for some type T, where neither parameter is cv-qualified,
    681564                /// NULL otherwise
     
    772655                                copyOps.beginScope();
    773656                                dtorOps.beginScope();
    774                                
     657
    775658                                DeclarationWithType *oldRetval = retval;
    776659                                bool oldUseRetval = useRetval;
     
    778661                                // process polymorphic return value
    779662                                retval = 0;
    780                                 if ( isPolyRet( functionDecl->get_functionType() ) && functionDecl->get_linkage() == LinkageSpec::Cforall ) {
     663                                if ( isDynRet( functionDecl->get_functionType() ) && functionDecl->get_linkage() == LinkageSpec::Cforall ) {
    781664                                        retval = functionDecl->get_functionType()->get_returnVals().front();
    782665
     
    889772                                                arg++;
    890773                                        } else {
    891                                                 /// xxx - should this be an assertion?
     774                                                // xxx - should this be an assertion?
    892775                                                throw SemanticError( "unbound type variable: " + tyParm->first + " in application ", appExpr );
    893776                                        } // if
     
    902785                        std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin();
    903786                        std::list< Expression* >::const_iterator fnArg = arg;
    904                         std::set< std::string > seenTypes; //< names for generic types we've seen
     787                        std::set< std::string > seenTypes; ///< names for generic types we've seen
    905788
    906789                        // a polymorphic return type may need to be added to the argument list
     
    985868                }
    986869
    987                 Expression *Pass1::addPolyRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *polyType, std::list< Expression *>::iterator &arg ) {
     870                Expression *Pass1::addDynRetParam( ApplicationExpr *appExpr, FunctionType *function, ReferenceToType *dynType, std::list< Expression *>::iterator &arg ) {
    988871                        assert( env );
    989                         Type *concrete = replaceWithConcrete( appExpr, polyType );
     872                        Type *concrete = replaceWithConcrete( appExpr, dynType );
    990873                        // add out-parameter for return value
    991874                        return addRetParam( appExpr, function, concrete, arg );
     
    994877                Expression *Pass1::applyAdapter( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &tyVars ) {
    995878                        Expression *ret = appExpr;
    996                         if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) {
     879//                      if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) {
     880                        if ( isDynRet( function, tyVars ) ) {
    997881                                ret = addRetParam( appExpr, function, function->get_returnVals().front()->get_type(), arg );
    998882                        } // if
     
    1042926                /// this gets rid of warnings from gcc.
    1043927                void addCast( Expression *&actual, Type *formal, const TyVarMap &tyVars ) {
    1044                         Type * newType = formal->clone();
    1045                         if ( getFunctionType( newType ) ) {
     928                        if ( getFunctionType( formal ) ) {
     929                                Type * newType = formal->clone();
    1046930                                newType = ScrubTyVars::scrub( newType, tyVars );
    1047931                                actual = new CastExpr( actual, newType );
     
    1085969                        // actually make the adapter type
    1086970                        FunctionType *adapter = adaptee->clone();
    1087                         if ( ! adapter->get_returnVals().empty() && isPolyType( adapter->get_returnVals().front()->get_type(), tyVars ) ) {
     971//                      if ( ! adapter->get_returnVals().empty() && isPolyType( adapter->get_returnVals().front()->get_type(), tyVars ) ) {
     972                        if ( isDynRet( adapter, tyVars ) ) {
    1088973                                makeRetParm( adapter );
    1089974                        } // if
     
    11471032                                addAdapterParams( adapteeApp, arg, param, adapterType->get_parameters().end(), realParam, tyVars );
    11481033                                bodyStmt = new ExprStmt( noLabels, adapteeApp );
    1149                         } else if ( isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
     1034//                      } else if ( isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
     1035                        } else if ( isDynType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
    11501036                                // return type T
    11511037                                if ( (*param)->get_name() == "" ) {
     
    13941280                        TyVarMap exprTyVars( (TypeDecl::Kind)-1 );
    13951281                        makeTyVarMap( function, exprTyVars );
    1396                         ReferenceToType *polyRetType = isPolyRet( function );
    1397 
    1398                         if ( polyRetType ) {
    1399                                 ret = addPolyRetParam( appExpr, function, polyRetType, arg );
     1282                        ReferenceToType *dynRetType = isDynRet( function, exprTyVars );
     1283
     1284                        if ( dynRetType ) {
     1285                                ret = addDynRetParam( appExpr, function, dynRetType, arg );
    14001286                        } else if ( needsAdapter( function, scopeTyVars ) ) {
    14011287                                // std::cerr << "needs adapter: ";
     
    14071293                        arg = appExpr->get_args().begin();
    14081294
    1409                         passTypeVars( appExpr, polyRetType, arg, exprTyVars );
     1295                        passTypeVars( appExpr, dynRetType, arg, exprTyVars );
    14101296                        addInferredParams( appExpr, function, arg, exprTyVars );
    14111297
     
    14711357                VariableExpr *wrapFunctionDecl( DeclarationWithType *functionDecl ) {
    14721358                        // line below cloned from FixFunction.cc
     1359                        // xxx - functionObj is never added to a list of declarations...
    14731360                        ObjectDecl *functionObj = new ObjectDecl( functionDecl->get_name(), functionDecl->get_storageClass(), functionDecl->get_linkage(), 0,
    14741361                                                                  new PointerType( Type::Qualifiers(), functionDecl->get_type()->clone() ), 0 );
    14751362                        functionObj->set_mangleName( functionDecl->get_mangleName() );
     1363                        functionObj->set_scopeLevel( functionDecl->get_scopeLevel() );
    14761364                        return new VariableExpr( functionObj );
    14771365                }
     
    14921380                                        = ParamEntry( assertOp->get_uniqueId(), assertOp->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertOp ) );
    14931381                }
    1494                
     1382
    14951383                Statement * Pass1::mutate( ReturnStmt *returnStmt ) {
    14961384                        if ( retval && returnStmt->get_expr() ) {
     
    15541442                                                DeclarationWithType *assertDtor = findOpForType( formalType, dtorOps, scopedDtorOps );
    15551443                                                if ( ! assertDtor ) throw SemanticError( "No destructor found for ", formalType );
    1556                                                
     1444
    15571445                                                // add inferred parameters for otype operators to assignment expression
    15581446                                                // NOTE: Code here assumes that first four assertions are assign op, ctor, copy ctor, dtor, in that order
     
    15681456                                                ++actualIt;
    15691457                                                addAssertionFor( assignExpr, *actualIt, assertDtor );
    1570                                                
    1571                                                 //DeclarationWithType *actualDecl = asserts.front();
    1572                                                 //assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ]
    1573                                                 //      = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) );
     1458
    15741459                                        }
    15751460                                }
     
    16951580
    16961581                        // move polymorphic return type to parameter list
    1697                         if ( isPolyRet( funcType ) ) {
     1582                        if ( isDynRet( funcType ) ) {
    16981583                                DeclarationWithType *ret = funcType->get_returnVals().front();
    16991584                                ret->set_type( new PointerType( Type::Qualifiers(), ret->get_type() ) );
     
    17761661                }
    17771662
    1778 //////////////////////////////////////// GenericInstantiator //////////////////////////////////////////////////
    1779 
    1780                 /// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type
    1781                 bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {
    1782                         bool allConcrete = true;  // will finish the substitution list even if they're not all concrete
    1783 
    1784                         // substitute concrete types for given parameters, and incomplete types for placeholders
    1785                         std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
    1786                         std::list< Expression* >::const_iterator param = params.begin();
    1787                         for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {
    1788         //                      switch ( (*baseParam)->get_kind() ) {
    1789         //                      case TypeDecl::Any: {   // any type is a valid substitution here; complete types can be used to instantiate generics
    1790                                         TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    1791                                         assert(paramType && "Aggregate parameters should be type expressions");
    1792                                         out.push_back( paramType->clone() );
    1793                                         // check that the substituted type isn't a type variable itself
    1794                                         if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) {
    1795                                                 allConcrete = false;
    1796                                         }
    1797         //                              break;
    1798         //                      }
    1799         //                      case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
    1800         //                              out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
    1801         //                              break;
    1802         //                      case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
    1803         //                              out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
    1804         //                              break;
    1805         //                      }
    1806                         }
    1807 
    1808                         // if any parameters left over, not done
    1809                         if ( baseParam != baseParams.end() ) return false;
    1810         //              // if not enough parameters given, substitute remaining incomplete types for placeholders
    1811         //              for ( ; baseParam != baseParams.end(); ++baseParam ) {
    1812         //                      switch ( (*baseParam)->get_kind() ) {
    1813         //                      case TypeDecl::Any:    // no more substitutions here, fail early
    1814         //                              return false;
    1815         //                      case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
    1816         //                              out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
    1817         //                              break;
    1818         //                      case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
    1819         //                              out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
    1820         //                              break;
    1821         //                      }
    1822         //              }
    1823 
    1824                         return allConcrete;
    1825                 }
    1826 
    1827                 /// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out
    1828                 void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,
    1829                                                                 std::list< Declaration* >& out ) {
    1830                         // substitute types into new members
    1831                         TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
    1832                         for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {
    1833                                 Declaration *newMember = (*member)->clone();
    1834                                 subs.apply(newMember);
    1835                                 out.push_back( newMember );
    1836                         }
    1837                 }
    1838 
    1839                 Type* GenericInstantiator::mutate( StructInstType *inst ) {
    1840                         // mutate subtypes
    1841                         Type *mutated = Mutator::mutate( inst );
    1842                         inst = dynamic_cast< StructInstType* >( mutated );
    1843                         if ( ! inst ) return mutated;
    1844 
    1845                         // exit early if no need for further mutation
    1846                         if ( inst->get_parameters().empty() ) return inst;
    1847                         assert( inst->get_baseParameters() && "Base struct has parameters" );
    1848 
    1849                         // check if type can be concretely instantiated; put substitutions into typeSubs
    1850                         std::list< TypeExpr* > typeSubs;
    1851                         if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
    1852                                 deleteAll( typeSubs );
    1853                                 return inst;
    1854                         }
    1855 
    1856                         // make concrete instantiation of generic type
    1857                         StructDecl *concDecl = lookup( inst, typeSubs );
    1858                         if ( ! concDecl ) {
    1859                                 // set concDecl to new type, insert type declaration into statements to add
    1860                                 concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
    1861                                 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs,        concDecl->get_members() );
    1862                                 DeclMutator::addDeclaration( concDecl );
    1863                                 insert( inst, typeSubs, concDecl );
    1864                         }
    1865                         StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
    1866                         newInst->set_baseStruct( concDecl );
    1867 
    1868                         deleteAll( typeSubs );
    1869                         delete inst;
    1870                         return newInst;
    1871                 }
    1872 
    1873                 Type* GenericInstantiator::mutate( UnionInstType *inst ) {
    1874                         // mutate subtypes
    1875                         Type *mutated = Mutator::mutate( inst );
    1876                         inst = dynamic_cast< UnionInstType* >( mutated );
    1877                         if ( ! inst ) return mutated;
    1878 
    1879                         // exit early if no need for further mutation
    1880                         if ( inst->get_parameters().empty() ) return inst;
    1881                         assert( inst->get_baseParameters() && "Base union has parameters" );
    1882 
    1883                         // check if type can be concretely instantiated; put substitutions into typeSubs
    1884                         std::list< TypeExpr* > typeSubs;
    1885                         if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
    1886                                 deleteAll( typeSubs );
    1887                                 return inst;
    1888                         }
    1889 
    1890                         // make concrete instantiation of generic type
    1891                         UnionDecl *concDecl = lookup( inst, typeSubs );
    1892                         if ( ! concDecl ) {
    1893                                 // set concDecl to new type, insert type declaration into statements to add
    1894                                 concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );
    1895                                 substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
    1896                                 DeclMutator::addDeclaration( concDecl );
    1897                                 insert( inst, typeSubs, concDecl );
    1898                         }
    1899                         UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
    1900                         newInst->set_baseUnion( concDecl );
    1901 
    1902                         deleteAll( typeSubs );
    1903                         delete inst;
    1904                         return newInst;
    1905                 }
    1906 
    1907         //      /// Gets the base struct or union declaration for a member expression; NULL if not applicable
    1908         //      AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) {
    1909         //              // get variable for member aggregate
    1910         //              VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() );
    1911         //              if ( ! varExpr ) return NULL;
    1912         //
    1913         //              // get object for variable
    1914         //              ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );
    1915         //              if ( ! objectDecl ) return NULL;
    1916         //
    1917         //              // get base declaration from object type
    1918         //              Type *objectType = objectDecl->get_type();
    1919         //              StructInstType *structType = dynamic_cast< StructInstType* >( objectType );
    1920         //              if ( structType ) return structType->get_baseStruct();
    1921         //              UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType );
    1922         //              if ( unionType ) return unionType->get_baseUnion();
    1923         //
    1924         //              return NULL;
    1925         //      }
    1926         //
    1927         //      /// Finds the declaration with the given name, returning decls.end() if none such
    1928         //      std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) {
    1929         //              for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
    1930         //                      if ( (*decl)->get_name() == name ) return decl;
    1931         //              }
    1932         //              return decls.end();
    1933         //      }
    1934         //
    1935         //      Expression* Instantiate::mutate( MemberExpr *memberExpr ) {
    1936         //              // mutate, exiting early if no longer MemberExpr
    1937         //              Expression *expr = Mutator::mutate( memberExpr );
    1938         //              memberExpr = dynamic_cast< MemberExpr* >( expr );
    1939         //              if ( ! memberExpr ) return expr;
    1940         //
    1941         //              // get declaration of member and base declaration of member, exiting early if not found
    1942         //              AggregateDecl *memberBase = getMemberBaseDecl( memberExpr );
    1943         //              if ( ! memberBase ) return memberExpr;
    1944         //              DeclarationWithType *memberDecl = memberExpr->get_member();
    1945         //              std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() );
    1946         //              if ( baseIt == memberBase->get_members().end() ) return memberExpr;
    1947         //              DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt );
    1948         //              if ( ! baseDecl ) return memberExpr;
    1949         //
    1950         //              // check if stated type of the member is not the type of the member's declaration; if so, need a cast
    1951         //              // this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker
    1952         //              SymTab::Indexer dummy;
    1953         //              if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr;
    1954         //              else return new CastExpr( memberExpr, memberDecl->get_type() );
    1955         //      }
    1956 
    1957                 void GenericInstantiator::doBeginScope() {
    1958                         DeclMutator::doBeginScope();
    1959                         instantiations.beginScope();
    1960                 }
    1961 
    1962                 void GenericInstantiator::doEndScope() {
    1963                         DeclMutator::doEndScope();
    1964                         instantiations.endScope();
    1965                 }
    1966 
    19671663////////////////////////////////////////// PolyGenericCalculator ////////////////////////////////////////////////////
    19681664
     
    21081804                        findGeneric( objectType ); // ensure layout for this type is available
    21091805
     1806                        // replace member expression with dynamically-computed layout expression
    21101807                        Expression *newMemberExpr = 0;
    21111808                        if ( StructInstType *structType = dynamic_cast< StructInstType* >( objectType ) ) {
     
    21811878                bool PolyGenericCalculator::findGeneric( Type *ty ) {
    21821879                        ty = replaceTypeInst( ty, env );
    2183                        
     1880
    21841881                        if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
    21851882                                if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) {
  • src/GenPoly/DeclMutator.cc

    r950f7a7 r7527e63  
    1010// Created On       : Fri Nov 27 14:44:00 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:38:46 2016
    13 // Update Count     : 2
     12// Last Modified On : Thu Aug  4 11:16:43 2016
     13// Update Count     : 3
    1414//
    1515
     
    163163        Statement* DeclMutator::mutate(SwitchStmt *switchStmt) {
    164164                switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) );
    165                 mutateAll( switchStmt->get_branches(), *this );
     165                mutateAll( switchStmt->get_statements(), *this );
    166166                return switchStmt;
    167167        }
  • src/GenPoly/DeclMutator.h

    r950f7a7 r7527e63  
    2828        class DeclMutator : public Mutator {
    2929        public:
     30                typedef Mutator Parent;
     31
    3032                DeclMutator();
    3133                virtual ~DeclMutator();
    32                
     34
     35                using Parent::mutate;
    3336                virtual CompoundStmt* mutate(CompoundStmt *compoundStmt);
    3437                virtual Statement* mutate(IfStmt *ifStmt);
     
    4245                /// Mutates a list of declarations with this visitor
    4346                void mutateDeclarationList(std::list< Declaration* >& decls);
    44                
     47
    4548                /// Called on entry to a new scope; overriders should call this as a super-class call
    4649                virtual void doBeginScope();
  • src/GenPoly/GenPoly.cc

    r950f7a7 r7527e63  
    2323
    2424namespace GenPoly {
    25         bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVars ) {
    26                 if ( ! adaptee->get_returnVals().empty() && isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
    27                         return true;
    28                 } // if
    29                 for ( std::list< DeclarationWithType* >::const_iterator innerArg = adaptee->get_parameters().begin(); innerArg != adaptee->get_parameters().end(); ++innerArg ) {
    30                         if ( isPolyType( (*innerArg)->get_type(), tyVars ) ) {
    31                                 return true;
    32                         } // if
    33                 } // for
    34                 return false;
    35         }
    36 
    37         ReferenceToType *isPolyRet( FunctionType *function ) {
    38                 if ( ! function->get_returnVals().empty() ) {
    39                         TyVarMap forallTypes( (TypeDecl::Kind)-1 );
    40                         makeTyVarMap( function, forallTypes );
    41                         return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes );
    42                 } // if
    43                 return 0;
    44         }
    45 
    4625        namespace {
    4726                /// Checks a parameter list for polymorphic parameters; will substitute according to env if present
     
    6443                        return false;
    6544                }
     45
     46                /// Checks a parameter list for dynamic-layout parameters from tyVars; will substitute according to env if present
     47                bool hasDynParams( std::list< Expression* >& params, const TyVarMap &tyVars, const TypeSubstitution *env ) {
     48                        for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
     49                                TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
     50                                assert(paramType && "Aggregate parameters should be type expressions");
     51                                if ( isDynType( paramType->get_type(), tyVars, env ) ) return true;
     52                        }
     53                        return false;
     54                }
    6655        }
    6756
     
    10190                }
    10291                return 0;
     92        }
     93
     94        Type *isDynType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env ) {
     95                type = replaceTypeInst( type, env );
     96
     97                if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) {
     98                        auto var = tyVars.find( typeInst->get_name() );
     99                        if ( var != tyVars.end() && var->second == TypeDecl::Any ) {
     100                                return type;
     101                        }
     102                } else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
     103                        if ( hasDynParams( structType->get_parameters(), tyVars, env ) ) return type;
     104                } else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) {
     105                        if ( hasDynParams( unionType->get_parameters(), tyVars, env ) ) return type;
     106                }
     107                return 0;
     108        }
     109
     110        ReferenceToType *isDynRet( FunctionType *function, const TyVarMap &forallTypes ) {
     111                if ( function->get_returnVals().empty() ) return 0;
     112               
     113                return (ReferenceToType*)isDynType( function->get_returnVals().front()->get_type(), forallTypes );
     114        }
     115
     116        ReferenceToType *isDynRet( FunctionType *function ) {
     117                if ( function->get_returnVals().empty() ) return 0;
     118
     119                TyVarMap forallTypes( (TypeDecl::Kind)-1 );
     120                makeTyVarMap( function, forallTypes );
     121                return (ReferenceToType*)isDynType( function->get_returnVals().front()->get_type(), forallTypes );
     122        }
     123
     124        bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVars ) {
     125//              if ( ! adaptee->get_returnVals().empty() && isPolyType( adaptee->get_returnVals().front()->get_type(), tyVars ) ) {
     126//                      return true;
     127//              } // if
     128                if ( isDynRet( adaptee, tyVars ) ) return true;
     129               
     130                for ( std::list< DeclarationWithType* >::const_iterator innerArg = adaptee->get_parameters().begin(); innerArg != adaptee->get_parameters().end(); ++innerArg ) {
     131//                      if ( isPolyType( (*innerArg)->get_type(), tyVars ) ) {
     132                        if ( isDynType( (*innerArg)->get_type(), tyVars ) ) {
     133                                return true;
     134                        } // if
     135                } // for
     136                return false;
    103137        }
    104138
  • src/GenPoly/GenPoly.h

    r950f7a7 r7527e63  
    3131namespace GenPoly {
    3232        typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap;
    33        
    34         /// A function needs an adapter if it returns a polymorphic value or if any of its
    35         /// parameters have polymorphic type
    36         bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVarr );
    37 
    38         /// true iff function has polymorphic return type
    39         ReferenceToType *isPolyRet( FunctionType *function );
    4033
    4134        /// Replaces a TypeInstType by its referrent in the environment, if applicable
     
    4740        /// returns polymorphic type if is polymorphic type in tyVars, NULL otherwise; will look up substitution in env if provided
    4841        Type *isPolyType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 );
     42
     43        /// returns dynamic-layout type if is dynamic-layout type in tyVars, NULL otherwise; will look up substitution in env if provided
     44        Type *isDynType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env = 0 );
     45
     46        /// true iff function has dynamic-layout return type under the given type variable map
     47        ReferenceToType *isDynRet( FunctionType *function, const TyVarMap &tyVars );
     48
     49        /// true iff function has dynamic-layout return type under the type variable map generated from its forall-parameters
     50        ReferenceToType *isDynRet( FunctionType *function );
     51
     52        /// A function needs an adapter if it returns a dynamic-layout value or if any of its parameters have dynamic-layout type
     53        bool needsAdapter( FunctionType *adaptee, const TyVarMap &tyVarr );
    4954
    5055        /// returns polymorphic type if is pointer to polymorphic type, NULL otherwise; will look up substitution in env if provided
  • src/GenPoly/PolyMutator.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:39:32 2016
    13 // Update Count     : 12
     12// Last Modified On : Thu Aug  4 11:26:22 2016
     13// Update Count     : 16
    1414//
    1515
     
    9999
    100100        Statement * PolyMutator::mutate(SwitchStmt *switchStmt) {
    101                 mutateStatementList( switchStmt->get_branches() );
     101                mutateStatementList( switchStmt->get_statements() );
    102102                switchStmt->set_condition( mutateExpression( switchStmt->get_condition() ) );
    103103                return switchStmt;
  • src/GenPoly/ScrubTyVars.cc

    r950f7a7 r7527e63  
    4545
    4646        Type * ScrubTyVars::mutateAggregateType( Type *ty ) {
    47                 if ( isPolyType( ty, tyVars ) ) {
     47                if ( shouldScrub( ty ) ) {
    4848                        PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( ty->get_qualifiers() ) );
    4949                        delete ty;
     
    6363        Expression * ScrubTyVars::mutate( SizeofExpr *szeof ) {
    6464                // sizeof( T ) => _sizeof_T parameter, which is the size of T
    65                 if ( Type *polyType = isPolyType( szeof->get_type() ) ) {
    66                         Expression *expr = new NameExpr( sizeofName( mangleType( polyType ) ) );
     65                if ( Type *dynType = shouldScrub( szeof->get_type() ) ) {
     66                        Expression *expr = new NameExpr( sizeofName( mangleType( dynType ) ) );
    6767                        return expr;
    6868                } else {
     
    7373        Expression * ScrubTyVars::mutate( AlignofExpr *algnof ) {
    7474                // alignof( T ) => _alignof_T parameter, which is the alignment of T
    75                 if ( Type *polyType = isPolyType( algnof->get_type() ) ) {
    76                         Expression *expr = new NameExpr( alignofName( mangleType( polyType ) ) );
     75                if ( Type *dynType = shouldScrub( algnof->get_type() ) ) {
     76                        Expression *expr = new NameExpr( alignofName( mangleType( dynType ) ) );
    7777                        return expr;
    7878                } else {
     
    8282
    8383        Type * ScrubTyVars::mutate( PointerType *pointer ) {
    84                 if ( Type *polyType = isPolyType( pointer->get_base(), tyVars ) ) {
    85                         Type *ret = polyType->acceptMutator( *this );
     84//              // special case of shouldScrub that takes all TypeInstType pointer bases, even if they're not dynamic
     85//              Type *base = pointer->get_base();
     86//              Type *dynType = 0;
     87//              if ( dynamicOnly ) {
     88//                      if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( base ) ) {
     89//                              if ( tyVars.find( typeInst->get_name() ) != tyVars.end() ) { dynType = typeInst; }
     90//                      } else {
     91//                              dynType = isDynType( base, tyVars );
     92//                      }
     93//              } else {
     94//                      dynType = isPolyType( base, tyVars );
     95//              }
     96//              if ( dynType ) {
     97                if ( Type *dynType = shouldScrub( pointer->get_base() ) ) {
     98                        Type *ret = dynType->acceptMutator( *this );
    8699                        ret->get_qualifiers() += pointer->get_qualifiers();
    87100                        pointer->set_base( 0 );
  • src/GenPoly/ScrubTyVars.h

    r950f7a7 r7527e63  
    2727        class ScrubTyVars : public Mutator {
    2828          public:
    29                 ScrubTyVars( const TyVarMap &tyVars ): tyVars( tyVars ) {}
     29                ScrubTyVars( const TyVarMap &tyVars, bool dynamicOnly = false ): tyVars( tyVars ), dynamicOnly( dynamicOnly ) {}
    3030
    3131                /// For all polymorphic types with type variables in `tyVars`, replaces generic types, dtypes, and ftypes with the appropriate void type,
     
    3333                template< typename SynTreeClass >
    3434                static SynTreeClass *scrub( SynTreeClass *target, const TyVarMap &tyVars );
     35
     36                /// For all dynamic-layout types with type variables in `tyVars`, replaces generic types, dtypes, and ftypes with the appropriate void type,
     37                /// and sizeof/alignof expressions with the proper variable
     38                template< typename SynTreeClass >
     39                static SynTreeClass *scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars );
    3540
    3641                virtual Type* mutate( TypeInstType *typeInst );
     
    4247
    4348          private:
     49                /// Returns the type if it should be scrubbed, NULL otherwise.
     50                Type* shouldScrub( Type *ty ) {
     51                        return dynamicOnly ? isDynType( ty, tyVars ) : isPolyType( ty, tyVars );
     52//                      if ( ! dynamicOnly ) return isPolyType( ty, tyVars );
     53//
     54//                      if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
     55//                              return tyVars.find( typeInst->get_name() ) != tyVars.end() ? ty : 0;
     56//                      }
     57//
     58//                      return isDynType( ty, tyVars );
     59                }
     60               
    4461                /// Mutates (possibly generic) aggregate types appropriately
    4562                Type* mutateAggregateType( Type *ty );
    4663               
    47                 const TyVarMap &tyVars;
     64                const TyVarMap &tyVars;  ///< Type variables to scrub
     65                bool dynamicOnly;        ///< only scrub the types with dynamic layout? [false]
    4866        };
    4967
    50         /* static class method */
    5168        template< typename SynTreeClass >
    5269        SynTreeClass * ScrubTyVars::scrub( SynTreeClass *target, const TyVarMap &tyVars ) {
    5370                ScrubTyVars scrubber( tyVars );
     71                return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) );
     72        }
     73
     74        template< typename SynTreeClass >
     75        SynTreeClass * ScrubTyVars::scrubDynamic( SynTreeClass *target, const TyVarMap &tyVars ) {
     76                ScrubTyVars scrubber( tyVars, true );
    5477                return static_cast< SynTreeClass * >( target->acceptMutator( scrubber ) );
    5578        }
  • src/GenPoly/Specialize.cc

    r950f7a7 r7527e63  
    3131#include "Common/UniqueName.h"
    3232#include "Common/utility.h"
     33#include "InitTweak/InitTweak.h"
    3334
    3435namespace GenPoly {
     
    184185                mutateAll( appExpr->get_args(), *this );
    185186
    186                 // create thunks for the inferred parameters
    187                 for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
    188                         inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
    189                 }
    190 
    191                 handleExplicitParams( appExpr );
     187                if ( ! InitTweak::isIntrinsicCallExpr( appExpr ) ) {
     188                        // create thunks for the inferred parameters
     189                        // don't need to do this for intrinsic calls, because they aren't actually passed
     190                        for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
     191                                inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
     192                        }
     193
     194                        handleExplicitParams( appExpr );
     195                }
    192196
    193197                return appExpr;
  • src/GenPoly/module.mk

    r950f7a7 r7527e63  
    2323       GenPoly/CopyParams.cc \
    2424       GenPoly/FindFunction.cc \
    25        GenPoly/DeclMutator.cc
     25       GenPoly/DeclMutator.cc \
     26       GenPoly/InstantiateGeneric.cc
  • src/InitTweak/FixGlobalInit.cc

    r950f7a7 r7527e63  
    4646                FunctionDecl * destroyFunction;
    4747        };
    48 
    49         class ConstExprChecker : public Visitor {
    50         public:
    51                 ConstExprChecker() : isConstExpr( true ) {}
    52 
    53                 virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }
    54                 virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }
    55                 virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; }
    56                 virtual void visit( CastExpr *castExpr ) { isConstExpr = false; }
    57                 virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }
    58                 virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }
    59                 virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }
    60                 virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }
    61                 virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ }
    62                 // these might be okay?
    63                 // virtual void visit( SizeofExpr *sizeofExpr );
    64                 // virtual void visit( AlignofExpr *alignofExpr );
    65                 // virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    66                 // virtual void visit( OffsetofExpr *offsetofExpr );
    67                 // virtual void visit( OffsetPackExpr *offsetPackExpr );
    68                 // virtual void visit( AttrExpr *attrExpr );
    69                 // virtual void visit( CommaExpr *commaExpr );
    70                 // virtual void visit( LogicalExpr *logicalExpr );
    71                 // virtual void visit( ConditionalExpr *conditionalExpr );
    72                 virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
    73                 virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; }
    74                 virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }
    75                 virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }
    76                 virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
    77                 virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
    78 
    79                 bool isConstExpr;
    80         };
    81 
    82         bool isConstExpr( Initializer * init ) {
    83                 if ( init ) {
    84                         ConstExprChecker checker;
    85                         init->accept( checker );
    86                         return checker.isConstExpr;
    87                 } // if
    88                 // for all intents and purposes, no initializer means const expr
    89                 return true;
    90         }
    9148
    9249        void fixGlobalInit( std::list< Declaration * > & translationUnit, const std::string & name, bool inLibrary ) {
     
    14097                std::list< Statement * > & destroyStatements = destroyFunction->get_statements()->get_kids();
    14198
    142                 if ( ! tryConstruct( objDecl ) ) return; // don't construct @= or designated objects
    143                 if ( objDecl->get_storageClass() == DeclarationNode::Extern ) return;
    14499                // C allows you to initialize objects with constant expressions
    145100                // xxx - this is an optimization. Need to first resolve constructors before we decide
     
    147102                // if ( isConstExpr( objDecl->get_init() ) ) return;
    148103
    149                 if ( dynamic_cast< ArrayType * > ( objDecl->get_type() ) ) {
    150                         // xxx - initialize each element of the array
    151                 } else {
    152                         // steal initializer from object and attach it to a new temporary
    153                         ObjectDecl *newObj = new ObjectDecl( tempNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, objDecl->get_type()->clone(), objDecl->get_init() );
    154                         objDecl->set_init( NULL );
    155                         initStatements.push_back( new DeclStmt( noLabels, newObj ) );
     104                if ( ConstructorInit * ctorInit = dynamic_cast< ConstructorInit * >( objDecl->get_init() ) ) {
     105                        // a decision should have been made by the resolver, so ctor and init are not both non-NULL
     106                        assert( ! ctorInit->get_ctor() || ! ctorInit->get_init() );
    156107
    157                         // copy construct objDecl using temporary
    158                         UntypedExpr * init = new UntypedExpr( new NameExpr( "?{}" ) );
    159                         init->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
    160                         init->get_args().push_back( new VariableExpr( newObj ) );
    161                         initStatements.push_back( new ImplicitCtorDtorStmt( new ExprStmt( noLabels, init ) ) );
    162 
    163                         // add destructor calls to global destroy function
    164                         UntypedExpr * destroy = new UntypedExpr( new NameExpr( "^?{}" ) );
    165                         destroy->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
    166                         destroyStatements.push_front( new ImplicitCtorDtorStmt( new ExprStmt( noLabels, destroy ) ) );
     108                        Statement * dtor = ctorInit->get_dtor();
     109                        if ( dtor && ! isIntrinsicSingleArgCallStmt( dtor ) ) {
     110                                // don't need to call intrinsic dtor, because it does nothing, but
     111                                // non-intrinsic dtors must be called
     112                                destroyStatements.push_front( dtor );
     113                                ctorInit->set_dtor( NULL );
     114                        } // if
     115                        if ( Statement * ctor = ctorInit->get_ctor() ) {
     116                                initStatements.push_back( ctor );
     117                                objDecl->set_init( NULL );
     118                                ctorInit->set_ctor( NULL );
     119                        } else if ( Initializer * init = ctorInit->get_init() ) {
     120                                objDecl->set_init( init );
     121                                ctorInit->set_init( NULL );
     122                        } else {
     123                                // no constructor and no initializer, which is okay
     124                                objDecl->set_init( NULL );
     125                        } // if
     126                        delete ctorInit;
    167127                } // if
    168128        }
  • src/InitTweak/FixInit.cc

    r950f7a7 r7527e63  
    1818#include <iterator>
    1919#include <algorithm>
     20#include "InitTweak.h"
    2021#include "FixInit.h"
    21 #include "InitTweak.h"
     22#include "FixGlobalInit.h"
    2223#include "ResolvExpr/Resolver.h"
    2324#include "ResolvExpr/typeops.h"
     
    2526#include "SynTree/Type.h"
    2627#include "SynTree/Expression.h"
     28#include "SynTree/Attribute.h"
    2729#include "SynTree/Statement.h"
    2830#include "SynTree/Initializer.h"
     
    8385                };
    8486
     87                // debug
    8588                struct printSet {
    8689                        typedef ObjDeclCollector::ObjectSet ObjectSet;
     
    159162
    160163                        virtual DeclarationWithType * mutate( ObjectDecl *objDecl );
     164
     165                        std::list< Declaration * > staticDtorDecls;
    161166                };
    162167
     
    171176        } // namespace
    172177
    173         void fix( std::list< Declaration * > & translationUnit ) {
     178        void fix( std::list< Declaration * > & translationUnit, const std::string & filename, bool inLibrary ) {
     179                // fixes ConstructorInit for global variables. should happen before fixInitializers.
     180                InitTweak::fixGlobalInit( translationUnit, filename, inLibrary );
     181
    174182                InsertImplicitCalls::insert( translationUnit );
    175183                ResolveCopyCtors::resolveImplicitCalls( translationUnit );
     
    194202                void FixInit::fixInitializers( std::list< Declaration * > & translationUnit ) {
    195203                        FixInit fixer;
    196                         mutateAll( translationUnit, fixer );
     204
     205                        // can't use mutateAll, because need to insert declarations at top-level
     206                        // can't use DeclMutator, because sometimes need to insert IfStmt, etc.
     207                        SemanticError errors;
     208                        for ( std::list< Declaration * >::iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
     209                                try {
     210                                        *i = maybeMutate( *i, fixer );
     211                                        translationUnit.splice( i, fixer.staticDtorDecls );
     212                                } catch( SemanticError &e ) {
     213                                        errors.append( e );
     214                                } // try
     215                        } // for
     216                        if ( ! errors.isEmpty() ) {
     217                                throw errors;
     218                        } // if
    197219                }
    198220
     
    422444                                if ( Statement * ctor = ctorInit->get_ctor() ) {
    423445                                        if ( objDecl->get_storageClass() == DeclarationNode::Static ) {
     446                                                // originally wanted to take advantage of gcc nested functions, but
     447                                                // we get memory errors with this approach. To remedy this, the static
     448                                                // variable is hoisted when the destructor needs to be called.
     449                                                //
    424450                                                // generate:
    425                                                 // static bool __objName_uninitialized = true;
    426                                                 // if (__objName_uninitialized) {
    427                                                 //   __ctor(__objName);
    428                                                 //   void dtor_atexit() {
    429                                                 //     __dtor(__objName);
     451                                                // static T __objName_static_varN;
     452                                                // void __objName_dtor_atexitN() {
     453                                                //   __dtor__...;
     454                                                // }
     455                                                // int f(...) {
     456                                                //   ...
     457                                                //   static bool __objName_uninitialized = true;
     458                                                //   if (__objName_uninitialized) {
     459                                                //     __ctor(__objName);
     460                                                //     __objName_uninitialized = false;
     461                                                //     atexit(__objName_dtor_atexitN);
    430462                                                //   }
    431                                                 //   on_exit(dtorOnExit, &__objName);
    432                                                 //   __objName_uninitialized = false;
     463                                                //   ...
    433464                                                // }
    434465
    435                                                 // generate first line
     466                                                static UniqueName dtorCallerNamer( "_dtor_atexit" );
     467
     468                                                // static bool __objName_uninitialized = true
    436469                                                BasicType * boolType = new BasicType( Type::Qualifiers(), BasicType::Bool );
    437470                                                SingleInit * boolInitExpr = new SingleInit( new ConstantExpr( Constant( boolType->clone(), "1" ) ), noDesignators );
     
    439472                                                isUninitializedVar->fixUniqueId();
    440473
    441                                                 // void dtor_atexit(...) {...}
    442                                                 FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + "_dtor_atexit", DeclarationNode::NoStorageClass, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );
    443                                                 dtorCaller->fixUniqueId();
    444                                                 dtorCaller->get_statements()->get_kids().push_back( ctorInit->get_dtor()->clone() );
    445 
    446                                                 // on_exit(dtor_atexit);
    447                                                 UntypedExpr * callAtexit = new UntypedExpr( new NameExpr( "atexit" ) );
    448                                                 callAtexit->get_args().push_back( new VariableExpr( dtorCaller ) );
    449 
    450474                                                // __objName_uninitialized = false;
    451475                                                UntypedExpr * setTrue = new UntypedExpr( new NameExpr( "?=?" ) );
     
    457481                                                std::list< Statement * > & body = initStmts->get_kids();
    458482                                                body.push_back( ctor );
    459                                                 body.push_back( new DeclStmt( noLabels, dtorCaller ) );
    460                                                 body.push_back( new ExprStmt( noLabels, callAtexit ) );
    461483                                                body.push_back( new ExprStmt( noLabels, setTrue ) );
    462484
     
    465487                                                stmtsToAddAfter.push_back( new DeclStmt( noLabels, isUninitializedVar ) );
    466488                                                stmtsToAddAfter.push_back( ifStmt );
     489
     490                                                if ( ctorInit->get_dtor() ) {
     491                                                        // if the object has a non-trivial destructor, have to
     492                                                        // hoist it and the object into the global space and
     493                                                        // call the destructor function with atexit.
     494
     495                                                        Statement * dtorStmt = ctorInit->get_dtor()->clone();
     496
     497                                                        // void __objName_dtor_atexitN(...) {...}
     498                                                        FunctionDecl * dtorCaller = new FunctionDecl( objDecl->get_mangleName() + dtorCallerNamer.newName(), DeclarationNode::Static, LinkageSpec::C, new FunctionType( Type::Qualifiers(), false ), new CompoundStmt( noLabels ), false, false );
     499                                                        dtorCaller->fixUniqueId();
     500                                                        dtorCaller->get_statements()->get_kids().push_back( dtorStmt );
     501
     502                                                        // atexit(dtor_atexit);
     503                                                        UntypedExpr * callAtexit = new UntypedExpr( new NameExpr( "atexit" ) );
     504                                                        callAtexit->get_args().push_back( new VariableExpr( dtorCaller ) );
     505
     506                                                        body.push_back( new ExprStmt( noLabels, callAtexit ) );
     507
     508                                                        // hoist variable and dtor caller decls to list of decls that will be added into global scope
     509                                                        staticDtorDecls.push_back( objDecl );
     510                                                        staticDtorDecls.push_back( dtorCaller );
     511
     512                                                        // need to rename object uniquely since it now appears
     513                                                        // at global scope and there could be multiple function-scoped
     514                                                        // static variables with the same name in different functions.
     515                                                        static UniqueName staticNamer( "_static_var" );
     516                                                        objDecl->set_mangleName( objDecl->get_mangleName() + staticNamer.newName() );
     517
     518                                                        objDecl->set_init( NULL );
     519                                                        ctorInit->set_ctor( NULL );
     520                                                        delete ctorInit;
     521
     522                                                        // xxx - temporary hack: need to return a declaration, but want to hoist the current object out of this scope
     523                                                        // create a new object which is never used
     524                                                        static UniqueName dummyNamer( "_dummy" );
     525                                                        ObjectDecl * dummy = new ObjectDecl( dummyNamer.newName(), DeclarationNode::Static, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) ), 0, std::list< Attribute * >{ new Attribute("unused") } );
     526                                                        return dummy;
     527                                                }
    467528                                        } else {
    468529                                                stmtsToAddAfter.push_back( ctor );
     
    524585                                        assert( ! ctorInit->get_ctor() || ! ctorInit->get_init() );
    525586                                        Statement * dtor = ctorInit->get_dtor();
    526                                         if ( dtor && ! isInstrinsicSingleArgCallStmt( dtor ) ) {
     587                                        if ( dtor && ! isIntrinsicSingleArgCallStmt( dtor ) ) {
    527588                                                // don't need to call intrinsic dtor, because it does nothing, but
    528589                                                // non-intrinsic dtors must be called
  • src/InitTweak/FixInit.h

    r950f7a7 r7527e63  
    2727  /// replace constructor initializers with expression statements
    2828  /// and unwrap basic C-style initializers
    29         void fix( std::list< Declaration * > & translationUnit );
     29        void fix( std::list< Declaration * > & translationUnit, const std::string & name, bool inLibrary );
    3030} // namespace
    3131
  • src/InitTweak/GenInit.cc

    r950f7a7 r7527e63  
    2626#include "SymTab/Autogen.h"
    2727#include "GenPoly/PolyMutator.h"
     28#include "GenPoly/DeclMutator.h"
    2829
    2930namespace InitTweak {
     
    5556          public:
    5657                /// create constructor and destructor statements for object declarations.
    57                 /// Destructors are inserted directly into the code, whereas constructors
    58                 /// will be added in after the resolver has run so that the initializer expression
    59                 /// is only removed if a constructor is found
     58                /// the actual call statements will be added in after the resolver has run
     59                /// so that the initializer expression is only removed if a constructor is found
     60                /// and the same destructor call is inserted in all of the appropriate locations.
    6061                static void generateCtorDtor( std::list< Declaration * > &translationUnit );
    61 
    62                 CtorDtor() : inFunction( false ) {}
    6362
    6463                virtual DeclarationWithType * mutate( ObjectDecl * );
    6564                virtual DeclarationWithType * mutate( FunctionDecl *functionDecl );
    66                 virtual Declaration* mutate( StructDecl *aggregateDecl );
    67                 virtual Declaration* mutate( UnionDecl *aggregateDecl );
    68                 virtual Declaration* mutate( EnumDecl *aggregateDecl );
    69                 virtual Declaration* mutate( TraitDecl *aggregateDecl );
    70                 virtual TypeDecl* mutate( TypeDecl *typeDecl );
    71                 virtual Declaration* mutate( TypedefDecl *typeDecl );
    72 
    73                 virtual Type * mutate( FunctionType *funcType );
     65                // should not traverse into any of these declarations to find objects
     66                // that need to be constructed or destructed
     67                virtual Declaration* mutate( StructDecl *aggregateDecl ) { return aggregateDecl; }
     68                virtual Declaration* mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }
     69                virtual Declaration* mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }
     70                virtual Declaration* mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }
     71                virtual TypeDecl* mutate( TypeDecl *typeDecl ) { return typeDecl; }
     72                virtual Declaration* mutate( TypedefDecl *typeDecl ) { return typeDecl; }
     73
     74                virtual Type * mutate( FunctionType *funcType ) { return funcType; }
    7475
    7576          protected:
    76                 bool inFunction;
     77        };
     78
     79        class HoistArrayDimension : public GenPoly::DeclMutator {
     80          public:
     81                typedef GenPoly::DeclMutator Parent;
     82
     83                /// hoist dimension from array types in object declaration so that it uses a single
     84                /// const variable of type size_t, so that side effecting array dimensions are only
     85                /// computed once.
     86                static void hoistArrayDimension( std::list< Declaration * > & translationUnit );
     87
     88          private:
     89                virtual DeclarationWithType * mutate( ObjectDecl * objectDecl );
     90                virtual DeclarationWithType * mutate( FunctionDecl *functionDecl );
     91                // should not traverse into any of these declarations to find objects
     92                // that need to be constructed or destructed
     93                virtual Declaration* mutate( StructDecl *aggregateDecl ) { return aggregateDecl; }
     94                virtual Declaration* mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }
     95                virtual Declaration* mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }
     96                virtual Declaration* mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }
     97                virtual TypeDecl* mutate( TypeDecl *typeDecl ) { return typeDecl; }
     98                virtual Declaration* mutate( TypedefDecl *typeDecl ) { return typeDecl; }
     99
     100                virtual Type* mutate( FunctionType *funcType ) { return funcType; }
     101
     102                void hoist( Type * type );
     103
     104                DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass;
     105                bool inFunction = false;
    77106        };
    78107
    79108        void genInit( std::list< Declaration * > & translationUnit ) {
    80109                ReturnFixer::makeReturnTemp( translationUnit );
     110                HoistArrayDimension::hoistArrayDimension( translationUnit );
    81111                CtorDtor::generateCtorDtor( translationUnit );
    82112        }
     
    124154        }
    125155
     156        // precompute array dimension expression, because constructor generation may duplicate it,
     157        // which would be incorrect if it is a side-effecting computation.
     158        void HoistArrayDimension::hoistArrayDimension( std::list< Declaration * > & translationUnit ) {
     159                HoistArrayDimension hoister;
     160                hoister.mutateDeclarationList( translationUnit );
     161        }
     162
     163        DeclarationWithType * HoistArrayDimension::mutate( ObjectDecl * objectDecl ) {
     164                storageclass = objectDecl->get_storageClass();
     165                DeclarationWithType * temp = Parent::mutate( objectDecl );
     166                hoist( objectDecl->get_type() );
     167                storageclass = DeclarationNode::NoStorageClass;
     168                return temp;
     169        }
     170
     171        void HoistArrayDimension::hoist( Type * type ) {
     172                // if in function, generate const size_t var
     173                static UniqueName dimensionName( "_array_dim" );
     174
     175                // C doesn't allow variable sized arrays at global scope or for static variables,
     176                // so don't hoist dimension.
     177                if ( ! inFunction ) return;
     178                if ( storageclass == DeclarationNode::Static ) return;
     179
     180                if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
     181                        if ( ! arrayType->get_dimension() ) return; // xxx - recursive call to hoist?
     182
     183                        // don't need to hoist dimension if it's a constexpr - only need to if there's potential
     184                        // for side effects.
     185                        if ( isConstExpr( arrayType->get_dimension() ) ) return;
     186
     187                        ObjectDecl * arrayDimension = new ObjectDecl( dimensionName.newName(), storageclass, LinkageSpec::C, 0, SymTab::SizeType->clone(), new SingleInit( arrayType->get_dimension() ) );
     188                        arrayDimension->get_type()->set_isConst( true );
     189
     190                        arrayType->set_dimension( new VariableExpr( arrayDimension ) );
     191                        addDeclaration( arrayDimension );
     192
     193                        hoist( arrayType->get_base() );
     194                        return;
     195                }
     196        }
     197
     198        DeclarationWithType * HoistArrayDimension::mutate( FunctionDecl *functionDecl ) {
     199                bool oldInFunc = inFunction;
     200                inFunction = true;
     201                DeclarationWithType * decl = Parent::mutate( functionDecl );
     202                inFunction = oldInFunc;
     203                return decl;
     204        }
    126205
    127206        void CtorDtor::generateCtorDtor( std::list< Declaration * > & translationUnit ) {
     
    130209        }
    131210
    132         namespace {
    133                 Expression * makeCtorDtorExpr( std::string name, ObjectDecl * objDecl, std::list< Expression * > args ) {
    134                         UntypedExpr * expr = new UntypedExpr( new NameExpr( name ) );
    135                         expr->get_args().push_back( new AddressExpr( new VariableExpr( objDecl ) ) );
    136                         expr->get_args().splice( expr->get_args().end(), args );
    137                         return expr;
    138                 }
    139         }
    140 
    141211        DeclarationWithType * CtorDtor::mutate( ObjectDecl * objDecl ) {
    142                 // hands off if designated or if @=
     212                // hands off if designated, if @=, or if extern
    143213                if ( tryConstruct( objDecl ) ) {
    144                         if ( inFunction ) {
    145                                 if ( ArrayType * at = dynamic_cast< ArrayType * >( objDecl->get_type() ) ) {
    146                                         // call into makeArrayFunction from validate.cc to generate calls to ctor/dtor for each element of array
    147                                         // TODO: walk initializer and generate appropriate copy ctor if element has initializer
    148                                         std::list< Expression * > args = makeInitList( objDecl->get_init() );
    149                                         if ( args.empty() ) {
    150                                                 std::list< Statement * > ctor;
    151                                                 std::list< Statement * > dtor;
    152 
    153                                                 SymTab::makeArrayFunction( NULL, new VariableExpr( objDecl ), at, "?{}", back_inserter( ctor ) );
    154                                                 SymTab::makeArrayFunction( NULL, new VariableExpr( objDecl ), at, "^?{}", front_inserter( dtor ), false );
    155 
    156                                                 // Currently makeArrayFunction produces a single Statement - a CompoundStmt
    157                                                 // which  wraps everything that needs to happen. As such, it's technically
    158                                                 // possible to use a Statement ** in the above calls, but this is inherently
    159                                                 // unsafe, so instead we take the slightly less efficient route, but will be
    160                                                 // immediately informed if somehow the above assumption is broken. In this case,
    161                                                 // we could always wrap the list of statements at this point with a CompoundStmt,
    162                                                 // but it seems reasonable at the moment for this to be done by makeArrayFunction
    163                                                 // itself
    164                                                 assert( ctor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( ctor.front() ) );
    165                                                 assert( dtor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( dtor.front() ) );
    166                                                 objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) );
    167                                         } else {
    168                                                 // array came with an initializer list: initialize each element
    169                                                 // may have more initializers than elements in the array - need to check at each index that
    170                                                 // we haven't exceeded size. This requires precomputing the size because it might be a side-effecting
    171                                                 // computation.
    172                                                 // may have fewer initializers than eleemnts in the array - need to default construct
    173                                                 // remaining elements.
    174                                                 // might be able to merge this with the case above.
    175                                         }
    176                                 } else {
    177                                         // it's sufficient to attempt to call the ctor/dtor for the given object and its initializer
    178                                         Expression * ctor = makeCtorDtorExpr( "?{}", objDecl, makeInitList( objDecl->get_init() ) );
    179                                         Expression * dtor = makeCtorDtorExpr( "^?{}", objDecl, std::list< Expression * >() );
    180 
    181                                         // need to remember init expression, in case no ctors exist
    182                                         // if ctor does exist, want to use ctor expression instead of init
    183                                         // push this decision to the resolver
    184                                         ExprStmt * ctorStmt = new ExprStmt( noLabels, ctor );
    185                                         ExprStmt * dtorStmt = new ExprStmt( noLabels, dtor );
    186                                         objDecl->set_init( new ConstructorInit( new ImplicitCtorDtorStmt( ctorStmt ), new ImplicitCtorDtorStmt( dtorStmt ), objDecl->get_init() ) );
    187                                 }
     214                        // call into genImplicitCall from Autogen.h to generate calls to ctor/dtor
     215                        // for each constructable object
     216                        std::list< Statement * > ctor;
     217                        std::list< Statement * > dtor;
     218
     219                        InitExpander srcParam( objDecl->get_init() );
     220                        InitExpander nullParam( (Initializer *)NULL );
     221                        SymTab::genImplicitCall( srcParam, new VariableExpr( objDecl ), "?{}", back_inserter( ctor ), objDecl );
     222                        SymTab::genImplicitCall( nullParam, new VariableExpr( objDecl ), "^?{}", front_inserter( dtor ), objDecl, false );
     223
     224                        // Currently genImplicitCall produces a single Statement - a CompoundStmt
     225                        // which  wraps everything that needs to happen. As such, it's technically
     226                        // possible to use a Statement ** in the above calls, but this is inherently
     227                        // unsafe, so instead we take the slightly less efficient route, but will be
     228                        // immediately informed if somehow the above assumption is broken. In this case,
     229                        // we could always wrap the list of statements at this point with a CompoundStmt,
     230                        // but it seems reasonable at the moment for this to be done by genImplicitCall
     231                        // itself. It is possible that genImplicitCall produces no statements (e.g. if
     232                        // an array type does not have a dimension). In this case, it's fine to ignore
     233                        // the object for the purposes of construction.
     234                        assert( ctor.size() == dtor.size() && ctor.size() <= 1 );
     235                        if ( ctor.size() == 1 ) {
     236                                // need to remember init expression, in case no ctors exist
     237                                // if ctor does exist, want to use ctor expression instead of init
     238                                // push this decision to the resolver
     239                                assert( dynamic_cast< ImplicitCtorDtorStmt * > ( ctor.front() ) && dynamic_cast< ImplicitCtorDtorStmt * > ( dtor.front() ) );
     240                                objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) );
    188241                        }
    189242                }
     
    193246        DeclarationWithType * CtorDtor::mutate( FunctionDecl *functionDecl ) {
    194247                // parameters should not be constructed and destructed, so don't mutate FunctionType
    195                 bool oldInFunc = inFunction;
    196248                mutateAll( functionDecl->get_oldDecls(), *this );
    197                 inFunction = true;
    198249                functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
    199                 inFunction = oldInFunc;
    200250                return functionDecl;
    201251        }
    202 
    203         // should not traverse into any of these declarations to find objects
    204         // that need to be constructed or destructed
    205         Declaration* CtorDtor::mutate( StructDecl *aggregateDecl ) { return aggregateDecl; }
    206         Declaration* CtorDtor::mutate( UnionDecl *aggregateDecl ) { return aggregateDecl; }
    207         Declaration* CtorDtor::mutate( EnumDecl *aggregateDecl ) { return aggregateDecl; }
    208         Declaration* CtorDtor::mutate( TraitDecl *aggregateDecl ) { return aggregateDecl; }
    209         TypeDecl* CtorDtor::mutate( TypeDecl *typeDecl ) { return typeDecl; }
    210         Declaration* CtorDtor::mutate( TypedefDecl *typeDecl ) { return typeDecl; }
    211         Type* CtorDtor::mutate( FunctionType *funcType ) { return funcType; }
    212 
    213252} // namespace InitTweak
    214253
  • src/InitTweak/InitTweak.cc

    r950f7a7 r7527e63  
     1#include <algorithm>
    12#include "InitTweak.h"
    23#include "SynTree/Visitor.h"
     
    45#include "SynTree/Initializer.h"
    56#include "SynTree/Expression.h"
     7#include "SynTree/Attribute.h"
    68#include "GenPoly/GenPoly.h"
    79
     
    2022                };
    2123
    22                 class InitExpander : public Visitor {
     24                class InitFlattener : public Visitor {
    2325                        public:
    24                         InitExpander() {}
    2526                        virtual void visit( SingleInit * singleInit );
    2627                        virtual void visit( ListInit * listInit );
     
    2829                };
    2930
    30                 void InitExpander::visit( SingleInit * singleInit ) {
     31                void InitFlattener::visit( SingleInit * singleInit ) {
    3132                        argList.push_back( singleInit->get_value()->clone() );
    3233                }
    3334
    34                 void InitExpander::visit( ListInit * listInit ) {
    35                         // xxx - for now, assume no nested list inits
    36                         std::list<Initializer*>::iterator it = listInit->begin_initializers();
    37                         for ( ; it != listInit->end_initializers(); ++it ) {
     35                void InitFlattener::visit( ListInit * listInit ) {
     36                        // flatten nested list inits
     37                        std::list<Initializer*>::iterator it = listInit->begin();
     38                        for ( ; it != listInit->end(); ++it ) {
    3839                                (*it)->accept( *this );
    3940                        }
     
    4243
    4344        std::list< Expression * > makeInitList( Initializer * init ) {
    44                 InitExpander expander;
    45                 maybeAccept( init, expander );
    46                 return expander.argList;
     45                InitFlattener flattener;
     46                maybeAccept( init, flattener );
     47                return flattener.argList;
    4748        }
    4849
     
    5354        }
    5455
     56        class InitExpander::ExpanderImpl {
     57        public:
     58                virtual std::list< Expression * > next( std::list< Expression * > & indices ) = 0;
     59                virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices ) = 0;
     60        };
     61
     62        class InitImpl : public InitExpander::ExpanderImpl {
     63        public:
     64                InitImpl( Initializer * init ) : init( init ) {}
     65
     66                virtual std::list< Expression * > next( std::list< Expression * > & indices ) {
     67                        // this is wrong, but just a placeholder for now
     68                        // if ( ! flattened ) flatten( indices );
     69                        // return ! inits.empty() ? makeInitList( inits.front() ) : std::list< Expression * >();
     70                        return makeInitList( init );
     71                }
     72
     73                virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices );
     74        private:
     75                Initializer * init;
     76        };
     77
     78        class ExprImpl : public InitExpander::ExpanderImpl {
     79        public:
     80                ExprImpl( Expression * expr ) : arg( expr ) {}
     81
     82                virtual std::list< Expression * > next( std::list< Expression * > & indices ) {
     83                        std::list< Expression * > ret;
     84                        Expression * expr = maybeClone( arg );
     85                        if ( expr ) {
     86                                for ( std::list< Expression * >::reverse_iterator it = indices.rbegin(); it != indices.rend(); ++it ) {
     87                                        // go through indices and layer on subscript exprs ?[?]
     88                                        ++it;
     89                                        UntypedExpr * subscriptExpr = new UntypedExpr( new NameExpr( "?[?]") );
     90                                        subscriptExpr->get_args().push_back( expr );
     91                                        subscriptExpr->get_args().push_back( (*it)->clone() );
     92                                        expr = subscriptExpr;
     93                                }
     94                                ret.push_back( expr );
     95                        }
     96                        return ret;
     97                }
     98
     99                virtual Statement * buildListInit( UntypedExpr * callExpr, std::list< Expression * > & indices );
     100        private:
     101                Expression * arg;
     102        };
     103
     104        InitExpander::InitExpander( Initializer * init ) : expander( new InitImpl( init ) ) {}
     105
     106        InitExpander::InitExpander( Expression * expr ) : expander( new ExprImpl( expr ) ) {}
     107
     108        std::list< Expression * > InitExpander::operator*() {
     109                return cur;
     110        }
     111
     112        InitExpander & InitExpander::operator++() {
     113                cur = expander->next( indices );
     114                return *this;
     115        }
     116
     117        // use array indices list to build switch statement
     118        void InitExpander::addArrayIndex( Expression * index, Expression * dimension ) {
     119                indices.push_back( index );
     120                indices.push_back( dimension );
     121        }
     122
     123        void InitExpander::clearArrayIndices() {
     124                indices.clear();
     125        }
     126
     127        namespace {
     128                /// given index i, dimension d, initializer init, and callExpr f, generates
     129                ///   if (i < d) f(..., init)
     130                ///   ++i;
     131                /// so that only elements within the range of the array are constructed
     132                template< typename OutIterator >
     133                void buildCallExpr( UntypedExpr * callExpr, Expression * index, Expression * dimension, Initializer * init, OutIterator out ) {
     134                        UntypedExpr * cond = new UntypedExpr( new NameExpr( "?<?") );
     135                        cond->get_args().push_back( index->clone() );
     136                        cond->get_args().push_back( dimension->clone() );
     137
     138                        std::list< Expression * > args = makeInitList( init );
     139                        callExpr->get_args().splice( callExpr->get_args().end(), args );
     140
     141                        *out++ = new IfStmt( noLabels, cond, new ExprStmt( noLabels, callExpr ), NULL );
     142
     143                        UntypedExpr * increment = new UntypedExpr( new NameExpr( "++?" ) );
     144                        increment->get_args().push_back( new AddressExpr( index->clone() ) );
     145                        *out++ = new ExprStmt( noLabels, increment );
     146                }
     147
     148                template< typename OutIterator >
     149                void build( UntypedExpr * callExpr, InitExpander::IndexList::iterator idx, InitExpander::IndexList::iterator idxEnd, Initializer * init, OutIterator out ) {
     150                        if ( idx == idxEnd ) return;
     151                        Expression * index = *idx++;
     152                        assert( idx != idxEnd );
     153                        Expression * dimension = *idx++;
     154
     155                        // xxx - may want to eventually issue a warning here if we can detect
     156                        // that the number of elements exceeds to dimension of the array
     157                        if ( idx == idxEnd ) {
     158                                if ( ListInit * listInit = dynamic_cast< ListInit * >( init ) ) {
     159                                        for ( Initializer * init : *listInit ) {
     160                                                buildCallExpr( callExpr->clone(), index, dimension, init, out );
     161                                        }
     162                                } else {
     163                                        buildCallExpr( callExpr->clone(), index, dimension, init, out );
     164                                }
     165                        } else {
     166                                std::list< Statement * > branches;
     167
     168                                unsigned long cond = 0;
     169                                ListInit * listInit = dynamic_cast< ListInit * >( init );
     170                                if ( ! listInit ) {
     171                                        // xxx - this shouldn't be an error, but need a way to
     172                                        // terminate without creating output, so should catch this error
     173                                        throw SemanticError( "unbalanced list initializers" );
     174                                }
     175
     176                                static UniqueName targetLabel( "L__autogen__" );
     177                                Label switchLabel( targetLabel.newName(), 0, std::list< Attribute * >{ new Attribute("unused") } );
     178                                for ( Initializer * init : *listInit ) {
     179                                        Expression * condition;
     180                                        // check for designations
     181                                        // if ( init-> ) {
     182                                                condition = new ConstantExpr( Constant::from_ulong( cond ) );
     183                                                ++cond;
     184                                        // } else {
     185                                        //      condition = // ... take designation
     186                                        //      cond = // ... take designation+1
     187                                        // }
     188                                        std::list< Statement * > stmts;
     189                                        build( callExpr, idx, idxEnd, init, back_inserter( stmts ) );
     190                                        stmts.push_back( new BranchStmt( noLabels, switchLabel, BranchStmt::Break ) );
     191                                        CaseStmt * caseStmt = new CaseStmt( noLabels, condition, stmts );
     192                                        branches.push_back( caseStmt );
     193                                }
     194                                *out++ = new SwitchStmt( noLabels, index->clone(), branches );
     195                                *out++ = new NullStmt( std::list<Label>{ switchLabel } );
     196                        }
     197                }
     198        }
     199
     200        // if array came with an initializer list: initialize each element
     201        // may have more initializers than elements in the array - need to check at each index that
     202        // we haven't exceeded size.
     203        // may have fewer initializers than elements in the array - need to default construct
     204        // remaining elements.
     205        // To accomplish this, generate switch statement, consuming all of expander's elements
     206        Statement * InitImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) {
     207                if ( ! init ) return NULL;
     208                CompoundStmt * block = new CompoundStmt( noLabels );
     209                build( dst, indices.begin(), indices.end(), init, back_inserter( block->get_kids() ) );
     210                if ( block->get_kids().empty() ) {
     211                        delete block;
     212                        return NULL;
     213                } else {
     214                        init = NULL; // init was consumed in creating the list init
     215                        return block;
     216                }
     217        }
     218
     219        Statement * ExprImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) {
     220                return NULL;
     221        }
     222
     223        Statement * InitExpander::buildListInit( UntypedExpr * dst ) {
     224                return expander->buildListInit( dst, indices );
     225        }
     226
    55227        bool tryConstruct( ObjectDecl * objDecl ) {
    56228                return ! LinkageSpec::isBuiltin( objDecl->get_linkage() ) &&
    57229                        (objDecl->get_init() == NULL ||
    58230                                ( objDecl->get_init() != NULL && objDecl->get_init()->get_maybeConstructed() )) &&
    59                         ! isDesignated( objDecl->get_init() );
     231                        ! isDesignated( objDecl->get_init() )
     232                        && objDecl->get_storageClass() != DeclarationNode::Extern;
     233        }
     234
     235        class CallFinder : public Visitor {
     236        public:
     237                typedef Visitor Parent;
     238                CallFinder( const std::list< std::string > & names ) : names( names ) {}
     239
     240                virtual void visit( ApplicationExpr * appExpr ) {
     241                        handleCallExpr( appExpr );
     242                }
     243
     244                virtual void visit( UntypedExpr * untypedExpr ) {
     245                        handleCallExpr( untypedExpr );
     246                }
     247
     248                std::list< Expression * > * matches;
     249        private:
     250                const std::list< std::string > names;
     251
     252                template< typename CallExpr >
     253                void handleCallExpr( CallExpr * expr ) {
     254                        Parent::visit( expr );
     255                        std::string fname = getFunctionName( expr );
     256                        if ( std::find( names.begin(), names.end(), fname ) != names.end() ) {
     257                                matches->push_back( expr );
     258                        }
     259                }
     260        };
     261
     262        void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches ) {
     263                static CallFinder finder( std::list< std::string >{ "?{}", "^?{}" } );
     264                finder.matches = &matches;
     265                maybeAccept( stmt, finder );
    60266        }
    61267
    62268        Expression * getCtorDtorCall( Statement * stmt ) {
    63                 if ( stmt == NULL ) return NULL;
    64                 if ( ExprStmt * exprStmt = dynamic_cast< ExprStmt * >( stmt ) ) {
    65                         return exprStmt->get_expr();
    66                 } else if ( CompoundStmt * compoundStmt = dynamic_cast< CompoundStmt * >( stmt ) ) {
    67                         // could also be a compound statement with a loop, in the case of an array
    68                         if( compoundStmt->get_kids().size() == 2 ) {
    69                                 // loop variable and loop
    70                                 ForStmt * forStmt = dynamic_cast< ForStmt * >( compoundStmt->get_kids().back() );
    71                                 assert( forStmt && forStmt->get_body() );
    72                                 return getCtorDtorCall( forStmt->get_body() );
    73                         } else if ( compoundStmt->get_kids().size() == 1 ) {
    74                                 // should be the call statement, but in any case there's only one option
    75                                 return getCtorDtorCall( compoundStmt->get_kids().front() );
    76                         } else {
    77                                 assert( false && "too many statements in compoundStmt for getCtorDtorCall" );
    78                         }
    79                 } if ( ImplicitCtorDtorStmt * impCtorDtorStmt = dynamic_cast< ImplicitCtorDtorStmt * > ( stmt ) ) {
    80                         return getCtorDtorCall( impCtorDtorStmt->get_callStmt() );
    81                 } else {
    82                         // should never get here
    83                         assert( false && "encountered unknown call statement" );
    84                 }
    85         }
    86 
    87         bool isInstrinsicSingleArgCallStmt( Statement * stmt ) {
    88                 Expression * callExpr = getCtorDtorCall( stmt );
    89                 if ( ! callExpr ) return false;
    90                 ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( callExpr );
    91                 assert( appExpr );
    92                 VariableExpr * function = dynamic_cast< VariableExpr * >( appExpr->get_function() );
     269                std::list< Expression * > matches;
     270                collectCtorDtorCalls( stmt, matches );
     271                assert( matches.size() <= 1 );
     272                return matches.size() == 1 ? matches.front() : NULL;
     273        }
     274
     275        namespace {
     276                VariableExpr * getCalledFunction( ApplicationExpr * appExpr ) {
     277                        assert( appExpr );
     278                        // xxx - it's possible this can be other things, e.g. MemberExpr, so this is insufficient
     279                        return dynamic_cast< VariableExpr * >( appExpr->get_function() );
     280                }
     281        }
     282
     283        ApplicationExpr * isIntrinsicCallExpr( Expression * expr ) {
     284                ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr );
     285                if ( ! appExpr ) return NULL;
     286                VariableExpr * function = getCalledFunction( appExpr );
    93287                assert( function );
    94288                // check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor
    95289                // will call all member dtors, and some members may have a user defined dtor.
    96                 FunctionType * funcType = GenPoly::getFunctionType( function->get_var()->get_type() );
    97                 assert( funcType );
    98                 return function->get_var()->get_linkage() == LinkageSpec::Intrinsic && funcType->get_parameters().size() == 1;
     290                return function->get_var()->get_linkage() == LinkageSpec::Intrinsic ? appExpr : NULL;
     291        }
     292
     293        bool isIntrinsicSingleArgCallStmt( Statement * stmt ) {
     294                std::list< Expression * > callExprs;
     295                collectCtorDtorCalls( stmt, callExprs );
     296                // if ( callExprs.empty() ) return false; // xxx - do I still need this check?
     297                return std::all_of( callExprs.begin(), callExprs.end(), []( Expression * callExpr ){
     298                        if ( ApplicationExpr * appExpr = isIntrinsicCallExpr( callExpr ) ) {
     299                                assert( ! appExpr->get_function()->get_results().empty() );
     300                                FunctionType *funcType = GenPoly::getFunctionType( appExpr->get_function()->get_results().front() );
     301                                assert( funcType );
     302                                return funcType->get_parameters().size() == 1;
     303                        }
     304                        return false;
     305                });
    99306        }
    100307
     
    160367                else return NULL;
    161368        }
     369
     370        class ConstExprChecker : public Visitor {
     371        public:
     372                ConstExprChecker() : isConstExpr( true ) {}
     373
     374                virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }
     375                virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }
     376                virtual void visit( NameExpr *nameExpr ) { isConstExpr = false; }
     377                virtual void visit( CastExpr *castExpr ) { isConstExpr = false; }
     378                virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }
     379                virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; }
     380                virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; }
     381                virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; }
     382                virtual void visit( ConstantExpr *constantExpr ) { /* bottom out */ }
     383                // these might be okay?
     384                // virtual void visit( SizeofExpr *sizeofExpr );
     385                // virtual void visit( AlignofExpr *alignofExpr );
     386                // virtual void visit( UntypedOffsetofExpr *offsetofExpr );
     387                // virtual void visit( OffsetofExpr *offsetofExpr );
     388                // virtual void visit( OffsetPackExpr *offsetPackExpr );
     389                // virtual void visit( AttrExpr *attrExpr );
     390                // virtual void visit( CommaExpr *commaExpr );
     391                // virtual void visit( LogicalExpr *logicalExpr );
     392                // virtual void visit( ConditionalExpr *conditionalExpr );
     393                virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
     394                virtual void visit( SolvedTupleExpr *tupleExpr ) { isConstExpr = false; }
     395                virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; }
     396                virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; }
     397                virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
     398                virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
     399
     400                bool isConstExpr;
     401        };
     402
     403        bool isConstExpr( Expression * expr ) {
     404                if ( expr ) {
     405                        ConstExprChecker checker;
     406                        expr->accept( checker );
     407                        return checker.isConstExpr;
     408                }
     409                return true;
     410        }
     411
     412        bool isConstExpr( Initializer * init ) {
     413                if ( init ) {
     414                        ConstExprChecker checker;
     415                        init->accept( checker );
     416                        return checker.isConstExpr;
     417                } // if
     418                // for all intents and purposes, no initializer means const expr
     419                return true;
     420        }
     421
    162422}
  • src/InitTweak/InitTweak.h

    r950f7a7 r7527e63  
    2626// helper functions for initialization
    2727namespace InitTweak {
    28   /// transform Initializer into an argument list that can be passed to a call expression
    29   std::list< Expression * > makeInitList( Initializer * init );
     28        /// transform Initializer into an argument list that can be passed to a call expression
     29        std::list< Expression * > makeInitList( Initializer * init );
    3030
    31   /// True if the resolver should try to construct objDecl
    32   bool tryConstruct( ObjectDecl * objDecl );
     31        /// True if the resolver should try to construct objDecl
     32        bool tryConstruct( ObjectDecl * objDecl );
    3333
    34   /// True if the Initializer contains designations
    35   bool isDesignated( Initializer * init );
     34        /// True if the Initializer contains designations
     35        bool isDesignated( Initializer * init );
    3636
    37   /// True if stmt is a call statement where the function called is intrinsic and takes one parameter.
    38   /// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
    39   /// Currently has assertions that make it less than fully general.
    40   bool isInstrinsicSingleArgCallStmt( Statement * expr );
     37  /// Non-Null if expr is a call expression whose target function is intrinsic
     38  ApplicationExpr * isIntrinsicCallExpr( Expression * expr );
    4139
    42   /// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call
    43   Expression * getCtorDtorCall( Statement * stmt );
     40        /// True if stmt is a call statement where the function called is intrinsic and takes one parameter.
     41        /// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
     42        /// Currently has assertions that make it less than fully general.
     43        bool isIntrinsicSingleArgCallStmt( Statement * expr );
    4444
    45   /// returns the name of the function being called
    46   std::string getFunctionName( Expression * expr );
     45        /// get all Ctor/Dtor call expressions from a Statement
     46        void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches );
    4747
    48   /// returns the argument to a call expression in position N indexed from 0
    49   Expression *& getCallArg( Expression * callExpr, unsigned int pos );
     48        /// get the Ctor/Dtor call expression from a Statement that looks like a generated ctor/dtor call
     49        Expression * getCtorDtorCall( Statement * stmt );
    5050
    51   /// returns the base type of a PointerType or ArrayType, else returns NULL
    52   Type * getPointerBase( Type * );
     51        /// returns the name of the function being called
     52        std::string getFunctionName( Expression * expr );
    5353
    54   /// returns the argument if it is a PointerType or ArrayType, else returns NULL
    55   Type * isPointerType( Type * );
     54        /// returns the argument to a call expression in position N indexed from 0
     55        Expression *& getCallArg( Expression * callExpr, unsigned int pos );
     56
     57        /// returns the base type of a PointerType or ArrayType, else returns NULL
     58        Type * getPointerBase( Type * );
     59
     60        /// returns the argument if it is a PointerType or ArrayType, else returns NULL
     61        Type * isPointerType( Type * );
     62
     63        /// returns true if expr is trivially a compile-time constant
     64        bool isConstExpr( Expression * expr );
     65        bool isConstExpr( Initializer * init );
     66
     67        class InitExpander {
     68        public:
     69                // expand by stepping through init to get each list of arguments
     70                InitExpander( Initializer * init );
     71
     72                // always expand to expr
     73                InitExpander( Expression * expr );
     74
     75                // iterator-like interface
     76                std::list< Expression * > operator*();
     77                InitExpander & operator++();
     78
     79                // builds statement which has the same semantics as a C-style list initializer
     80                // (for array initializers) using callExpr as the base expression to perform initialization
     81                Statement * buildListInit( UntypedExpr * callExpr );
     82                void addArrayIndex( Expression * index, Expression * dimension );
     83                void clearArrayIndices();
     84
     85                class ExpanderImpl;
     86        private:
     87                std::shared_ptr< ExpanderImpl > expander;
     88                std::list< Expression * > cur;
     89
     90                // invariant: list of size 2N (elements come in pairs [index, dimension])
     91                typedef std::list< Expression * > IndexList;
     92                IndexList indices;
     93        };
    5694} // namespace
    5795
  • src/Makefile.in

    r950f7a7 r7527e63  
    108108        ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) \
    109109        ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT) \
    110         ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT) \
    111110        ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) \
    112111        ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \
     
    122121        GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \
    123122        GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \
     123        GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \
    124124        InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT) \
    125125        InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT) \
     
    372372        Common/SemanticError.cc Common/UniqueName.cc \
    373373        ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \
    374         ControlStruct/MLEMutator.cc ControlStruct/CaseRangeMutator.cc \
    375         ControlStruct/Mutate.cc ControlStruct/ForExprMutator.cc \
     374        ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \
     375        ControlStruct/ForExprMutator.cc \
    376376        ControlStruct/LabelTypeChecker.cc Designators/Processor.cc \
    377377        GenPoly/Box.cc GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \
    378378        GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
    379379        GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
    380         GenPoly/DeclMutator.cc InitTweak/GenInit.cc \
    381         InitTweak/FixInit.cc InitTweak/FixGlobalInit.cc \
    382         InitTweak/InitTweak.cc Parser/parser.yy Parser/lex.ll \
    383         Parser/TypedefTable.cc Parser/ParseNode.cc \
    384         Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
    385         Parser/StatementNode.cc Parser/InitializerNode.cc \
    386         Parser/TypeData.cc Parser/LinkageSpec.cc \
    387         Parser/parseutility.cc Parser/Parser.cc \
     380        GenPoly/DeclMutator.cc GenPoly/InstantiateGeneric.cc \
     381        InitTweak/GenInit.cc InitTweak/FixInit.cc \
     382        InitTweak/FixGlobalInit.cc InitTweak/InitTweak.cc \
     383        Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \
     384        Parser/ParseNode.cc Parser/DeclarationNode.cc \
     385        Parser/ExpressionNode.cc Parser/StatementNode.cc \
     386        Parser/InitializerNode.cc Parser/TypeData.cc \
     387        Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \
    388388        ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
    389389        ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
     
    542542        ControlStruct/$(DEPDIR)/$(am__dirstamp)
    543543ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT):  \
    544         ControlStruct/$(am__dirstamp) \
    545         ControlStruct/$(DEPDIR)/$(am__dirstamp)
    546 ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT):  \
    547544        ControlStruct/$(am__dirstamp) \
    548545        ControlStruct/$(DEPDIR)/$(am__dirstamp)
     
    589586GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \
    590587        GenPoly/$(DEPDIR)/$(am__dirstamp)
     588GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT):  \
     589        GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
    591590InitTweak/$(am__dirstamp):
    592591        @$(MKDIR_P) InitTweak
     
    820819        -rm -f Common/driver_cfa_cpp-SemanticError.$(OBJEXT)
    821820        -rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT)
    822         -rm -f ControlStruct/driver_cfa_cpp-CaseRangeMutator.$(OBJEXT)
    823821        -rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT)
    824822        -rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT)
     
    833831        -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT)
    834832        -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT)
     833        -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)
    835834        -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT)
    836835        -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT)
     
    930929@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-SemanticError.Po@am__quote@
    931930@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@
    932 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po@am__quote@
    933931@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Po@am__quote@
    934932@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelFixer.Po@am__quote@
     
    943941@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@
    944942@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@
     943@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@
    945944@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@
    946945@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@
     
    12121211@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-MLEMutator.obj `if test -f 'ControlStruct/MLEMutator.cc'; then $(CYGPATH_W) 'ControlStruct/MLEMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/MLEMutator.cc'; fi`
    12131212
    1214 ControlStruct/driver_cfa_cpp-CaseRangeMutator.o: ControlStruct/CaseRangeMutator.cc
    1215 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-CaseRangeMutator.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.o `test -f 'ControlStruct/CaseRangeMutator.cc' || echo '$(srcdir)/'`ControlStruct/CaseRangeMutator.cc
    1216 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po
    1217 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='ControlStruct/CaseRangeMutator.cc' object='ControlStruct/driver_cfa_cpp-CaseRangeMutator.o' libtool=no @AMDEPBACKSLASH@
    1218 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1219 @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-CaseRangeMutator.o `test -f 'ControlStruct/CaseRangeMutator.cc' || echo '$(srcdir)/'`ControlStruct/CaseRangeMutator.cc
    1220 
    1221 ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj: ControlStruct/CaseRangeMutator.cc
    1222 @am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo -c -o ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj `if test -f 'ControlStruct/CaseRangeMutator.cc'; then $(CYGPATH_W) 'ControlStruct/CaseRangeMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/CaseRangeMutator.cc'; fi`
    1223 @am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-CaseRangeMutator.Po
    1224 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='ControlStruct/CaseRangeMutator.cc' object='ControlStruct/driver_cfa_cpp-CaseRangeMutator.obj' libtool=no @AMDEPBACKSLASH@
    1225 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    1226 @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-CaseRangeMutator.obj `if test -f 'ControlStruct/CaseRangeMutator.cc'; then $(CYGPATH_W) 'ControlStruct/CaseRangeMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/CaseRangeMutator.cc'; fi`
    1227 
    12281213ControlStruct/driver_cfa_cpp-Mutate.o: ControlStruct/Mutate.cc
    12291214@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-Mutate.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-Mutate.Tpo -c -o ControlStruct/driver_cfa_cpp-Mutate.o `test -f 'ControlStruct/Mutate.cc' || echo '$(srcdir)/'`ControlStruct/Mutate.cc
     
    14071392@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    14081393@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-DeclMutator.obj `if test -f 'GenPoly/DeclMutator.cc'; then $(CYGPATH_W) 'GenPoly/DeclMutator.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/DeclMutator.cc'; fi`
     1394
     1395GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc
     1396@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
     1397@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
     1398@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@
     1399@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1400@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
     1401
     1402GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc
     1403@am__fastdepCXX_TRUE@   $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
     1404@am__fastdepCXX_TRUE@   $(AM_V_at)$(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
     1405@AMDEP_TRUE@@am__fastdepCXX_FALSE@      $(AM_V_CXX)source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@
     1406@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1407@am__fastdepCXX_FALSE@  $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
    14091408
    14101409InitTweak/driver_cfa_cpp-GenInit.o: InitTweak/GenInit.cc
  • src/Parser/DeclarationNode.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 20:49:31 2016
    13 // Update Count     : 164
     12// Last Modified On : Mon Aug 15 20:48:55 2016
     13// Update Count     : 178
    1414//
    1515
     
    4949        newnode->name = name;
    5050        newnode->storageClasses = storageClasses;
    51         newnode->bitfieldWidth = maybeClone( bitfieldWidth );
     51        newnode->bitfieldWidth = bitfieldWidth;
    5252        newnode->hasEllipsis = hasEllipsis;
    5353        newnode->initializer = initializer;
    54         newnode->next = maybeClone( next );
     54        newnode->set_next( maybeClone( get_next() ) );
    5555        newnode->linkage = linkage;
    5656        return newnode;
     
    283283        newnode->type->array->dimension = size;
    284284        newnode->type->array->isStatic = isStatic;
    285         if ( newnode->type->array->dimension == 0 || dynamic_cast<ConstantNode *>( newnode->type->array->dimension ) ) {
     285        if ( newnode->type->array->dimension == 0 || dynamic_cast< ConstantExpr * >( newnode->type->array->dimension->build() ) ) {
    286286                newnode->type->array->isVarLen = false;
    287287        } else {
     
    469469
    470470                // there may be typedefs chained onto the type
    471                 if ( o->get_link() ) {
    472                         set_link( o->get_link()->clone() );
     471                if ( o->get_next() ) {
     472                        set_last( o->get_next()->clone() );
    473473                } // if
    474474        } // if
     
    756756DeclarationNode *DeclarationNode::appendList( DeclarationNode *node ) {
    757757        if ( node != 0 ) {
    758                 set_link( node );
     758                set_last( node );
    759759        } // if
    760760        return this;
     
    775775void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList ) {
    776776        SemanticError errors;
    777         std::back_insert_iterator< std::list< Declaration *> > out( outputList );
     777        std::back_insert_iterator< std::list< Declaration * > > out( outputList );
    778778        const DeclarationNode *cur = firstNode;
    779779        while ( cur ) {
     
    793793                        errors.append( e );
    794794                } // try
    795                 cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
     795                cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
    796796        } // while
    797797        if ( ! errors.isEmpty() ) {
     
    800800}
    801801
    802 void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType *> &outputList ) {
     802void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList ) {
    803803        SemanticError errors;
    804         std::back_insert_iterator< std::list< DeclarationWithType *> > out( outputList );
     804        std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList );
    805805        const DeclarationNode *cur = firstNode;
    806806        while ( cur ) {
     
    816816                        Declaration *decl = cur->build();
    817817                        if ( decl ) {
    818                                 if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType *>( decl ) ) {
     818                                if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( decl ) ) {
    819819                                        *out++ = dwt;
    820                                 } else if ( StructDecl *agg = dynamic_cast< StructDecl *>( decl ) ) {
     820                                } else if ( StructDecl *agg = dynamic_cast< StructDecl * >( decl ) ) {
    821821                                        StructInstType *inst = new StructInstType( Type::Qualifiers(), agg->get_name() );
    822822                                        *out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
    823823                                        delete agg;
    824                                 } else if ( UnionDecl *agg = dynamic_cast< UnionDecl *>( decl ) ) {
     824                                } else if ( UnionDecl *agg = dynamic_cast< UnionDecl * >( decl ) ) {
    825825                                        UnionInstType *inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
    826826                                        *out++ = new ObjectDecl( "", DeclarationNode::NoStorageClass, linkage, 0, inst, 0 );
     
    830830                        errors.append( e );
    831831                } // try
    832                 cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
     832                cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
    833833        } // while
    834834        if ( ! errors.isEmpty() ) {
     
    837837}
    838838
    839 void buildTypeList( const DeclarationNode *firstNode, std::list< Type *> &outputList ) {
     839void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList ) {
    840840        SemanticError errors;
    841         std::back_insert_iterator< std::list< Type *> > out( outputList );
     841        std::back_insert_iterator< std::list< Type * > > out( outputList );
    842842        const DeclarationNode *cur = firstNode;
    843843        while ( cur ) {
     
    847847                        errors.append( e );
    848848                } // try
    849                 cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
     849                cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
    850850        } // while
    851851        if ( ! errors.isEmpty() ) {
  • src/Parser/ExpressionNode.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul  5 13:41:55 2016
    13 // Update Count     : 320
     12// Last Modified On : Tue Aug 16 00:09:20 2016
     13// Update Count     : 495
    1414//
    1515
    1616#include <cassert>
    1717#include <cctype>
     18#include <climits>
     19#include <cstdio>
    1820#include <algorithm>
    1921#include <sstream>
    20 #include <cstdio>
    2122
    2223#include "ParseNode.h"
     
    3132using namespace std;
    3233
    33 ExpressionNode::ExpressionNode() : ParseNode() {}
    34 
    35 ExpressionNode::ExpressionNode( const string *name ) : ParseNode( name ) {}
    36 
    37 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
    38         if ( other.argName ) {
    39                 argName = other.argName->clone();
    40         } else {
    41                 argName = 0;
    42         } // if
    43 }
    44 
    45 ExpressionNode * ExpressionNode::set_argName( const std::string *aName ) {
    46         argName = new VarRefNode( aName );
    47         return this;
    48 }
    49 
    50 ExpressionNode * ExpressionNode::set_argName( ExpressionNode *aDesignator ) {
    51         argName = aDesignator;
    52         return this;
    53 }
    54 
    55 void ExpressionNode::printDesignation( std::ostream &os, int indent ) const {
    56         if ( argName ) {
    57                 os << string( indent, ' ' ) << "(designated by:  ";
    58                 argName->printOneLine( os, indent );
    59                 os << ")" << std::endl;
    60         } // if
    61 }
     34ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.get_name() ), extension( other.extension ) {}
    6235
    6336//##############################################################################
    6437
    65 NullExprNode::NullExprNode() {}
    66 
    67 NullExprNode *NullExprNode::clone() const {
    68         return new NullExprNode();
    69 }
    70 
    71 void NullExprNode::print( std::ostream & os, int indent ) const {
    72         printDesignation( os );
    73         os << "null expression";
    74 }
    75 
    76 void NullExprNode::printOneLine( std::ostream & os, int indent ) const {
    77         printDesignation( os );
    78         os << "null";
    79 }
    80 
    81 Expression *NullExprNode::build() const {
    82         return 0;
    83 }
    84 
    85 CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ) {
    86         return new CommaExprNode( this, exp );
    87 }
    88 
    89 //##############################################################################
    90 
    91 ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) {
    92 } // ConstantNode::ConstantNode
    93 
    94 ConstantNode *ConstantNode::appendstr( const std::string *newValue ) {
    95         assert( newValue != 0 );
    96 
    97         string value = expr->get_constant()->get_value();
    98 
    99         // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
    100         value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) );
    101         expr->get_constant()->set_value( value );
    102 
    103         delete newValue;                                                                        // allocated by lexer
    104         return this;
    105 }
    106 
    107 void ConstantNode::printOneLine( std::ostream &os, int indent ) const {
    108         // os << string( indent, ' ' );
    109         // printDesignation( os );
    110 
    111         // switch ( type ) {
    112         //   case Integer:
    113         //   case Float:
    114         //      os << value ;
    115         //      break;
    116         //   case Character:
    117         //      os << "'" << value << "'";
    118         //      break;
    119         //   case String:
    120         //      os << '"' << value << '"';
    121         //      break;
    122         // } // switch
    123 
    124         // os << ' ';
    125 }
    126 
    127 void ConstantNode::print( std::ostream &os, int indent ) const {
    128         printOneLine( os, indent );
    129         os << endl;
    130 }
    131 
    132 Expression *ConstantNode::build() const {
    133         return expr->clone();
    134 }
    135 
    136 //##############################################################################
    137 
    138 VarRefNode::VarRefNode() : isLabel( false ) {}
    139 
    140 VarRefNode::VarRefNode( const string *name_, bool labelp ) : ExpressionNode( name_ ), isLabel( labelp ) {}
    141 
    142 VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
    143 }
    144 
    145 Expression *VarRefNode::build() const {
    146         return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
    147 }
    148 
    149 void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
    150         printDesignation( os );
    151         os << get_name() << ' ';
    152 }
    153 
    154 void VarRefNode::print( std::ostream &os, int indent ) const {
    155         printDesignation( os );
    156         os << string( indent, ' ' ) << "Referencing: ";
    157         os << "Variable: " << get_name();
    158         os << endl;
    159 }
    160 
    161 //##############################################################################
    162 
    163 DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex ) : isArrayIndex( isArrayIndex ) {
    164         set_argName( expr );
    165         assert( get_argName() );
    166 
    167         if ( ! isArrayIndex ) {
    168                 if ( VarRefNode * var = dynamic_cast< VarRefNode * >( expr ) ) {
    169 
    170                         stringstream ss( var->get_name() );
    171                         double value;
    172                         if ( ss >> value ) {
    173                                 // this is a floating point constant. It MUST be
    174                                 // ".0" or ".1", otherwise the program is invalid
    175                                 if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
    176                                         throw SemanticError( "invalid designator name: " + var->get_name() );
    177                                 } // if
    178                                 var->set_name( var->get_name().substr(1) );
     38// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
     39//
     40//              prefix action constant action suffix
     41//
     42// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
     43//
     44//              constant BEGIN CONT ...
     45//              <CONT>(...)? BEGIN 0 ... // possible empty suffix
     46//
     47// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
     48// type.
     49
     50static Type::Qualifiers emptyQualifiers;                                // no qualifiers on constants
     51
     52static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
     53static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
     54static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
     55static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
     56static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
     57static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
     58
     59Expression *build_constantInteger( std::string & str ) {
     60        static const BasicType::Kind kind[2][3] = {
     61                { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
     62                { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
     63        };
     64        bool dec = true, Unsigned = false;                                      // decimal, unsigned constant
     65        int size;                                                                                       // 0 => int, 1 => long, 2 => long long
     66        unsigned long long v;                                                           // converted integral value
     67        size_t last = str.length() - 1;                                         // last character of constant
     68
     69        if ( str[0] == '0' ) {                                                          // octal/hex constant ?
     70                dec = false;
     71                if ( last != 0 && checkX( str[1] ) ) {                  // hex constant ?
     72                        sscanf( (char *)str.c_str(), "%llx", &v );
     73                        //printf( "%llx %llu\n", v, v );
     74                } else {                                                                                // octal constant
     75                        sscanf( (char *)str.c_str(), "%llo", &v );
     76                        //printf( "%llo %llu\n", v, v );
     77                } // if
     78        } else {                                                                                        // decimal constant ?
     79                sscanf( (char *)str.c_str(), "%llu", &v );
     80                //printf( "%llu %llu\n", v, v );
     81        } // if
     82
     83        if ( v <= INT_MAX ) {                                                           // signed int
     84                size = 0;
     85        } else if ( v <= UINT_MAX && ! dec ) {                          // unsigned int
     86                size = 0;
     87                Unsigned = true;                                                                // unsigned
     88        } else if ( v <= LONG_MAX ) {                                           // signed long int
     89                size = 1;
     90        } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
     91                size = 1;
     92                Unsigned = true;                                                                // unsigned long int
     93        } else if ( v <= LLONG_MAX ) {                                          // signed long long int
     94                size = 2;
     95        } else {                                                                                        // unsigned long long int
     96                size = 2;
     97                Unsigned = true;                                                                // unsigned long long int
     98        } // if
     99
     100        if ( checkU( str[last] ) ) {                                            // suffix 'u' ?
     101                Unsigned = true;
     102                if ( last > 0 && checkL( str[last - 1] ) ) {    // suffix 'l' ?
     103                        size = 1;
     104                        if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
     105                                size = 2;
    179106                        } // if
    180107                } // if
    181         } // if
    182 }
    183 
    184 DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {
    185 }
    186 
    187 class DesignatorFixer : public Mutator {
    188 public:
    189         virtual Expression* mutate( NameExpr *nameExpr ) {
    190                 if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
    191                         Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
    192                         delete nameExpr;
    193                         return new ConstantExpr( val );
    194                 }
    195                 return nameExpr;
    196         }
    197 };
    198 
    199 Expression *DesignatorNode::build() const {
    200         Expression * ret = maybeBuild<Expression>(get_argName());
    201 
    202         if ( isArrayIndex ) {
    203                 // need to traverse entire structure and change any instances of 0 or 1 to
    204                 // ConstantExpr
    205                 DesignatorFixer fixer;
    206                 ret = ret->acceptMutator( fixer );
    207         } // if
    208 
    209         return ret;
    210 }
    211 
    212 void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
    213         if ( get_argName() ) {
    214                 if ( isArrayIndex ) {
    215                         os << "[";
    216                         get_argName()->printOneLine( os, indent );
    217                         os << "]";
     108        } else if ( checkL( str[ last ] ) ) {                           // suffix 'l' ?
     109                size = 1;
     110                if ( last > 0 && checkL( str[last - 1] ) ) {    // suffix 'll' ?
     111                        size = 2;
     112                        if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
     113                                Unsigned = true;
     114                        } // if
    218115                } else {
    219                         os << ".";
    220                         get_argName()->printOneLine( os, indent );
    221                 }
    222         } // if
    223 }
    224 
    225 void DesignatorNode::print( std::ostream &os, int indent ) const {
    226         if ( get_argName() ) {
    227                 if ( isArrayIndex ) {
    228                         os << "[";
    229                         get_argName()->print( os, indent );
    230                         os << "]";
    231                 } else {
    232                         os << ".";
    233                         get_argName()->print( os, indent );
    234                 }
    235         } // if
    236 }
    237 
    238 //##############################################################################
    239 
    240 static const char *opName[] = {
    241         "TupleC", "Comma", "TupleFieldSel", // "TuplePFieldSel", // n-adic
    242         // triadic
    243         "Cond", "NCond",
     116                        if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
     117                                Unsigned = true;
     118                        } // if
     119                } // if
     120        } // if
     121
     122        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) );
     123} // build_constantInteger
     124
     125Expression *build_constantFloat( std::string & str ) {
     126        static const BasicType::Kind kind[2][3] = {
     127                { BasicType::Float, BasicType::Double, BasicType::LongDouble },
     128                { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
     129        };
     130
     131        bool complx = false;                                                            // real, complex
     132        int size = 1;                                                                           // 0 => float, 1 => double (default), 2 => long double
     133        // floating-point constant has minimum of 2 characters: 1. or .1
     134        size_t last = str.length() - 1;
     135
     136        if ( checkI( str[last] ) ) {                                            // imaginary ?
     137                complx = true;
     138                last -= 1;                                                                              // backup one character
     139        } // if
     140
     141        if ( checkF( str[last] ) ) {                                            // float ?
     142                size = 0;
     143        } else if ( checkD( str[last] ) ) {                                     // double ?
     144                size = 1;
     145        } else if ( checkL( str[last] ) ) {                                     // long double ?
     146                size = 2;
     147        } // if
     148        if ( ! complx && checkI( str[last - 1] ) ) {            // imaginary ?
     149                complx = true;
     150        } // if
     151
     152        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) );
     153} // build_constantFloat
     154
     155Expression *build_constantChar( std::string & str ) {
     156        return new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) );
     157} // build_constantChar
     158
     159ConstantExpr *build_constantStr( std::string & str ) {
     160        // string should probably be a primitive type
     161        ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
     162                                new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
     163                                                                                        toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
     164                                                                   false, false );
     165        return new ConstantExpr( Constant( at, str ) );
     166} // build_constantStr
     167
     168NameExpr * build_varref( const string *name, bool labelp ) {
     169        return new NameExpr( *name, nullptr );
     170}
     171
     172static const char *OperName[] = {
    244173        // diadic
    245         "SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
     174        "SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
    246175        "?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
    247176        "?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
    248         "?[?]", "FieldSel", "PFieldSel", "Range",
     177        "?[?]", "...",
    249178        // monadic
    250179        "+?", "-?", "AddressOf", "*?", "!?", "~?", "++?", "?++", "--?", "?--", "&&"
    251180};
    252181
    253 OperatorNode::OperatorNode( Type t ) : type( t ) {}
    254 
    255 OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) {
    256 }
    257 
    258 OperatorNode::~OperatorNode() {}
    259 
    260 OperatorNode::Type OperatorNode::get_type( void ) const{
    261         return type;
    262 }
    263 
    264 void OperatorNode::printOneLine( std::ostream &os, int indent ) const {
    265         printDesignation( os );
    266         os << opName[ type ] << ' ';
    267 }
    268 
    269 void OperatorNode::print( std::ostream &os, int indent ) const{
    270         printDesignation( os );
    271         os << string( indent, ' ' ) << "Operator: " << opName[type] << endl;
    272         return;
    273 }
    274 
    275 const char *OperatorNode::get_typename( void ) const{
    276         return opName[ type ];
    277 }
    278 
    279 //##############################################################################
    280 
    281 CompositeExprNode::CompositeExprNode() : ExpressionNode(), function( 0 ), arguments( 0 ) {
    282 }
    283 
    284 CompositeExprNode::CompositeExprNode( const string *name_ ) : ExpressionNode( name_ ), function( 0 ), arguments( 0 ) {
    285 }
    286 
    287 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ):
    288         function( f ), arguments( args ) {
    289 }
    290 
    291 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2):
    292         function( f ), arguments( arg1 ) {
    293         arguments->set_link( arg2 );
    294 }
    295 
    296 CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) {
    297         ParseNode *cur = other.arguments;
    298         while ( cur ) {
    299                 if ( arguments ) {
    300                         arguments->set_link( cur->clone() );
    301                 } else {
    302                         arguments = ( ExpressionNode*)cur->clone();
    303                 } // if
    304                 cur = cur->get_link();
    305         }
    306 }
    307 
    308 CompositeExprNode::~CompositeExprNode() {
    309         delete function;
    310         delete arguments;
    311 }
    312 
    313 #include "Common/utility.h"
    314 
    315 Expression *CompositeExprNode::build() const {
    316         OperatorNode *op;
    317         std::list<Expression *> args;
    318 
    319         buildList( get_args(), args );
    320 
    321         if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator
    322                 return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() ));
    323         } // if
    324 
    325         switch ( op->get_type()) {
    326           case OperatorNode::Incr:
    327           case OperatorNode::Decr:
    328           case OperatorNode::IncrPost:
    329           case OperatorNode::DecrPost:
    330           case OperatorNode::Assign:
    331           case OperatorNode::MulAssn:
    332           case OperatorNode::DivAssn:
    333           case OperatorNode::ModAssn:
    334           case OperatorNode::PlusAssn:
    335           case OperatorNode::MinusAssn:
    336           case OperatorNode::LSAssn:
    337           case OperatorNode::RSAssn:
    338           case OperatorNode::AndAssn:
    339           case OperatorNode::ERAssn:
    340           case OperatorNode::OrAssn:
    341                 // the rewrite rules for these expressions specify that the first argument has its address taken
    342                 assert( ! args.empty() );
    343                 args.front() = new AddressExpr( args.front() );
    344                 break;
    345           default:              // do nothing
    346                 ;
    347         } // switch
    348 
    349         switch ( op->get_type() ) {
    350           case OperatorNode::Incr:
    351           case OperatorNode::Decr:
    352           case OperatorNode::IncrPost:
    353           case OperatorNode::DecrPost:
    354           case OperatorNode::Assign:
    355           case OperatorNode::MulAssn:
    356           case OperatorNode::DivAssn:
    357           case OperatorNode::ModAssn:
    358           case OperatorNode::PlusAssn:
    359           case OperatorNode::MinusAssn:
    360           case OperatorNode::LSAssn:
    361           case OperatorNode::RSAssn:
    362           case OperatorNode::AndAssn:
    363           case OperatorNode::ERAssn:
    364           case OperatorNode::OrAssn:
    365           case OperatorNode::Plus:
    366           case OperatorNode::Minus:
    367           case OperatorNode::Mul:
    368           case OperatorNode::Div:
    369           case OperatorNode::Mod:
    370           case OperatorNode::BitOr:
    371           case OperatorNode::BitAnd:
    372           case OperatorNode::Xor:
    373           case OperatorNode::LShift:
    374           case OperatorNode::RShift:
    375           case OperatorNode::LThan:
    376           case OperatorNode::GThan:
    377           case OperatorNode::LEThan:
    378           case OperatorNode::GEThan:
    379           case OperatorNode::Eq:
    380           case OperatorNode::Neq:
    381           case OperatorNode::Index:
    382           case OperatorNode::Range:
    383           case OperatorNode::UnPlus:
    384           case OperatorNode::UnMinus:
    385           case OperatorNode::PointTo:
    386           case OperatorNode::Neg:
    387           case OperatorNode::BitNeg:
    388           case OperatorNode::LabelAddress:
    389                 return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args );
    390           case OperatorNode::AddressOf:
    391                 assert( args.size() == 1 );
    392                 assert( args.front() );
    393 
    394                 return new AddressExpr( args.front() );
    395           case OperatorNode::Cast:
    396                 {
    397                         TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args());
    398                         assert( arg );
    399 
    400                         DeclarationNode *decl_node = arg->get_decl();
    401                         ExpressionNode *expr_node = dynamic_cast<ExpressionNode *>( arg->get_link());
    402 
    403                         Type *targetType = decl_node->buildType();
    404                         if ( dynamic_cast< VoidType* >( targetType ) ) {
    405                                 delete targetType;
    406                                 return new CastExpr( maybeBuild<Expression>(expr_node), maybeBuild< Expression >( get_argName() ) );
    407                         } else {
    408                                 return new CastExpr( maybeBuild<Expression>(expr_node),targetType, maybeBuild< Expression >( get_argName() ) );
    409                         } // if
    410                 }
    411           case OperatorNode::FieldSel:
    412                 {
    413                         assert( args.size() == 2 );
    414 
    415                         NameExpr *member = dynamic_cast<NameExpr *>( args.back());
    416                         // TupleExpr *memberTup = dynamic_cast<TupleExpr *>( args.back());
    417 
    418                         if ( member != 0 ) {
    419                                 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), args.front());
    420                                 delete member;
    421                                 return ret;
    422                                 /* else if ( memberTup != 0 )
    423                                    {
    424                                    UntypedMemberExpr *ret = new UntypedMemberExpr( memberTup->get_name(), args.front());
    425                                    delete member;
    426                                    return ret;
    427                                    } */
    428                         } else
    429                                 assert( false );
    430                 }
    431           case OperatorNode::PFieldSel:
    432                 {
    433                         assert( args.size() == 2 );
    434 
    435                         NameExpr *member = dynamic_cast<NameExpr *>( args.back());  // modify for Tuples   xxx
    436                         assert( member != 0 );
    437 
    438                         UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    439                         deref->get_args().push_back( args.front() );
    440 
    441                         UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
    442                         delete member;
    443                         return ret;
    444                 }
    445           case OperatorNode::SizeOf:
    446                 {
    447                         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
    448                                 return new SizeofExpr( arg->get_decl()->buildType());
    449                         } else {
    450                                 return new SizeofExpr( args.front());
    451                         } // if
    452                 }
    453           case OperatorNode::AlignOf:
    454                 {
    455                         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
    456                                 return new AlignofExpr( arg->get_decl()->buildType());
    457                         } else {
    458                                 return new AlignofExpr( args.front());
    459                         } // if
    460                 }
    461           case OperatorNode::OffsetOf:
    462                 {
    463                         assert( args.size() == 2 );
    464 
    465                         if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args() ) ) {
    466                                 NameExpr *member = dynamic_cast<NameExpr *>( args.back() );
    467                                 assert( member != 0 );
    468 
    469                                 return new UntypedOffsetofExpr( arg->get_decl()->buildType(), member->get_name() );
    470                         } else assert( false );
    471                 }
    472           case OperatorNode::Attr:
    473                 {
    474                         VarRefNode *var = dynamic_cast<VarRefNode *>( get_args());
    475                         assert( var );
    476                         if ( ! get_args()->get_link() ) {
    477                                 return new AttrExpr( maybeBuild<Expression>(var), ( Expression*)0);
    478                         } else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link()) ) {
    479                                 return new AttrExpr( maybeBuild<Expression>(var), arg->get_decl()->buildType());
    480                         } else {
    481                                 return new AttrExpr( maybeBuild<Expression>(var), args.back());
    482                         } // if
    483                 }
    484           case OperatorNode::Or:
    485           case OperatorNode::And:
    486                 assert( args.size() == 2);
    487                 return new LogicalExpr( notZeroExpr( args.front() ), notZeroExpr( args.back() ), ( op->get_type() == OperatorNode::And ) );
    488           case OperatorNode::Cond:
    489                 {
    490                         assert( args.size() == 3);
    491                         std::list< Expression * >::const_iterator i = args.begin();
    492                         Expression *arg1 = notZeroExpr( *i++ );
    493                         Expression *arg2 = *i++;
    494                         Expression *arg3 = *i++;
    495                         return new ConditionalExpr( arg1, arg2, arg3 );
    496                 }
    497           case OperatorNode::NCond:
    498                 throw UnimplementedError( "GNU 2-argument conditional expression" );
    499           case OperatorNode::Comma:
    500                 {
    501                         assert( args.size() == 2);
    502                         std::list< Expression * >::const_iterator i = args.begin();
    503                         Expression *ret = *i++;
    504                         while ( i != args.end() ) {
    505                                 ret = new CommaExpr( ret, *i++ );
    506                         }
    507                         return ret;
    508                 }
    509                 // Tuples
    510           case OperatorNode::TupleC:
    511                 {
    512                         TupleExpr *ret = new TupleExpr();
    513                         std::copy( args.begin(), args.end(), back_inserter( ret->get_exprs() ) );
    514                         return ret;
    515                 }
    516           default:
    517                 // shouldn't happen
    518                 assert( false );
    519                 return 0;
    520         } // switch
    521 }
    522 
    523 void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const {
    524         printDesignation( os );
    525         os << "( ";
    526         function->printOneLine( os, indent );
    527         for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) {
    528                 cur->printOneLine( os, indent );
    529         } // for
    530         os << ") ";
    531 }
    532 
    533 void CompositeExprNode::print( std::ostream &os, int indent ) const {
    534         printDesignation( os );
    535         os << string( indent, ' ' ) << "Application of: " << endl;
    536         function->print( os, indent + ParseNode::indent_by );
    537 
    538         os << string( indent, ' ' ) ;
    539         if ( arguments ) {
    540                 os << "... on arguments: " << endl;
    541                 arguments->printList( os, indent + ParseNode::indent_by );
    542         } else
    543                 os << "... on no arguments: " << endl;
    544 }
    545 
    546 void CompositeExprNode::set_function( ExpressionNode *f ) {
    547         function = f;
    548 }
    549 
    550 void CompositeExprNode::set_args( ExpressionNode *args ) {
    551         arguments = args;
    552 }
    553 
    554 ExpressionNode *CompositeExprNode::get_function( void ) const {
    555         return function;
    556 }
    557 
    558 ExpressionNode *CompositeExprNode::get_args( void ) const {
    559         return arguments;
    560 }
    561 
    562 void CompositeExprNode::add_arg( ExpressionNode *arg ) {
    563         if ( arguments )
    564                 arguments->set_link( arg );
    565         else
    566                 set_args( arg );
    567 }
    568 
    569 //##############################################################################
    570 
    571 Expression *AsmExprNode::build() const {
    572         return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
    573 }
    574 
    575 void AsmExprNode::print( std::ostream &os, int indent ) const {
    576         os << string( indent, ' ' ) << "Assembler Expression:" << endl;
    577         if ( inout ) {
    578                 os << string( indent, ' ' ) << "inout: " << std::endl;
    579                 inout->print( os, indent + 2 );
    580         } // if
    581         if ( constraint ) {
    582                 os << string( indent, ' ' ) << "constraint: " << std::endl;
    583                 constraint->print( os, indent + 2 );
    584         } // if
    585         if ( operand ) {
    586                 os << string( indent, ' ' ) << "operand: " << std::endl;
    587                 operand->print( os, indent + 2 );
    588         } // if
    589 }
    590 
    591 void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
    592         printDesignation( os );
    593         os << "( ";
    594         if ( inout ) inout->printOneLine( os, indent + 2 );
    595         os << ", ";
    596         if ( constraint ) constraint->printOneLine( os, indent + 2 );
    597         os << ", ";
    598         if ( operand ) operand->printOneLine( os, indent + 2 );
    599         os << ") ";
    600 }
    601 
    602 //##############################################################################
    603 
    604 void LabelNode::print( std::ostream &os, int indent ) const {}
    605 
    606 void LabelNode::printOneLine( std::ostream &os, int indent ) const {}
    607 
    608 //##############################################################################
    609 
    610 CommaExprNode::CommaExprNode(): CompositeExprNode( new OperatorNode( OperatorNode::Comma )) {}
    611 
    612 CommaExprNode::CommaExprNode( ExpressionNode *exp ) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp ) {
    613 }
    614 
    615 CommaExprNode::CommaExprNode( ExpressionNode *exp1, ExpressionNode *exp2) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp1, exp2) {
    616 }
    617 
    618 CommaExprNode *CommaExprNode::add_to_list( ExpressionNode *exp ) {
    619         add_arg( exp );
    620 
    621         return this;
    622 }
    623 
    624 CommaExprNode::CommaExprNode( const CommaExprNode &other ) : CompositeExprNode( other ) {
    625 }
    626 
    627 //##############################################################################
    628 
    629 ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
    630 
    631 ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
    632 }
    633 
    634 ValofExprNode::~ValofExprNode() {
    635         delete body;
    636 }
    637 
    638 void ValofExprNode::print( std::ostream &os, int indent ) const {
    639         printDesignation( os );
    640         os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
    641         get_body()->print( os, indent + 4);
    642 }
    643 
    644 void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
    645         assert( false );
    646 }
    647 
    648 Expression *ValofExprNode::build() const {
    649         return new UntypedValofExpr ( maybeBuild<Statement>(get_body()), maybeBuild< Expression >( get_argName() ) );
    650 }
    651 
    652 //##############################################################################
    653 
    654 ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
    655         if ( init_ == 0 )
    656                 init = 0;
    657         else {
    658                 DeclarationNode *decl;
    659                 ExpressionNode *exp;
    660 
    661                 if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
    662                         init = new StatementNode( decl );
    663                 else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
    664                         init = new StatementNode( StatementNode::Exp, exp );
    665                 else
    666                         throw SemanticError("Error in for control expression");
    667         }
    668 }
    669 
    670 ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
    671         : ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
    672 }
    673 
    674 ForCtlExprNode::~ForCtlExprNode() {
    675         delete init;
    676         delete condition;
    677         delete change;
    678 }
    679 
    680 Expression *ForCtlExprNode::build() const {
    681         // this shouldn't be used!
    682         assert( false );
    683         return 0;
    684 }
    685 
    686 void ForCtlExprNode::print( std::ostream &os, int indent ) const{
    687         os << string( indent,' ' ) << "For Control Expression -- :" << endl;
    688 
    689         os << string( indent + 2, ' ' ) << "initialization:" << endl;
    690         if ( init != 0 )
    691                 init->printList( os, indent + 4 );
    692 
    693         os << string( indent + 2, ' ' ) << "condition: " << endl;
    694         if ( condition != 0 )
    695                 condition->print( os, indent + 4 );
    696         os << string( indent + 2, ' ' ) << "increment: " << endl;
    697         if ( change != 0 )
    698                 change->print( os, indent + 4 );
    699 }
    700 
    701 void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
    702         assert( false );
    703 }
    704 
    705 //##############################################################################
    706 
    707 TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
    708 }
    709 
    710 TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
    711 }
    712 
    713 Expression *TypeValueNode::build() const {
     182Expression *build_cast( DeclarationNode *decl_node, ExpressionNode *expr_node ) {
     183        Type *targetType = decl_node->buildType();
     184        if ( dynamic_cast< VoidType * >( targetType ) ) {
     185                delete targetType;
     186                return new CastExpr( maybeBuild< Expression >(expr_node) );
     187        } else {
     188                return new CastExpr( maybeBuild< Expression >(expr_node), targetType );
     189        } // if
     190}
     191
     192Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
     193        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeBuild< Expression >(expr_node) );
     194        delete member;
     195        return ret;
     196}
     197
     198Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
     199        UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
     200        deref->get_args().push_back( maybeBuild< Expression >(expr_node) );
     201        UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
     202        delete member;
     203        return ret;
     204}
     205
     206Expression *build_addressOf( ExpressionNode *expr_node ) {
     207                return new AddressExpr( maybeBuild< Expression >(expr_node) );
     208}
     209Expression *build_sizeOfexpr( ExpressionNode *expr_node ) {
     210        return new SizeofExpr( maybeBuild< Expression >(expr_node) );
     211}
     212Expression *build_sizeOftype( DeclarationNode *decl_node ) {
     213        return new SizeofExpr( decl_node->buildType() );
     214}
     215Expression *build_alignOfexpr( ExpressionNode *expr_node ) {
     216        return new AlignofExpr( maybeBuild< Expression >(expr_node) );
     217}
     218Expression *build_alignOftype( DeclarationNode *decl_node ) {
     219        return new AlignofExpr( decl_node->buildType() );
     220}
     221Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member ) {
     222        return new UntypedOffsetofExpr( decl_node->buildType(), member->get_name() );
     223}
     224
     225Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind ) {
     226        return new LogicalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), notZeroExpr( maybeBuild< Expression >(expr_node2) ), kind );
     227}
     228
     229Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
     230        std::list< Expression * > args;
     231        args.push_back( maybeBuild< Expression >(expr_node) );
     232        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
     233}
     234Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
     235        std::list< Expression * > args;
     236        args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node) ) );
     237        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
     238}
     239Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
     240        std::list< Expression * > args;
     241        args.push_back( maybeBuild< Expression >(expr_node1) );
     242        args.push_back( maybeBuild< Expression >(expr_node2) );
     243        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
     244}
     245Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
     246        std::list< Expression * > args;
     247        args.push_back( new AddressExpr( maybeBuild< Expression >(expr_node1) ) );
     248        args.push_back( maybeBuild< Expression >(expr_node2) );
     249        return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
     250}
     251
     252Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 ) {
     253        return new ConditionalExpr( notZeroExpr( maybeBuild< Expression >(expr_node1) ), maybeBuild< Expression >(expr_node2), maybeBuild< Expression >(expr_node3) );
     254}
     255
     256Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
     257        return new CommaExpr( maybeBuild< Expression >(expr_node1), maybeBuild< Expression >(expr_node2) );
     258}
     259
     260Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node ) {
     261        return new AttrExpr( var, maybeBuild< Expression >(expr_node) );
     262}
     263Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node ) {
     264        return new AttrExpr( var, decl_node->buildType() );
     265}
     266
     267Expression *build_tuple( ExpressionNode * expr_node ) {
     268        TupleExpr *ret = new TupleExpr();
     269        buildList( expr_node, ret->get_exprs() );
     270        return ret;
     271}
     272
     273Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node ) {
     274        std::list< Expression * > args;
     275
     276        buildList( expr_node, args );
     277        return new UntypedExpr( maybeBuild< Expression >(function), args, nullptr );
     278}
     279
     280Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
     281        Expression *low_cexpr = maybeBuild< Expression >( low );
     282        Expression *high_cexpr = maybeBuild< Expression >( high );
     283        return new RangeExpr( low_cexpr, high_cexpr );
     284}
     285
     286Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
     287        return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild< Expression >(operand) );
     288}
     289
     290Expression *build_valexpr( StatementNode *s ) {
     291        return new UntypedValofExpr( maybeBuild< Statement >(s), nullptr );
     292}
     293Expression *build_typevalue( DeclarationNode *decl ) {
    714294        return new TypeExpr( decl->buildType() );
    715295}
    716296
    717 void TypeValueNode::print( std::ostream &os, int indent ) const {
    718         os << std::string( indent, ' ' ) << "Type:";
    719         get_decl()->print( os, indent + 2);
    720 }
    721 
    722 void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
    723         os << "Type:";
    724         get_decl()->print( os, indent + 2);
    725 }
    726 
    727 
    728 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
    729 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
    730 
    731 CompoundLiteralNode::~CompoundLiteralNode() {
    732         delete kids;
    733         delete type;
    734 }
    735 
    736 CompoundLiteralNode *CompoundLiteralNode::clone() const {
    737         return new CompoundLiteralNode( *this );
    738 }
    739 
    740 void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
    741         os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
    742 
    743         os << string( indent + 2, ' ' ) << "type:" << endl;
    744         if ( type != 0 )
    745                 type->print( os, indent + 4 );
    746 
    747         os << string( indent + 2, ' ' ) << "initialization:" << endl;
    748         if ( kids != 0 )
    749                 kids->printList( os, indent + 4 );
    750 }
    751 
    752 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
    753         os << "( ";
    754         if ( type ) type->print( os );
    755         os << ", ";
    756         if ( kids ) kids->printOneLine( os );
    757         os << ") ";
    758 }
    759 
    760 Expression *CompoundLiteralNode::build() const {
    761         Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
     297Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
     298        Declaration * newDecl = maybeBuild< Declaration >(decl_node); // compound literal type
    762299        if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
    763                 return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
     300                return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild< Initializer >(kids) );
    764301        // these types do not have associated type information
    765302        } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
    766                 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
     303                return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild< Initializer >(kids) );
    767304        } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
    768                 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
     305                return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild< Initializer >(kids) );
    769306        } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
    770                 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
     307                return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild< Initializer >(kids) );
    771308        } else {
    772309                assert( false );
    773310        } // if
    774 }
    775 
    776 
    777 ExpressionNode *flattenCommas( ExpressionNode *list ) {
    778         if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
    779                 OperatorNode *op;
    780                 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) {
    781                         if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
    782                                 composite->add_arg( next );
    783                         return flattenCommas( composite->get_args() );
    784                 } // if
    785         } // if
    786 
    787         if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
    788                 list->set_next( flattenCommas( next ) );
    789 
    790         return list;
    791 }
    792 
    793 ExpressionNode *tupleContents( ExpressionNode *tuple ) {
    794         if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) {
    795                 OperatorNode *op = 0;
    796                 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) )
    797                         return composite->get_args();
    798         } // if
    799         return tuple;
    800311}
    801312
  • src/Parser/InitializerNode.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 13:20:24 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul  4 15:37:15 2016
    13 // Update Count     : 15
     12// Last Modified On : Mon Aug 15 18:27:02 2016
     13// Update Count     : 20
    1414//
    1515
     
    2525        : expr( _expr ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
    2626        if ( aggrp )
    27                 kids = dynamic_cast< InitializerNode *>( get_link() );
     27                kids = dynamic_cast< InitializerNode * >( get_next() );
    2828
    2929        if ( kids != 0 )
    30                 set_link( 0 );
     30                set_last( 0 );
    3131}
    3232
     
    3434        : expr( 0 ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
    3535        if ( init != 0 )
    36                 set_link(init);
     36                set_last( init );
    3737
    3838        if ( aggrp )
    39                 kids = dynamic_cast< InitializerNode *>( get_link() );
     39                kids = dynamic_cast< InitializerNode * >( get_next() );
    4040
    4141        if ( kids != 0 )
     
    5858                        while ( curdes != 0) {
    5959                                curdes->printOneLine(os);
    60                                 curdes = (ExpressionNode *)(curdes->get_link());
     60                                curdes = (ExpressionNode *)(curdes->get_next());
    6161                                if ( curdes ) os << ", ";
    6262                        } // while
     
    7272
    7373        InitializerNode *moreInit;
    74         if  ( get_link() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_link() ) ) != 0) )
     74        if  ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) )
    7575                moreInit->printOneLine( os );
    7676}
     
    8282                //assert( next_init() != 0 );
    8383
    84                 std::list< Initializer *> initlist;
    85                 buildList<Initializer, InitializerNode>( next_init(), initlist );
     84                std::list< Initializer * > initlist;
     85                buildList< Initializer, InitializerNode >( next_init(), initlist );
    8686
    87                 std::list< Expression *> designlist;
     87                std::list< Expression * > designlist;
    8888
    8989                if ( designator != 0 ) {
    90                         buildList<Expression, ExpressionNode>( designator, designlist );
     90                        buildList< Expression, ExpressionNode >( designator, designlist );
    9191                } // if
    9292
    9393                return new ListInit( initlist, designlist, maybeConstructed );
    9494        } else {
    95                 std::list< Expression *> designators;
     95                std::list< Expression * > designators;
    9696
    9797                if ( designator != 0 )
    98                         buildList<Expression, ExpressionNode>( designator, designators );
     98                        buildList< Expression, ExpressionNode >( designator, designators );
    9999
    100100                if ( get_expression() != 0)
    101                         return new SingleInit( maybeBuild<Expression>( get_expression() ), designators, maybeConstructed );
     101                        return new SingleInit( maybeBuild< Expression >( get_expression() ), designators, maybeConstructed );
    102102        } // if
    103103
  • src/Parser/ParseNode.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 13:26:29 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jul 15 18:49:25 2016
    13 // Update Count     : 62
     12// Last Modified On : Tue Aug 16 08:42:29 2016
     13// Update Count     : 107
    1414//
    1515
    16 #include <climits>
    1716#include "ParseNode.h"
    1817using namespace std;
    1918
    20 // Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
    21 //
    22 //              prefix action constant action suffix
    23 //
    24 // Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
    25 //
    26 //              constant BEGIN CONT ...
    27 //              <CONT>(...)? BEGIN 0 ... // possible empty suffix
    28 //
    29 // because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
    30 // type.
    31 
    32 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
    33 static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
    34 static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
    35 static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
    36 static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
    37 static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
    38 
    39 BasicType::Kind literalType( ConstantNode::Type type, string &value ) {
    40         BasicType::Kind btype;
    41 
    42         // lexing divides constants into 4 kinds
    43         switch ( type ) {
    44           case ConstantNode::Integer:
    45                 {
    46                         static const BasicType::Kind kind[2][3] = {
    47                                 { BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
    48                                 { BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
    49                         };
    50                         bool dec = true, Unsigned = false;                      // decimal, unsigned constant
    51                         int size;                                                                       // 0 => int, 1 => long, 2 => long long
    52                         unsigned long long v;                                           // converted integral value
    53                         size_t last = value.length() - 1;                       // last character of constant
    54 
    55                         if ( value[0] == '0' ) {                                        // octal/hex constant ?
    56                                 dec = false;
    57                                 if ( last != 0 && checkX( value[1] ) ) { // hex constant ?
    58                                         sscanf( (char *)value.c_str(), "%llx", &v );
    59                                         //printf( "%llx %llu\n", v, v );
    60                                 } else {                                                                // octal constant
    61                                         sscanf( (char *)value.c_str(), "%llo", &v );
    62                                         //printf( "%llo %llu\n", v, v );
    63                                 } // if
    64                         } else {                                                                        // decimal constant ?
    65                                 sscanf( (char *)value.c_str(), "%llu", &v );
    66                                 //printf( "%llu %llu\n", v, v );
    67                         } // if
    68 
    69                         if ( v <= INT_MAX ) {                                           // signed int
    70                                 size = 0;
    71                         } else if ( v <= UINT_MAX && ! dec ) {          // unsigned int
    72                                 size = 0;
    73                                 Unsigned = true;                                                // unsigned
    74                         } else if ( v <= LONG_MAX ) {                           // signed long int
    75                                 size = 1;
    76                         } else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
    77                                 size = 1;
    78                                 Unsigned = true;                                                // unsigned long int
    79                         } else if ( v <= LLONG_MAX ) {                          // signed long long int
    80                                 size = 2;
    81                         } else {                                                                        // unsigned long long int
    82                                 size = 2;
    83                                 Unsigned = true;                                                // unsigned long long int
    84                         } // if
    85 
    86                         if ( checkU( value[last] ) ) {                          // suffix 'u' ?
    87                                 Unsigned = true;
    88                                 if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'l' ?
    89                                         size = 1;
    90                                         if ( last > 1 && checkL( value[ last - 2 ] ) ) { // suffix 'll' ?
    91                                                 size = 2;
    92                                         } // if
    93                                 } // if
    94                         } else if ( checkL( value[ last ] ) ) {         // suffix 'l' ?
    95                                 size = 1;
    96                                 if ( last > 0 && checkL( value[ last - 1 ] ) ) { // suffix 'll' ?
    97                                         size = 2;
    98                                         if ( last > 1 && checkU( value[ last - 2 ] ) ) { // suffix 'u' ?
    99                                                 Unsigned = true;
    100                                         } // if
    101                                 } else {
    102                                         if ( last > 0 && checkU( value[ last - 1 ] ) ) { // suffix 'u' ?
    103                                                 Unsigned = true;
    104                                         } // if
    105                                 } // if
    106                         } // if
    107                         btype = kind[Unsigned][size];                           // lookup constant type
    108                         break;
    109                 }
    110           case ConstantNode::Float:
    111                 {
    112                         //long double v;
    113                         static const BasicType::Kind kind[2][3] = {
    114                                 { BasicType::Float, BasicType::Double, BasicType::LongDouble },
    115                                 { BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
    116                         };
    117                         bool complx = false;                                            // real, complex
    118                         int size = 1;                                                           // 0 => float, 1 => double (default), 2 => long double
    119                         // floating-point constant has minimum of 2 characters: 1. or .1
    120                         size_t last = value.length() - 1;
    121 
    122                         if ( checkI( value[last] ) ) {                          // imaginary ?
    123                                 complx = true;
    124                                 last -= 1;                                                              // backup one character
    125                         } // if
    126 
    127                         //sscanf( (char *)value.c_str(), "%Lf", &v );
    128                         //printf( "%s %24.22Lf %Lf\n", value.c_str(), v, v );
    129 
    130                         if ( checkF( value[last] ) ) {                          // float ?
    131                                 size = 0;
    132                         } else if ( checkD( value[last] ) ) {           // double ?
    133                                 size = 1;
    134                         } else if ( checkL( value[last] ) ) {           // long double ?
    135                                 size = 2;
    136                         } // if
    137                         if ( ! complx && checkI( value[last - 1] ) ) { // imaginary ?
    138                                 complx = true;
    139                         } // if
    140                         btype = kind[complx][size];                                     // lookup constant type
    141                         break;
    142                 }
    143           case ConstantNode::Character:
    144                 btype = BasicType::Char;                                                // default
    145                 if ( string( "LUu" ).find( value[0] ) != string::npos ) {
    146                         // ???
    147                 } // if
    148                 break;
    149           case ConstantNode::String:
    150                 assert( false );
    151                 // array of char
    152                 if ( string( "LUu" ).find( value[0] ) != string::npos ) {
    153                         if ( value[0] == 'u' && value[1] == '8' ) {
    154                                 // ???
    155                         } else {
    156                                 // ???
    157                         } // if
    158                 } // if
    159                 break;
    160         } // switch
    161         return btype;
    162 } // literalType
    163 
    164 
    165 ConstantNode *makeConstant( ConstantNode::Type type, std::string *str ) {
    166         ::Type::Qualifiers emptyQualifiers;                                     // no qualifiers on constants
    167         return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, literalType( type, *str ) ), *str ), nullptr ) );
    168 }
    169 
    170 ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str ) {
    171         ::Type::Qualifiers emptyQualifiers;                                     // no qualifiers on constants
    172         // string should probably be a primitive type
    173         ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
    174                                                                    new ConstantExpr(
    175                                                                            Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
    176                                                                                                  toString( str->size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
    177                                                                    false, false );
    178         return new ConstantNode( new ConstantExpr( Constant( at, *str ), nullptr ) );
    179 }
    180 
    181 
    182 // Builder
    18319int ParseNode::indent_by = 4;
    18420
    185 ParseNode::ParseNode() : next( 0 ) {};
    186 ParseNode::ParseNode( const string *name ) : name( *name ), next( 0 ) { delete name; }
    187 ParseNode::ParseNode( const string &name ) : name( name ), next( 0 ) { }
     21ParseNode::ParseNode() : next( nullptr ) {};
     22ParseNode::ParseNode( const string *name ) : name( *name ), next( nullptr ) { delete name; }
     23ParseNode::ParseNode( const string &name ) : name( name ), next( nullptr ) { }
    18824
    18925ParseNode::~ParseNode() {
     
    19430        ParseNode *current = this;
    19531
    196         while ( current->get_link() != 0 )
    197         current = current->get_link();
    198 
     32        while ( current->get_next() != 0 )
     33        current = current->get_next();
    19934        return current;
    20035}
    20136
    202 ParseNode *ParseNode::set_link( ParseNode *next_ ) {
     37ParseNode *ParseNode::set_last( ParseNode *next_ ) {
    20338        if ( next_ != 0 ) get_last()->next = next_;
    20439        return this;
    20540}
    206 
    207 void ParseNode::print( std::ostream &os, int indent ) const {}
    208 
    20941
    21042void ParseNode::printList( std::ostream &os, int indent ) const {
     
    21648}
    21749
    218 ParseNode &ParseNode::operator,( ParseNode &p ) {
    219         set_link( &p );
    220 
    221         return *this;
    222 }
    223 
    224 ParseNode *mkList( ParseNode &pn ) {
    225         // it just relies on `operator,' to take care of the "arguments" and provides a nice interface to an awful-looking
    226         // address-of, rendering, for example (StatementNode *)(&(*$5 + *$7)) into (StatementNode *)mkList(($5, $7))
    227         // (although "nice" is probably not the word)
    228         return &pn;
    229 }
    230 
    23150// Local Variables: //
    23251// tab-width: 4 //
  • src/Parser/ParseNode.h

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 20:50:21 2016
    13 // Update Count     : 261
     12// Last Modified On : Tue Aug 16 08:37:47 2016
     13// Update Count     : 527
    1414//
    1515
     
    2222#include <memory>
    2323
    24 #include "Common/utility.h"
    2524#include "Parser/LinkageSpec.h"
    2625#include "SynTree/Type.h"
    2726#include "SynTree/Expression.h"
    28 //#include "SynTree/Declaration.h"
     27#include "SynTree/Statement.h"
     28#include "SynTree/Label.h"
     29#include "Common/utility.h"
    2930#include "Common/UniqueName.h"
    30 #include "SynTree/Label.h"
    31 
    32 class ExpressionNode;
    33 class CompositeExprNode;
    34 class CommaExprNode;
     31
    3532class StatementNode;
    3633class CompoundStmtNode;
    3734class DeclarationNode;
     35class ExpressionNode;
    3836class InitializerNode;
    3937
    40 // Builder
     38//##############################################################################
     39
    4140class ParseNode {
    4241  public:
     
    4544        ParseNode( const std::string & );                                       // for copy constructing subclasses
    4645        virtual ~ParseNode();
    47 
    48         ParseNode *get_link() const { return next; }
     46        virtual ParseNode *clone() const { assert( false ); return nullptr; };
     47
     48        ParseNode *get_next() const { return next; }
     49        ParseNode *set_next( ParseNode *newlink ) { next = newlink; return this; }
    4950        ParseNode *get_last();
    50         ParseNode *set_link( ParseNode * );
    51         void set_next( ParseNode *newlink ) { next = newlink; }
    52 
    53         virtual ParseNode *clone() const { return 0; };
     51        ParseNode *set_last( ParseNode * );
    5452
    5553        const std::string &get_name() const { return name; }
    5654        void set_name( const std::string &newValue ) { name = newValue; }
    5755
    58         virtual void print( std::ostream &, int indent = 0 ) const;
    59         virtual void printList( std::ostream &, int indent = 0 ) const;
    60 
    61         ParseNode &operator,( ParseNode &);
    62   protected:
     56        virtual void print( std::ostream &os, int indent = 0 ) const {}
     57        virtual void printList( std::ostream &os, int indent = 0 ) const;
     58  private:
     59        static int indent_by;
     60
     61        ParseNode *next;
    6362        std::string name;
    64         static int indent_by;
    65         ParseNode *next;
    66 };
    67 
    68 ParseNode *mkList( ParseNode & );
     63}; // ParseNode
     64
     65//##############################################################################
     66
     67class InitializerNode : public ParseNode {
     68  public:
     69        InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
     70        InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
     71        ~InitializerNode();
     72
     73        ExpressionNode *get_expression() const { return expr; }
     74
     75        InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
     76        ExpressionNode *get_designators() const { return designator; }
     77
     78        InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
     79        bool get_maybeConstructed() const { return maybeConstructed; }
     80
     81        InitializerNode *next_init() const { return kids; }
     82
     83        void print( std::ostream &os, int indent = 0 ) const;
     84        void printOneLine( std::ostream & ) const;
     85
     86        virtual Initializer *build() const;
     87  private:
     88        ExpressionNode *expr;
     89        bool aggregate;
     90        ExpressionNode *designator;                                                     // may be list
     91        InitializerNode *kids;
     92        bool maybeConstructed;
     93};
     94
     95//##############################################################################
    6996
    7097class ExpressionNode : public ParseNode {
    7198  public:
    72         ExpressionNode();
    73         ExpressionNode( const std::string * );
     99        ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {}
     100        ExpressionNode( Expression * expr, const std::string *name ) : ParseNode( name ), expr( expr ) {}
    74101        ExpressionNode( const ExpressionNode &other );
    75         virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere
    76 
    77         virtual ExpressionNode *clone() const = 0;
    78 
    79         virtual CommaExprNode *add_to_list( ExpressionNode * );
    80 
    81         ExpressionNode *get_argName() const { return argName; }
    82         ExpressionNode *set_argName( const std::string *aName );
    83         ExpressionNode *set_argName( ExpressionNode *aDesignator );
     102        virtual ~ExpressionNode() {}
     103
     104        virtual ExpressionNode *clone() const { assert( false ); return nullptr; }
     105
    84106        bool get_extension() const { return extension; }
    85107        ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
    86108
    87         virtual void print( std::ostream &, int indent = 0) const = 0;
    88         virtual void printOneLine( std::ostream &, int indent = 0) const = 0;
    89 
    90         virtual Expression *build() const = 0;
    91   protected:
    92         void printDesignation ( std::ostream &, int indent = 0) const;
    93   private:
    94         ExpressionNode *argName = 0;
     109        virtual void print( std::ostream &os, int indent = 0 ) const {}
     110        virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
     111
     112        virtual Expression *build() const { return expr; }
     113  private:
    95114        bool extension = false;
     115        Expression *expr;
    96116};
    97117
    98118template< typename T >
    99 struct maybeBuild_t<Expression, T> {
     119struct maybeBuild_t< Expression, T > {
    100120        static inline Expression * doit( const T *orig ) {
    101121                if ( orig ) {
     
    104124                        return p;
    105125                } else {
    106                         return 0;
     126                        return nullptr;
    107127                } // if
    108128        }
    109129};
    110130
    111 // NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
    112 class NullExprNode : public ExpressionNode {
    113   public:
    114         NullExprNode();
    115 
    116         virtual NullExprNode *clone() const;
    117 
    118         virtual void print( std::ostream &, int indent = 0) const;
    119         virtual void printOneLine( std::ostream &, int indent = 0) const;
    120 
    121         virtual Expression *build() const;
    122 };
    123 
    124 class ConstantNode : public ExpressionNode {
    125   public:
    126         enum Type { Integer, Float, Character, String };
    127 
    128         ConstantNode( ConstantExpr * );
    129         ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
    130         ~ConstantNode() { delete expr; }
    131 
    132         virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
    133         virtual void print( std::ostream &, int indent = 0) const;
    134         virtual void printOneLine( std::ostream &, int indent = 0) const;
    135 
    136         ConstantNode *appendstr( const std::string *newValue );
    137 
    138         Expression *build() const;
    139   private:
    140         ConstantExpr *expr;
    141 };
    142 
    143 ConstantNode *makeConstant( ConstantNode::Type, std::string * );
    144 ConstantNode *makeConstantStr( ConstantNode::Type type, std::string *str );
    145 
    146 class VarRefNode : public ExpressionNode {
    147   public:
    148         VarRefNode();
    149         VarRefNode( const std::string *, bool isLabel = false );
    150         VarRefNode( const VarRefNode &other );
    151 
    152         virtual Expression *build() const ;
    153 
    154         virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
    155 
    156         virtual void print( std::ostream &, int indent = 0 ) const;
    157         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    158   private:
    159         bool isLabel;
    160 };
    161 
    162 class DesignatorNode : public ExpressionNode {
    163   public:
    164         DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
    165         DesignatorNode( const DesignatorNode &other );
    166 
    167         virtual Expression *build() const ;
    168         virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
    169 
    170         virtual void print( std::ostream &, int indent = 0 ) const;
    171         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    172   private:
    173         bool isArrayIndex;
    174 };
    175 
    176 class TypeValueNode : public ExpressionNode {
    177   public:
    178         TypeValueNode( DeclarationNode * );
    179         TypeValueNode( const TypeValueNode &other );
    180 
    181         DeclarationNode *get_decl() const { return decl; }
    182 
    183         virtual Expression *build() const ;
    184 
    185         virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
    186 
    187         virtual void print( std::ostream &, int indent = 0) const;
    188         virtual void printOneLine( std::ostream &, int indent = 0) const;
    189   private:
    190         DeclarationNode *decl;
    191 };
    192 
    193 class OperatorNode : public ExpressionNode {
    194   public:
    195         enum Type { TupleC, Comma, TupleFieldSel, // n-adic
    196                                 // triadic
    197                                 Cond, NCond,
    198                                 // diadic
    199                                 SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
    200                                 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
    201                                 Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
    202                                 Index, FieldSel, PFieldSel, Range,
    203                                 // monadic
    204                                 UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
    205                                 Ctor, Dtor,
    206         };
    207 
    208         OperatorNode( Type t );
    209         OperatorNode( const OperatorNode &other );
    210         virtual ~OperatorNode();
    211 
    212         virtual OperatorNode *clone() const { return new OperatorNode( *this ); }
    213 
    214         Type get_type() const;
    215         const char *get_typename() const;
    216 
    217         virtual void print( std::ostream &, int indent = 0) const;
    218         virtual void printOneLine( std::ostream &, int indent = 0) const;
    219 
    220         virtual Expression *build() const { return 0; }
    221   private:
    222         Type type;
    223 };
    224 
    225 class CompositeExprNode : public ExpressionNode {
    226   public:
    227         CompositeExprNode();
    228         CompositeExprNode( const std::string * );
    229         CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 );
    230         CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 );
    231         CompositeExprNode( const CompositeExprNode &other );
    232         virtual ~CompositeExprNode();
    233 
    234         virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
    235         virtual Expression *build() const;
    236 
    237         virtual void print( std::ostream &, int indent = 0) const;
    238         virtual void printOneLine( std::ostream &, int indent = 0) const;
    239 
    240         void set_function( ExpressionNode * );
    241         void set_args( ExpressionNode * );
    242 
    243         void add_arg( ExpressionNode * );
    244 
    245         ExpressionNode *get_function() const;
    246         ExpressionNode *get_args() const;
    247   private:
    248         ExpressionNode *function;
    249         ExpressionNode *arguments;
    250 };
    251 
    252 class AsmExprNode : public ExpressionNode {
    253   public:
    254         AsmExprNode();
    255         AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
    256         virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
    257 
    258         virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
    259         virtual Expression *build() const;
    260 
    261         virtual void print( std::ostream &, int indent = 0) const;
    262         virtual void printOneLine( std::ostream &, int indent = 0) const;
    263 
    264         ExpressionNode *get_inout() const { return inout; };
    265         void set_inout( ExpressionNode *newValue ) { inout = newValue; }
    266 
    267         ConstantNode *get_constraint() const { return constraint; };
    268         void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
    269 
    270         ExpressionNode *get_operand() const { return operand; };
    271         void set_operand( ExpressionNode *newValue ) { operand = newValue; }
    272   private:
    273         ExpressionNode *inout;
    274         ConstantNode *constraint;
    275         ExpressionNode *operand;
    276 };
    277 
    278 class LabelNode : public ExpressionNode {
    279   public:
    280         virtual Expression *build() const { return NULL; }
    281         virtual LabelNode *clone() const { return new LabelNode( *this ); }
    282 
    283         virtual void print( std::ostream &, int indent = 0) const;
    284         virtual void printOneLine( std::ostream &, int indent = 0) const;
    285 
    286         const std::list< Label > &get_labels() const { return labels; };
    287         void append_label( std::string *label ) { labels.push_back( *label ); delete label; }
    288   private:
     131enum class OperKinds {
     132        // diadic
     133        SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
     134        BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
     135        Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
     136        Index, Range,
     137        // monadic
     138        UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
     139        Ctor, Dtor,
     140};
     141
     142struct LabelNode {
    289143        std::list< Label > labels;
    290144};
    291145
    292 class CommaExprNode : public CompositeExprNode {
    293   public:
    294         CommaExprNode();
    295         CommaExprNode( ExpressionNode * );
    296         CommaExprNode( ExpressionNode *, ExpressionNode * );
    297         CommaExprNode( const CommaExprNode &other );
    298 
    299         virtual CommaExprNode *add_to_list( ExpressionNode * );
    300         virtual CommaExprNode *clone() const { return new CommaExprNode( *this ); }
    301 };
    302 
    303 class ForCtlExprNode : public ExpressionNode {
    304   public:
    305         ForCtlExprNode( ParseNode *, ExpressionNode *, ExpressionNode * ) throw ( SemanticError );
    306         ForCtlExprNode( const ForCtlExprNode &other );
    307         ~ForCtlExprNode();
    308 
    309         StatementNode *get_init() const { return init; }
    310         ExpressionNode *get_condition() const { return condition; }
    311         ExpressionNode *get_change() const { return change; }
    312 
    313         virtual ForCtlExprNode *clone() const { return new ForCtlExprNode( *this ); }
    314         virtual Expression *build() const;
    315 
    316         virtual void print( std::ostream &, int indent = 0 ) const;
    317         virtual void printOneLine( std::ostream &, int indent = 0 ) const;
    318   private:
    319         StatementNode *init;
    320         ExpressionNode *condition;
    321         ExpressionNode *change;
    322 };
    323 
    324 class ValofExprNode : public ExpressionNode {
    325   public:
    326         ValofExprNode();
    327         ValofExprNode( StatementNode *s = 0 );
    328         ValofExprNode( const ValofExprNode &other );
    329         ~ValofExprNode();
    330 
    331         virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
    332 
    333         StatementNode *get_body() const { return body; }
    334         void print( std::ostream &, int indent = 0 ) const;
    335         void printOneLine( std::ostream &, int indent = 0 ) const;
    336         Expression *build() const;
    337 
    338   private:
    339         StatementNode *body;
    340 };
     146Expression *build_constantInteger( std::string &str );
     147Expression *build_constantFloat( std::string &str );
     148Expression *build_constantChar( std::string &str );
     149ConstantExpr *build_constantStr( std::string &str );
     150
     151NameExpr *build_varref( const std::string *name, bool labelp = false );
     152Expression *build_typevalue( DeclarationNode *decl );
     153
     154Expression *build_cast( DeclarationNode * decl_node, ExpressionNode *expr_node );
     155Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member );
     156Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member );
     157Expression *build_addressOf( ExpressionNode *expr_node );
     158Expression *build_sizeOfexpr( ExpressionNode *expr_node );
     159Expression *build_sizeOftype( DeclarationNode *decl_node );
     160Expression *build_alignOfexpr( ExpressionNode *expr_node );
     161Expression *build_alignOftype( DeclarationNode *decl_node );
     162Expression *build_offsetOf( DeclarationNode *decl_node, NameExpr *member );
     163Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     164Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
     165Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
     166Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
     167Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     168Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     169Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
     170Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
     171Expression *build_attrexpr( NameExpr *var, ExpressionNode * expr_node );
     172Expression *build_attrtype( NameExpr *var, DeclarationNode * decl_node );
     173Expression *build_tuple( ExpressionNode * expr_node = 0 );
     174Expression *build_func( ExpressionNode * function, ExpressionNode * expr_node );
     175Expression *build_range( ExpressionNode * low, ExpressionNode *high );
     176Expression *build_asmexpr( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
     177Expression *build_valexpr( StatementNode *s );
     178Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
     179
     180//##############################################################################
    341181
    342182class TypeData;
     
    386226        static DeclarationNode *newBuiltinType( BuiltinType );
    387227
     228        DeclarationNode();
     229        ~DeclarationNode();
     230        DeclarationNode *clone() const;
     231
    388232        DeclarationNode *addQualifiers( DeclarationNode *);
    389233        DeclarationNode *copyStorageClasses( DeclarationNode *);
     
    401245        DeclarationNode *addNewArray( DeclarationNode *array );
    402246        DeclarationNode *addParamList( DeclarationNode *list );
    403         DeclarationNode *addIdList( DeclarationNode *list );       // old-style functions
     247        DeclarationNode *addIdList( DeclarationNode *list ); // old-style functions
    404248        DeclarationNode *addInitializer( InitializerNode *init );
    405249
     
    412256        DeclarationNode *appendList( DeclarationNode * );
    413257
    414         DeclarationNode *clone() const;
    415         void print( std::ostream &, int indent = 0 ) const;
    416         void printList( std::ostream &, int indent = 0 ) const;
     258        void print( std::ostream &os, int indent = 0 ) const;
     259        void printList( std::ostream &os, int indent = 0 ) const;
    417260
    418261        Declaration *build() const;
     
    427270        bool get_extension() const { return extension; }
    428271        DeclarationNode *set_extension( bool exten ) { extension = exten; return this; }
    429 
    430         DeclarationNode();
    431         ~DeclarationNode();
    432272  private:
    433273        StorageClass buildStorageClass() const;
     
    448288}; // DeclarationNode
    449289
     290Type *buildType( TypeData *type );
     291
     292//##############################################################################
     293
    450294class StatementNode : public ParseNode {
    451295  public:
    452         enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru,
    453                                 While, Do,        For,
    454                                 Goto,  Continue,  Break,   Return,  Throw,
    455                                 Try,   Catch,     Finally, Asm,
    456                                 Decl
    457         };
    458 
    459         StatementNode();
    460         StatementNode( const std::string *name );
    461         StatementNode( Type t, ExpressionNode *control = 0, StatementNode *block = 0 );
    462         StatementNode( Type t, std::string *target );
     296        StatementNode() { stmt = nullptr; }
     297        StatementNode( Statement *stmt ) : stmt( stmt ) {}
    463298        StatementNode( DeclarationNode *decl );
    464 
    465         ~StatementNode();
    466 
    467         static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
    468 
    469         StatementNode *set_block( StatementNode *b ) {  block = b; return this; }
    470         StatementNode *get_block() const { return block; }
    471 
    472         void set_control( ExpressionNode *c ) { control = c; }
    473         ExpressionNode *get_control() const { return control; }
    474 
    475         StatementNode::Type get_type() const { return type; }
    476 
    477         StatementNode *add_label( const std::string * );
    478         const std::list<std::string> &get_labels() const { return labels; }
    479 
    480         void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
    481         void setCatchRest( bool newVal ) { isCatchRest = newVal; }
    482 
    483         std::string get_target() const;
    484 
    485         StatementNode *add_controlexp( ExpressionNode * );
    486         StatementNode *append_block( StatementNode * );
    487         StatementNode *append_last_case( StatementNode * );
    488 
    489         void print( std::ostream &, int indent = 0) const;
    490         virtual StatementNode *clone() const;
    491         virtual Statement *build() const;
    492   private:
    493         static const char *StType[];
    494         Type type;
    495         ExpressionNode *control;
    496         StatementNode *block;
    497         std::list<std::string> labels;
    498         std::string *target;                            // target label for jump statements
    499         DeclarationNode *decl;
    500         bool isCatchRest;
     299        virtual ~StatementNode() {}
     300
     301        virtual StatementNode *clone() const { assert( false ); return nullptr; }
     302        virtual Statement *build() const { return stmt; }
     303
     304        virtual StatementNode *add_label( const std::string * name ) {
     305                stmt->get_labels().emplace_back( *name );
     306                return this;
     307        }
     308
     309        virtual StatementNode *append_last_case( StatementNode * );
     310
     311        virtual void print( std::ostream &os, int indent = 0 ) {}
     312        virtual void printList( std::ostream &os, int indent = 0 ) {}
     313  private:
     314        Statement *stmt;
    501315}; // StatementNode
    502316
    503 class CompoundStmtNode : public StatementNode {
    504   public:
    505         CompoundStmtNode();
    506         CompoundStmtNode( const std::string * );
    507         CompoundStmtNode( StatementNode * );
    508         ~CompoundStmtNode();
    509 
    510         void add_statement( StatementNode * );
    511 
    512         void print( std::ostream &, int indent = 0 ) const;
    513         virtual Statement *build() const;
    514   private:
    515         StatementNode *first, *last;
    516 };
    517 
    518 class AsmStmtNode : public StatementNode {
    519   public:
    520         AsmStmtNode( Type, bool voltile, ConstantNode *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ConstantNode *clobber = 0, LabelNode *gotolabels = 0 );
    521         ~AsmStmtNode();
    522 
    523         void print( std::ostream &, int indent = 0 ) const;
    524         Statement *build() const;
    525   private:
    526         bool voltile;
    527         ConstantNode *instruction;
    528         ExpressionNode *output, *input;
    529         ConstantNode *clobber;
    530         std::list< Label > gotolabels;
    531 };
    532 
    533 class NullStmtNode : public CompoundStmtNode {
    534   public:
    535         Statement *build() const;
    536         void print( std::ostream &, int indent = 0 ) const;
    537 };
    538 
    539 class InitializerNode : public ParseNode {
    540   public:
    541         InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode *des = 0 );
    542         InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode *des = 0 );
    543         ~InitializerNode();
    544 
    545         ExpressionNode *get_expression() const { return expr; }
    546 
    547         InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
    548         ExpressionNode *get_designators() const { return designator; }
    549 
    550         InitializerNode *set_maybeConstructed( bool value ) { maybeConstructed = value; return this; }
    551         bool get_maybeConstructed() const { return maybeConstructed; }
    552 
    553         InitializerNode *next_init() const { return kids; }
    554 
    555         void print( std::ostream &, int indent = 0 ) const;
    556         void printOneLine( std::ostream & ) const;
    557 
    558         virtual Initializer *build() const;
    559   private:
    560         ExpressionNode *expr;
    561         bool aggregate;
    562         ExpressionNode *designator; // may be list
    563         InitializerNode *kids;
    564         bool maybeConstructed;
    565 };
    566 
    567 class CompoundLiteralNode : public ExpressionNode {
    568   public:
    569         CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
    570         CompoundLiteralNode( const CompoundLiteralNode &type );
    571         ~CompoundLiteralNode();
    572 
    573         virtual CompoundLiteralNode *clone() const;
    574 
    575         DeclarationNode *get_type() const { return type; }
    576         CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
    577 
    578         InitializerNode *get_initializer() const { return kids; }
    579         CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
    580 
    581         void print( std::ostream &, int indent = 0 ) const;
    582         void printOneLine( std::ostream &, int indent = 0 ) const;
    583 
    584         virtual Expression *build() const;
    585   private:
    586         DeclarationNode *type;
    587         InitializerNode *kids;
    588 };
     317Statement *build_expr( ExpressionNode *ctl );
     318
     319struct ForCtl {
     320        ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
     321                init( new StatementNode( build_expr( expr ) ) ), condition( condition ), change( change ) {}
     322        ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
     323                init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
     324
     325        StatementNode *init;
     326        ExpressionNode *condition;
     327        ExpressionNode *change;
     328};
     329
     330Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
     331Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
     332Statement *build_case( ExpressionNode *ctl );
     333Statement *build_default();
     334Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
     335Statement *build_for( ForCtl *forctl, StatementNode *stmt );
     336Statement *build_branch( std::string identifier, BranchStmt::Type kind );
     337Statement *build_computedgoto( ExpressionNode *ctl );
     338Statement *build_return( ExpressionNode *ctl );
     339Statement *build_throw( ExpressionNode *ctl );
     340Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt );
     341Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny = false );
     342Statement *build_finally( StatementNode *stmt );
     343Statement *build_compound( StatementNode *first );
     344Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output = 0, ExpressionNode *input = 0, ExpressionNode *clobber = 0, LabelNode *gotolabels = 0 );
     345
     346//##############################################################################
    589347
    590348template< typename SynTreeType, typename NodeType >
    591 void buildList( const NodeType *firstNode, std::list< SynTreeType *> &outputList ) {
     349void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
    592350        SemanticError errors;
    593         std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );
     351        std::back_insert_iterator< std::list< SynTreeType * > > out( outputList );
    594352        const NodeType *cur = firstNode;
    595353
    596354        while ( cur ) {
    597355                try {
    598 //                      SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::result_of<decltype(&NodeType::build)(NodeType)>::type>( cur ) );
    599                         SynTreeType *result = dynamic_cast< SynTreeType *>( maybeBuild<typename std::pointer_traits<decltype(cur->build())>::element_type>( cur ) );
     356//                      SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::result_of< decltype(&NodeType::build)(NodeType)>::type >( cur ) );
     357                        SynTreeType *result = dynamic_cast< SynTreeType * >( maybeBuild< typename std::pointer_traits< decltype(cur->build())>::element_type >( cur ) );
    600358                        if ( result ) {
    601359                                *out++ = result;
     
    605363                        errors.append( e );
    606364                } // try
    607                 cur = dynamic_cast< NodeType *>( cur->get_link() );
     365                cur = dynamic_cast< NodeType * >( cur->get_next() );
    608366        } // while
    609367        if ( ! errors.isEmpty() ) {
     
    614372// in DeclarationNode.cc
    615373void buildList( const DeclarationNode *firstNode, std::list< Declaration * > &outputList );
    616 void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType *> &outputList );
     374void buildList( const DeclarationNode *firstNode, std::list< DeclarationWithType * > &outputList );
    617375void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
    618 
    619 // in ExpressionNode.cc
    620 ExpressionNode *flattenCommas( ExpressionNode *list );
    621 ExpressionNode *tupleContents( ExpressionNode *tuple );
    622376
    623377#endif // PARSENODE_H
  • src/Parser/Parser.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 14:54:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 18:04:47 2016
    13 // Update Count     : 5
     12// Last Modified On : Mon Aug 15 17:44:22 2016
     13// Update Count     : 7
    1414//
    1515
  • src/Parser/Parser.h

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 14:56:50 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May 16 14:58:56 2015
    13 // Update Count     : 2
     12// Last Modified On : Mon Aug 15 16:33:22 2016
     13// Update Count     : 3
    1414//
    1515
  • src/Parser/StatementNode.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 14:59:41 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:21:02 2016
    13 // Update Count     : 133
     12// Last Modified On : Mon Aug 15 20:47:11 2016
     13// Update Count     : 322
    1414//
    1515
     
    2626using namespace std;
    2727
    28 const char *StatementNode::StType[] = {
    29         "Exp",   "If",       "Switch", "Case",    "Default",  "Choose",   "Fallthru",
    30         "While", "Do",       "For",
    31         "Goto",  "Continue", "Break",  "Return",  "Throw",
    32         "Try",   "Catch",    "Finally", "Asm",
    33         "Decl"
    34 };
    3528
    36 StatementNode::StatementNode() : ParseNode(), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
    37 
    38 StatementNode::StatementNode( const string *name ) : ParseNode( name ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
    39 
    40 StatementNode::StatementNode( DeclarationNode *decl ) : type( Decl ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), isCatchRest ( false ) {
     29StatementNode::StatementNode( DeclarationNode *decl ) {
    4130        if ( decl ) {
    42                 if ( DeclarationNode *agg = decl->extractAggregate() ) {
    43                         this->decl = agg;
    44                         StatementNode *nextStmt = new StatementNode;
    45                         nextStmt->type = Decl;
    46                         nextStmt->decl = decl;
    47                         next = nextStmt;
    48                         if ( decl->get_link() ) {
    49                                 next->set_next( new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) ) );
     31                DeclarationNode *agg = decl->extractAggregate();
     32                if ( agg ) {
     33                        StatementNode *nextStmt = new StatementNode( new DeclStmt( noLabels, maybeBuild< Declaration >( decl ) ) );
     34                        set_next( nextStmt );
     35                        if ( decl->get_next() ) {
     36                                get_next()->set_next( new StatementNode( dynamic_cast< DeclarationNode * >(decl->get_next()) ) );
    5037                                decl->set_next( 0 );
    5138                        } // if
    5239                } else {
    53                         if ( decl->get_link() ) {
    54                                 next = new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) );
     40                        if ( decl->get_next() ) {
     41                                set_next(new StatementNode( dynamic_cast< DeclarationNode * >( decl->get_next() ) ) );
    5542                                decl->set_next( 0 );
    5643                        } // if
    57                         this->decl = decl;
     44                        agg = decl;
    5845                } // if
     46                stmt = new DeclStmt( noLabels, maybeBuild< Declaration >(agg) );
     47        } else {
     48                assert( false );
    5949        } // if
    6050}
    6151
    62 StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {
    63         this->control = ( t == Default ) ? 0 : control;
    64 }
    65 
    66 StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {}
    67 
    68 StatementNode::~StatementNode() {
    69         delete control;
    70         delete block;
    71         delete target;
    72         delete decl;
    73 }
    74 
    75 StatementNode * StatementNode::newCatchStmt( DeclarationNode *d, StatementNode *s, bool catchRestP ) {
    76         StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s );
    77         ret->addDeclaration( d );
    78         ret->setCatchRest( catchRestP );
    79 
    80         return ret;
    81 }
    82 
    83 std::string StatementNode::get_target() const{
    84         if ( target )
    85                 return *target;
    86 
    87         return string("");
    88 }
    89 
    90 StatementNode * StatementNode::clone() const {
    91         StatementNode *newnode = new StatementNode( type, maybeClone( control ), maybeClone( block ) );
    92         if ( target ) {
    93                 newnode->target = new string( *target );
    94         } else {
    95                 newnode->target = 0;
    96         } // if
    97         newnode->decl = maybeClone( decl );
    98         return newnode;
    99 }
    100 
    101 StatementNode *StatementNode::add_label( const std::string *l ) {
    102         if ( l != 0 ) {
    103                 labels.push_front( *l );
    104                 delete l;
    105         } // if
     52StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
     53        StatementNode *prev = this;
     54        // find end of list and maintain previous pointer
     55        for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_next() ) {
     56                StatementNode *node = dynamic_cast< StatementNode * >(curr);
     57                assert( node );
     58                assert( dynamic_cast< CaseStmt * >(node->stmt) );
     59                prev = curr;
     60        } // for
     61        // convert from StatementNode list to Statement list
     62        StatementNode *node = dynamic_cast< StatementNode * >(prev);
     63        std::list< Statement * > stmts;
     64        buildList( stmt, stmts );
     65        // splice any new Statements to end of current Statements
     66        CaseStmt * caseStmt = dynamic_cast< CaseStmt * >(node->stmt);
     67        caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
    10668        return this;
    10769}
    10870
    109 StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
    110         if ( control && e )
    111                 control->add_to_list( e ); // xxx - check this
    112         return this;
     71Statement *build_expr( ExpressionNode *ctl ) {
     72        Expression *e = maybeBuild< Expression >( ctl );
     73
     74        if ( e )
     75                return new ExprStmt( noLabels, e );
     76        else
     77                return new NullStmt( noLabels );
    11378}
    11479
    115 StatementNode *StatementNode::append_block( StatementNode *stmt ) {
    116         if ( stmt != 0 ) {
    117                 if ( block == 0 )
    118                         block = stmt;
    119                 else
    120                         block->set_link( stmt );
     80Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
     81        Statement *thenb, *elseb = 0;
     82        std::list< Statement * > branches;
     83        buildList< Statement, StatementNode >( then_stmt, branches );
     84        assert( branches.size() == 1 );
     85        thenb = branches.front();
     86
     87        if ( else_stmt ) {
     88                std::list< Statement * > branches;
     89                buildList< Statement, StatementNode >( else_stmt, branches );
     90                assert( branches.size() == 1 );
     91                elseb = branches.front();
    12192        } // if
    122         return this;
     93        return new IfStmt( noLabels, notZeroExpr( maybeBuild< Expression >(ctl) ), thenb, elseb );
    12394}
    12495
    125 StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
    126         if ( stmt != 0 ) {
    127                 StatementNode *next = ( StatementNode *)get_link();
    128                 if ( next && ( next->get_type() == StatementNode::Case || next->get_type() == StatementNode::Default ) )
    129                         next->append_last_case ( stmt );
    130                 else
    131                         if ( block == 0 )
    132                                 block = stmt;
    133                         else
    134                                 block->set_link( stmt );
    135         } // if
    136         return this;
     96Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ) {
     97        std::list< Statement * > branches;
     98        buildList< Statement, StatementNode >( stmt, branches );
     99        assert( branches.size() >= 0 );                                         // size == 0 for switch (...) {}, i.e., no declaration or statements
     100        return new SwitchStmt( noLabels, maybeBuild< Expression >(ctl), branches );
     101}
     102Statement *build_case( ExpressionNode *ctl ) {
     103        std::list< Statement * > branches;
     104        return new CaseStmt( noLabels, maybeBuild< Expression >(ctl), branches );
     105}
     106Statement *build_default() {
     107        std::list< Statement * > branches;
     108        return new CaseStmt( noLabels, nullptr, branches, true );
    137109}
    138110
    139 void StatementNode::print( std::ostream &os, int indent ) const {
    140         if ( ! labels.empty() ) {
    141                 std::list<std::string>::const_iterator i;
     111Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) {
     112        std::list< Statement * > branches;
     113        buildList< Statement, StatementNode >( stmt, branches );
     114        assert( branches.size() == 1 );
     115        return new WhileStmt( noLabels, notZeroExpr( maybeBuild< Expression >(ctl) ), branches.front(), kind );
     116}
    142117
    143                 os << string( indent, ' ' );
    144                 for ( i = labels.begin(); i != labels.end(); i++ )
    145                         os << *i << ":";
    146                 os << endl;
     118Statement *build_for( ForCtl *forctl, StatementNode *stmt ) {
     119        std::list< Statement * > branches;
     120        buildList< Statement, StatementNode >( stmt, branches );
     121        assert( branches.size() == 1 );
     122
     123        std::list< Statement * > init;
     124        if ( forctl->init != 0 ) {
     125                buildList( forctl->init, init );
    147126        } // if
    148127
    149         switch ( type ) {
    150           case Decl:
    151                 decl->print( os, indent );
    152                 break;
    153           case Exp:
    154                 if ( control ) {
    155                         os << string( indent, ' ' );
    156                         control->print( os, indent );
    157                         os << endl;
    158                 } else
    159                         os << string( indent, ' ' ) << "Null Statement" << endl;
    160                 break;
    161           default:
    162                 os << string( indent, ' ' ) << StatementNode::StType[type] << endl;
    163                 if ( type == Catch ) {
    164                         if ( decl ) {
    165                                 os << string( indent + ParseNode::indent_by, ' ' ) << "Declaration: " << endl;
    166                                 decl->print( os, indent + 2 * ParseNode::indent_by );
    167                         } else if ( isCatchRest ) {
    168                                 os << string( indent + ParseNode::indent_by, ' ' ) << "Catches the rest " << endl;
    169                         } else {
    170                                 ; // should never reach here
    171                         } // if
    172                 } // if
    173                 if ( control ) {
    174                         os << string( indent + ParseNode::indent_by, ' ' ) << "Control: " << endl;
    175                         control->printList( os, indent + 2 * ParseNode::indent_by );
    176                 } // if
    177                 if ( block ) {
    178                         os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl;
    179                         block->printList( os, indent + 2 * ParseNode::indent_by );
    180                 } // if
    181                 if ( target ) {
    182                         os << string( indent + ParseNode::indent_by, ' ' ) << "Target: " << get_target() << endl;
    183                 } // if
    184                 break;
    185         } // switch
     128        Expression *cond = 0;
     129        if ( forctl->condition != 0 )
     130                cond = notZeroExpr( maybeBuild< Expression >(forctl->condition) );
     131
     132        Expression *incr = 0;
     133        if ( forctl->change != 0 )
     134                incr = maybeBuild< Expression >(forctl->change);
     135
     136        delete forctl;
     137        return new ForStmt( noLabels, init, cond, incr, branches.front() );
    186138}
    187139
    188 Statement *StatementNode::build() const {
    189         std::list<Statement *> branches;
    190         std::list<Expression *> exps;
    191         std::list<Label> labs;
    192 
    193         if ( ! labels.empty() ) {
    194                 std::back_insert_iterator< std::list<Label> > lab_it( labs );
    195                 copy( labels.begin(), labels.end(), lab_it );
    196         } // if
    197 
    198         // try {
    199         buildList<Statement, StatementNode>( get_block(), branches );
    200 
    201         switch ( type ) {
    202           case Decl:
    203                 return new DeclStmt( labs, maybeBuild< Declaration >( decl ) );
    204           case Exp:
    205                 {
    206                         Expression *e = maybeBuild< Expression >( get_control() );
    207 
    208                         if ( e )
    209                                 return new ExprStmt( labs, e );
    210                         else
    211                                 return new NullStmt( labs );
    212                 }
    213           case If:
    214                 {
    215                         Statement *thenb = 0, *elseb = 0;
    216                         assert( branches.size() >= 1 );
    217 
    218                         thenb = branches.front();
    219                         branches.pop_front();
    220                         if ( ! branches.empty() ) {
    221                                 elseb = branches.front();
    222                                 branches.pop_front();
    223                         } // if
    224                         return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
    225                 }
    226           case While:
    227                 assert( branches.size() == 1 );
    228                 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
    229           case Do:
    230                 assert( branches.size() == 1 );
    231                 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
    232           case For:
    233                 {
    234                         assert( branches.size() == 1 );
    235 
    236                         ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
    237                         assert( ctl != 0 );
    238 
    239                         std::list<Statement *> init;
    240                         if ( ctl->get_init() != 0 ) {
    241                                 buildList( ctl->get_init(), init );
    242                         } // if
    243 
    244                         Expression *cond = 0;
    245                         if ( ctl->get_condition() != 0 )
    246                                 cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
    247 
    248                         Expression *incr = 0;
    249                         if ( ctl->get_change() != 0 )
    250                                 incr = maybeBuild<Expression>(ctl->get_change());
    251 
    252                         return new ForStmt( labs, init, cond, incr, branches.front() );
    253                 }
    254           case Switch:
    255                 return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
    256           case Case:
    257                 return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
    258           case Default:
    259                 return new CaseStmt( labs, 0, branches, true );
    260           case Goto:
    261                 {
    262                         if ( get_target() == "" ) {                                     // computed goto
    263                                 assert( get_control() != 0 );
    264                                 return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );
    265                         } // if
    266 
    267                         return new BranchStmt( labs, get_target(), BranchStmt::Goto );
    268                 }
    269           case Break:
    270                 return new BranchStmt( labs, get_target(), BranchStmt::Break );
    271           case Continue:
    272                 return new BranchStmt( labs, get_target(), BranchStmt::Continue );
    273           case Return:
    274           case Throw :
    275                 buildList( get_control(), exps );
    276                 if ( exps.size() ==0 )
    277                         return new ReturnStmt( labs, 0, type == Throw );
    278                 if ( exps.size() > 0 )
    279                         return new ReturnStmt( labs, exps.back(), type == Throw );
    280           case Try:
    281                 {
    282                         assert( branches.size() >= 0 );
    283                         CompoundStmt *tryBlock = dynamic_cast<CompoundStmt *>( branches.front());
    284                         branches.pop_front();
    285                         FinallyStmt *finallyBlock = 0;
    286                         if ( ( finallyBlock = dynamic_cast<FinallyStmt *>( branches.back())) ) {
    287                                 branches.pop_back();
    288                         } // if
    289                         return new TryStmt( labs, tryBlock, branches, finallyBlock );
    290                 }
    291           case Catch:
    292                 {
    293                         assert( branches.size() == 1 );
    294 
    295                         return new CatchStmt( labs, maybeBuild< Declaration >( decl ), branches.front(), isCatchRest );
    296                 }
    297           case Finally:
    298                 {
    299                         assert( branches.size() == 1 );
    300                         CompoundStmt *block = dynamic_cast<CompoundStmt *>( branches.front() );
    301                         assert( block != 0 );
    302 
    303                         return new FinallyStmt( labs, block );
    304                 }
    305           case Asm:
    306                 assert( false );
    307           default:
    308                 // shouldn't be here
    309                 return 0;
    310         } // switch
     140Statement *build_branch( std::string identifier, BranchStmt::Type kind ) {
     141        return new BranchStmt( noLabels, identifier, kind );
     142}
     143Statement *build_computedgoto( ExpressionNode *ctl ) {
     144        return new BranchStmt( noLabels, maybeBuild< Expression >(ctl), BranchStmt::Goto );
    311145}
    312146
    313 
    314 CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {}
    315 
    316 CompoundStmtNode::CompoundStmtNode( const string *name_ ) : StatementNode( name_ ), first( 0 ), last( 0 ) {}
    317 
    318 CompoundStmtNode::CompoundStmtNode( StatementNode *stmt ) : first( stmt ) {
    319         if ( first ) {
    320                 last = ( StatementNode *)( stmt->get_last());
    321         } else {
    322                 last = 0;
    323         } // if
     147Statement *build_return( ExpressionNode *ctl ) {
     148        std::list< Expression * > exps;
     149        buildList( ctl, exps );
     150        return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr );
     151}
     152Statement *build_throw( ExpressionNode *ctl ) {
     153        std::list< Expression * > exps;
     154        buildList( ctl, exps );
     155        return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr, true );
    324156}
    325157
    326 CompoundStmtNode::~CompoundStmtNode() {
    327         delete first;
     158Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ) {
     159        std::list< Statement * > branches;
     160        buildList< Statement, StatementNode >( catch_stmt, branches );
     161        CompoundStmt *tryBlock = dynamic_cast< CompoundStmt * >(maybeBuild< Statement >(try_stmt));
     162        assert( tryBlock );
     163        FinallyStmt *finallyBlock = dynamic_cast< FinallyStmt * >(maybeBuild< Statement >(finally_stmt) );
     164        return new TryStmt( noLabels, tryBlock, branches, finallyBlock );
     165}
     166Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny ) {
     167        std::list< Statement * > branches;
     168        buildList< Statement, StatementNode >( stmt, branches );
     169        assert( branches.size() == 1 );
     170        return new CatchStmt( noLabels, maybeBuild< Declaration >(decl), branches.front(), catchAny );
     171}
     172Statement *build_finally( StatementNode *stmt ) {
     173        std::list< Statement * > branches;
     174        buildList< Statement, StatementNode >( stmt, branches );
     175        assert( branches.size() == 1 );
     176        return new FinallyStmt( noLabels, dynamic_cast< CompoundStmt * >( branches.front() ) );
    328177}
    329178
    330 void CompoundStmtNode::add_statement( StatementNode *stmt ) {
    331         if ( stmt != 0 ) {
    332                 last->set_link( stmt );
    333                 last = ( StatementNode *)( stmt->get_link());
    334         } // if
    335 }
    336 
    337 void CompoundStmtNode::print( ostream &os, int indent ) const {
    338         if ( first ) {
    339                 first->printList( os, indent+2 );
    340         } // if
    341 }
    342 
    343 Statement *CompoundStmtNode::build() const {
    344         std::list<Label> labs;
    345         const std::list<std::string> &labels = get_labels();
    346 
    347         if ( ! labels.empty() ) {
    348                 std::back_insert_iterator< std::list<Label> > lab_it( labs );
    349                 copy( labels.begin(), labels.end(), lab_it );
    350         } // if
    351 
    352         CompoundStmt *cs = new CompoundStmt( labs );
     179Statement *build_compound( StatementNode *first ) {
     180        CompoundStmt *cs = new CompoundStmt( noLabels );
    353181        buildList( first, cs->get_kids() );
    354182        return cs;
    355183}
    356184
    357 
    358 AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) :
    359         StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {
    360         if ( gotolabels ) {
    361                 this->gotolabels = gotolabels->get_labels();
    362                 delete gotolabels;
    363         } // if
    364 }
    365 
    366 AsmStmtNode::~AsmStmtNode() {
    367         delete instruction; delete output; delete input; delete clobber;
    368 }
    369 
    370 void AsmStmtNode::print( std::ostream &os, int indent ) const {
    371         StatementNode::print( os, indent );                                     // print statement labels
    372         os << string( indent + ParseNode::indent_by, ' ' ) << "volatile:" << voltile << endl;
    373         if ( instruction ) {
    374                 os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;
    375                 instruction->printList( os, indent + 2 * ParseNode::indent_by );
    376         } // if
    377         if ( output ) {
    378                 os << string( indent + ParseNode::indent_by, ' ' ) << "Output:" << endl;
    379                 output->printList( os, indent + 2 * ParseNode::indent_by );
    380         } // if
    381         if ( input ) {
    382                 os << string( indent + ParseNode::indent_by, ' ' ) << "Input:" << endl;
    383                 input->printList( os, indent + 2 * ParseNode::indent_by );
    384         } // if
    385         if ( clobber ) {
    386                 os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;
    387                 clobber->printList( os, indent + 2 * ParseNode::indent_by );
    388         } // if
    389         if ( ! gotolabels.empty() ) {
    390                 os << string( indent + ParseNode::indent_by, ' ' ) << "Goto Labels:" << endl;
    391                 os << string( indent + 2 * ParseNode::indent_by, ' ' );
    392                 for ( std::list<Label>::const_iterator i = gotolabels.begin();; ) {
    393                         os << *i;
    394                         i++;
    395                   if ( i == gotolabels.end() ) break;
    396                         os << ", ";
    397                 }
    398                 os << endl;
    399         } // if
    400 }
    401 
    402 Statement *AsmStmtNode::build() const {
    403         std::list<Label> labs;
    404 
    405         if ( ! get_labels().empty() ) {
    406                 std::back_insert_iterator< std::list<Label> > lab_it( labs );
    407                 copy( get_labels().begin(), get_labels().end(), lab_it );
    408         } // if
    409 
     185Statement *build_asmstmt( bool voltile, ConstantExpr *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) {
    410186        std::list< Expression * > out, in;
    411187        std::list< ConstantExpr * > clob;
     188
    412189        buildList( output, out );
    413190        buildList( input, in );
    414191        buildList( clobber, clob );
    415         std::list< Label > gotolabs = gotolabels;
    416         return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs );
    417 }
    418 
    419 
    420 void NullStmtNode::print( ostream &os, int indent ) const {
    421         os << string( indent, ' ' ) << "Null Statement:" << endl;
    422 }
    423 
    424 Statement *NullStmtNode::build() const {
    425         return new NullStmt;
     192        return new AsmStmt( noLabels, voltile, instruction, out, in, clob, gotolabels ? gotolabels->labels : noLabels );
    426193}
    427194
  • src/Parser/TypeData.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jul 13 18:03:29 2016
    13 // Update Count     : 56
     12// Last Modified On : Mon Aug 15 20:48:52 2016
     13// Update Count     : 62
    1414//
    1515
     
    182182                break;
    183183          case Array:
    184                 newtype->array->dimension = maybeClone( array->dimension );
     184                newtype->array->dimension = array->dimension;
    185185                newtype->array->isVarLen = array->isVarLen;
    186186                newtype->array->isStatic = array->isStatic;
     
    488488                                decl = new FunctionDecl( name, sc, linkage, buildFunction(), body, isInline, isNoreturn );
    489489                        } else {
    490                                 // std::list<Label> ls;
    491                                 decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list<Label>() ), isInline, isNoreturn );
     490                                // std::list< Label > ls;
     491                                decl = new FunctionDecl( name, sc, linkage, buildFunction(), new CompoundStmt( std::list< Label >() ), isInline, isNoreturn );
    492492                        } // if
    493493                } else {
    494494                        decl = new FunctionDecl( name, sc, linkage, buildFunction(), 0, isInline, isNoreturn );
    495495                } // if
    496                 for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_link() ) ) {
     496                for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
    497497                        if ( cur->get_name() != "" ) {
    498498                                decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
     
    510510                return buildVariable();
    511511        } else {
    512                 return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, isInline, isNoreturn );
     512                return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, std::list< Attribute * >(),  isInline, isNoreturn );
    513513        } // if
    514514        return 0;
     
    908908        buildList( enumeration->constants, ret->get_members() );
    909909        std::list< Declaration * >::iterator members = ret->get_members().begin();
    910         for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
     910        for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ), ++members ) {
    911911                if ( cur->get_enumeratorValue() != NULL ) {
    912                         ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
     912                        ObjectDecl *member = dynamic_cast< ObjectDecl * >(*members);
    913913                        member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ), std::list< Expression * >() ) );
    914914                } // if
  • src/Parser/TypeData.h

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 20:52:02 2016
    13 // Update Count     : 20
     12// Last Modified On : Mon Aug 15 14:28:32 2016
     13// Update Count     : 21
    1414//
    1515
  • src/Parser/TypedefTable.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:57:30 2016
    13 // Update Count     : 24
     12// Last Modified On : Mon Aug 15 18:24:42 2016
     13// Update Count     : 25
    1414//
    1515
     
    6464                tableType::iterator curPos = table.find( identifier );
    6565                if ( curPos == table.end()) {
    66                         list<Entry> newList;
     66                        list< Entry > newList;
    6767                        newList.push_front( newEntry );
    6868                        table[identifier] = newList;
    6969                } else {
    70                         list<Entry>::iterator listPos = (*curPos ).second.begin();
     70                        list< Entry >::iterator listPos = (*curPos ).second.begin();
    7171                        while ( listPos != (*curPos ).second.end() && listPos->scope > scope ) {
    7272                                listPos++;
     
    127127        debugPrint( "Leaving scope " << currentScope << endl );
    128128        for ( tableType::iterator i = table.begin(); i != table.end(); ) {
    129                 list<Entry> &declList = (*i).second;
     129                list< Entry > &declList = (*i).second;
    130130                while ( ! declList.empty() && declList.front().scope == currentScope ) {
    131131                        declList.pop_front();
     
    157157        for ( tableType::const_iterator i = table.begin(); i != table.end(); i++) {
    158158                debugPrint( (*i ).first << ": " );
    159                 list<Entry> declList = (*i).second;
    160                 for ( list<Entry>::const_iterator j = declList.begin(); j != declList.end(); j++ ) {
     159                list< Entry > declList = (*i).second;
     160                for ( list< Entry >::const_iterator j = declList.begin(); j != declList.end(); j++ ) {
    161161                        debugPrint( "(" << (*j).scope << " " << (*j).kind << ") " );
    162162                }
  • src/Parser/TypedefTable.h

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:59:56 2016
    13 // Update Count     : 27
     12// Last Modified On : Mon Aug 15 18:25:04 2016
     13// Update Count     : 28
    1414//
    1515
     
    3939        };
    4040
    41         typedef std::map<std::string, std::list<Entry> > tableType;
     41        typedef std::map< std::string, std::list< Entry > > tableType;
    4242        tableType table;
    4343
  • src/Parser/lex.cc

    r950f7a7 r7527e63  
    382382        (yy_c_buf_p) = yy_cp;
    383383
    384 #define YY_NUM_RULES 180
    385 #define YY_END_OF_BUFFER 181
     384#define YY_NUM_RULES 181
     385#define YY_END_OF_BUFFER 182
    386386/* This struct is not used in this scanner,
    387387   but its presence is necessary. */
     
    391391        flex_int32_t yy_nxt;
    392392        };
    393 static yyconst flex_int16_t yy_accept[888] =
     393static yyconst flex_int16_t yy_accept[892] =
    394394    {   0,
    395         0,    0,    0,    0,    0,    0,  115,  115,  118,  118,
    396       181,  179,    7,    9,    8,  138,  117,  102,  143,  146,
    397       114,  125,  126,  141,  139,  129,  140,  132,  142,  107,
    398       108,  109,  130,  131,  148,  150,  149,  151,  179,  102,
    399       123,  179,  124,  144,  102,  104,  102,  102,  102,  102,
    400       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    401       102,  102,  127,  147,  128,  145,    7,  179,    4,    4,
    402       180,  105,  180,  106,  115,  116,  122,  118,  119,    7,
    403         9,    0,    8,  155,  174,  102,    0,  167,  137,  160,
    404       168,  165,  152,  163,  153,  164,  162,    0,  112,    3,
    405 
    406         0,  166,  112,  110,    0,    0,  110,  110,    0,    0,
    407       110,  109,  109,  109,    0,  109,  135,  136,  134,  156,
    408       158,  154,  159,  157,    0,    0,    0,    0,    0,    0,
    409         0,    0,    0,    0,    0,    0,    0,    0,    0,  103,
    410       173,    0,  117,  114,  102,    0,    0,  170,    0,  102,
    411       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    412       102,  102,  102,  102,  102,  102,   38,  102,  102,  102,
    413       102,  102,  102,  102,  102,  102,  102,   56,  102,  102,
    414       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    415       102,  102,  102,  102,  169,  161,    7,    0,    0,    0,
    416 
    417         2,    0,    5,  105,    0,    0,    0,  115,    0,  121,
    418       120,  120,    0,    0,    0,  118,    0,    0,    0,    0,
     395        0,    0,    0,    0,    0,    0,  116,  116,  119,  119,
     396      182,  180,    7,    9,    8,  139,  118,  103,  144,  147,
     397      115,  126,  127,  142,  140,  130,  141,  133,  143,  108,
     398      109,  110,  131,  132,  149,  151,  150,  152,  180,  103,
     399      124,  180,  125,  145,  103,  105,  103,  103,  103,  103,
     400      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     401      103,  103,  128,  148,  129,  146,    7,  180,    4,    4,
     402      181,  106,  181,  107,  116,  117,  123,  119,  120,    7,
     403        9,    0,    8,  156,  175,  103,    0,  168,  138,  161,
     404      169,  166,  153,  164,  154,  165,  163,    0,  113,    3,
     405
     406        0,  167,  113,  111,    0,    0,  111,  111,    0,    0,
     407      111,  110,  110,  110,    0,  110,  136,  137,  135,  157,
     408      159,  155,  160,  158,    0,    0,    0,    0,    0,    0,
     409        0,    0,    0,    0,    0,    0,    0,    0,    0,  104,
     410      174,    0,  118,  115,  103,    0,    0,  171,    0,  103,
     411      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     412      103,  103,  103,  103,  103,  103,   38,  103,  103,  103,
     413      103,  103,  103,  103,  103,  103,  103,   57,  103,  103,
     414      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     415      103,  103,  103,  103,  170,  162,    7,    0,    0,    0,
     416
     417        2,    0,    5,  106,    0,    0,    0,  116,    0,  122,
     418      121,  121,    0,    0,    0,  119,    0,    0,    0,    0,
    419419        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    420         0,  133,  112,  112,    0,  112,  112,    0,    0,    6,
    421         0,  110,    0,    0,    0,  112,    0,  110,  110,  110,
    422       110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
    423       171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
    424         0,    0,    0,    0,    0,    0,    0,  102,   17,  102,
    425       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    426       102,  102,  102,  102,  102,  102,  102,   14,  102,  102,
    427 
    428       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    429       102,  102,  102,  102,  102,  102,   50,  102,  102,  102,
    430        63,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    431       102,  102,  102,  102,  102,   89,  102,  102,  102,  102,
    432       102,  102,  102,    0,    0,    0,    0,    0,    0,    0,
    433         0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
    434       178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
    435       112,    0,  112,    0,    0,  112,    0,  110,  110,    0,
    436         0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
    437         0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
    438 
    439       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    440       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    441       102,  102,  102,   21,  102,   24,  102,   27,  102,  102,
    442       102,  102,  102,  102,  102,   41,  102,   43,  102,  102,
    443       102,  102,  102,  102,  102,   55,  102,   66,  102,  102,
    444       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    445       102,  102,  102,  102,   97,  102,  102,    0,    0,    0,
     420        0,  134,  113,  113,    0,  113,  113,    0,    0,    6,
     421        0,  111,    0,    0,    0,  113,    0,  111,  111,  111,
     422      111,    0,  112,    0,    0,  110,  110,  110,  110,    0,
     423      172,  173,    0,  178,  176,    0,    0,    0,  104,    0,
     424        0,    0,    0,    0,    0,    0,    0,  103,   17,  103,
     425      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     426      103,  103,  103,  103,  103,  103,  103,   14,  103,  103,
     427
     428      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     429      103,  103,  103,  103,  103,  103,   51,  103,  103,  103,
     430       64,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     431      103,  103,  103,  103,  103,   90,  103,  103,  103,  103,
     432      103,  103,  103,    0,    0,    0,    0,    0,    0,    0,
     433        0,  121,    0,    0,    0,    0,    0,  121,    0,    0,
     434      179,    0,    0,    0,    0,    0,    0,    0,  113,    0,
     435      113,    0,  113,    0,    0,  113,    0,  111,  111,    0,
     436        0,  112,  112,    0,  112,    0,  112,  110,  110,    0,
     437        0,    0,    0,    0,    0,    0,    0,    0,    0,  177,
     438
     439      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     440      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     441      103,  103,  103,   21,  103,   24,  103,   27,  103,  103,
     442      103,  103,  103,  103,  103,   41,  103,   43,  103,  103,
     443      103,  103,  103,  103,  103,   56,  103,   67,  103,  103,
     444      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     445      103,  103,  103,  103,   98,  103,  103,    0,    0,    0,
    446446        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    447         0,  120,    0,    0,    0,    0,    0,  112,    0,    0,
    448         0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
    449 
    450       111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    451         0,    0,    0,    0,  102,  102,   22,  102,  102,  102,
    452       102,  102,  102,  102,   15,  102,  102,  102,  102,  102,
    453       102,  102,  102,  102,  102,  102,  102,  102,  102,   23,
    454        25,  102,   32,  102,  102,  102,  102,   40,  102,  102,
    455       102,  102,   48,  102,  102,   53,  102,  102,   70,  102,
    456       102,  102,   76,  102,  102,  102,  102,  102,   86,   88,
    457       102,  102,   94,  102,  102,  101,    0,    0,    0,    0,
     447        0,  121,    0,    0,    0,    0,    0,  113,    0,    0,
     448        0,    0,    0,    0,  112,  112,    0,  114,    0,  112,
     449
     450      112,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     451        0,    0,    0,    0,  103,  103,   22,  103,  103,  103,
     452      103,  103,  103,  103,   15,  103,  103,  103,  103,  103,
     453      103,  103,  103,  103,  103,  103,  103,  103,  103,   23,
     454       25,  103,   32,  103,  103,  103,  103,   40,  103,  103,
     455      103,  103,   49,  103,  103,   54,  103,  103,   71,  103,
     456      103,  103,   77,  103,  103,  103,  103,  103,   87,   89,
     457      103,  103,   95,  103,  103,  102,    0,    0,    0,    0,
    458458        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    459         0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
    460 
    461       113,  113,  113,    0,  111,    0,    0,    0,    0,    0,
    462         0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
    463       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    464       102,  102,  102,   58,  102,  102,  102,  102,  102,  102,
    465       102,  102,   28,  102,  102,  102,   39,   42,   45,  102,
    466       102,   51,  102,   60,   67,  102,  102,   75,   77,   80,
    467        81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
    468         0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
    469       120,    0,    0,    0,    0,  113,    0,  113,  113,    0,
    470         0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
    471 
    472        18,  102,  102,  102,  102,  102,  102,  102,   16,  102,
    473       102,  102,   33,  102,  102,  102,  102,  102,  102,  102,
    474       102,  102,  102,  102,  102,   36,   37,  102,   47,   52,
    475       102,  102,  102,   90,  102,  102,    0,    0,    0,    0,
     459        0,    0,    0,    0,    0,  114,    0,    0,  112,  114,
     460
     461      114,  114,  114,    0,  112,    0,    0,    0,    0,    0,
     462        0,    0,    0,    0,    0,  103,    0,  103,  103,  103,
     463      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
     464      103,  103,  103,   59,  103,  103,  103,  103,  103,  103,
     465      103,  103,   28,  103,  103,  103,   39,   42,   45,  103,
     466      103,   52,  103,   61,   68,  103,  103,   76,   78,   81,
     467       82,   84,   85,  103,  103,   92,  103,  103,    0,    1,
     468        0,    0,    0,    0,    0,    0,  106,    0,    0,    0,
     469      121,    0,    0,    0,    0,  114,    0,  114,  114,    0,
     470        0,    0,    0,    0,    0,    0,    0,    0,  103,  103,
     471
     472       18,  103,  103,  103,  103,  103,  103,  103,   16,  103,
     473      103,  103,   33,  103,  103,  103,  103,  103,  103,  103,
     474      103,  103,  103,  103,  103,   36,   37,  103,   48,   53,
     475      103,  103,  103,   91,  103,  103,    0,    0,    0,    0,
    476476        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
    477        11,   29,   54,  102,  102,  102,  102,  102,  102,  102,
    478       102,  102,  102,  102,   59,   61,   64,  102,  102,   78,
    479        92,  102,  102,   35,   46,   71,   72,  102,   95,   98,
    480         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    481         0,    0,  102,   68,  102,  102,   12,  102,  102,   30,
    482 
    483        34,  102,  102,  102,   65,  102,  102,  102,  102,  102,
    484       102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    485         0,    0,    0,    0,   57,  102,  102,  102,  102,  102,
    486       102,  102,   49,   62,   73,   79,   93,   99,  102,  102,
    487         0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
    488        13,   19,  102,  102,   31,  102,  102,  102,   26,   87,
    489         0,    0,  102,  102,  102,  102,  102,  102,   74,  100,
    490       102,   85,   20,  102,  102,   44,   82,  102,  102,  102,
    491       102,  102,  102,  102,   96,   69,    0
     477       11,   29,   55,  103,  103,  103,  103,  103,  103,  103,
     478      103,  103,  103,  103,   60,   62,   65,  103,  103,   79,
     479       93,  103,  103,   35,  103,   47,   72,   73,  103,   96,
     480       99,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     481        0,    0,    0,  103,   69,  103,  103,   12,  103,  103,
     482
     483       30,   34,  103,  103,  103,   66,  103,  103,  103,  103,
     484      103,  103,  103,    0,    0,    0,    0,    0,    0,    0,
     485        0,    0,    0,    0,    0,    0,   58,  103,  103,  103,
     486      103,  103,  103,  103,   50,   63,   74,   80,   94,  100,
     487      103,  103,  103,    0,    0,    0,    0,    0,    0,    0,
     488        0,  103,  103,   13,   19,  103,  103,   31,  103,  103,
     489      103,   26,   46,   88,    0,    0,  103,  103,  103,  103,
     490      103,  103,   75,  101,  103,   86,   20,  103,  103,   44,
     491       83,  103,  103,  103,  103,  103,  103,  103,   97,   70,
     492        0
     493
    492494    } ;
    493495
     
    537539    } ;
    538540
    539 static yyconst flex_int16_t yy_base[1062] =
     541static yyconst flex_int16_t yy_base[1066] =
    540542    {   0,
    541         0,   84, 2272, 2269,   94,    0,  177,  178,  179,  180,
    542      2285, 2822,  191, 2822,  197,   55, 2822, 2231,   60,  173,
    543      2822, 2822, 2822,   56,  188, 2822,  191,  189,  204,  216,
    544       275,    0, 2249, 2822,  216, 2247,  152,  344,  155,  220,
    545      2822,  159, 2822,  217,  226, 2822,  185,  154,  212,  251,
     543        0,   84, 2285, 2282,   94,    0,  177,  178,  179,  180,
     544     2298, 2825,  191, 2825,  197,   55, 2825, 2244,   60,  173,
     545     2825, 2825, 2825,   56,  188, 2825,  191,  189,  204,  216,
     546      275,    0, 2262, 2825,  216, 2260,  152,  344,  155,  220,
     547     2825,  159, 2825,  217,  226, 2825,  185,  154,  212,  251,
    546548      237,  270,  235,  257,  241,  205,  193,  305,  314,  333,
    547       238,  228, 2822,  225, 2822, 2242,  402,  390, 2822, 2253,
    548      2822, 2221,  235, 2822,    0, 2822,  426,    0, 2822,  417,
    549      2822,  439,  451, 2822,  498, 2219,  264, 2822, 2822, 2822,
    550      2822, 2822, 2235, 2822, 2232, 2822, 2822, 2244,  559, 2822,
    551 
    552      2261, 2822,  438,  444,  511,  534,  289,  253,  197,  380,
    553       305,    0,  319,  280,  198,  322, 2822, 2822, 2822, 2230,
    554      2822, 2822, 2822, 2227, 2224,  218,  255, 2239,  298,  350,
    555       368,  312,  440,  398,  405, 2220,  441, 2168,  446, 2196,
    556      2822,  335, 2822, 2822,  468, 2190, 2189, 2822, 2162,  439,
     549      238,  228, 2825,  225, 2825, 2255,  402,  390, 2825, 2266,
     550     2825, 2234,  235, 2825,    0, 2825,  426,    0, 2825,  417,
     551     2825,  439,  451, 2825,  498, 2232,  264, 2825, 2825, 2825,
     552     2825, 2825, 2248, 2825, 2245, 2825, 2825, 2257,  559, 2825,
     553
     554     2274, 2825,  438,  444,  511,  534,  289,  253,  197,  380,
     555      305,    0,  319,  280,  198,  322, 2825, 2825, 2825, 2243,
     556     2825, 2825, 2825, 2240, 2237,  218,  255, 2252,  298,  350,
     557      368,  312,  440,  398,  405, 2233,  441, 2181,  446, 2209,
     558     2825,  335, 2825, 2825,  468, 2203, 2202, 2825, 2175,  439,
    557559      282,  433,  372,  281,  437,  434,  428,  570,  444,  466,
    558560      464,  469,  475,  321,  492,  438,  471,  445,  474,  512,
    559       489,  503,  496,  521,  276,  515,  516, 2189,  526,  510,
     561      489,  503,  496,  521,  276,  515,  516, 2202,  526,  510,
    560562      519,  525,  543,  522,  560,  553,  523,  561,  551,  544,
    561       599,  582,  593,  584, 2822, 2822,  660,  651, 2236,  666,
    562 
    563      2822,  678, 2822, 2183,  607, 2179, 2178,    0,  693, 2822,
    564      2822,  684, 2176, 2156, 2154,    0, 2177,  578,  608,  617,
    565       654,  679,  650,  683,  684,  687, 2172,  690,  691, 2147,
    566      2146, 2822,    0,  683,  710,  686,  700, 2145, 2196, 2822,
    567       714,    0,  427,  746,  764,  786,  808,  621, 2822, 2152,
    568      2125,    0,  794, 2171,  795,  709, 2822, 2147, 2121,  832,
    569      2822, 2822, 2152, 2822, 2822,  711,  714, 2129, 2129,  717,
    570      2125, 2123, 2120,    0, 2117,    0, 2088,  694,  679,  712,
     563      599,  582,  593,  584, 2825, 2825,  660,  651, 2249,  666,
     564
     565     2825,  678, 2825, 2196,  607, 2192, 2191,    0,  693, 2825,
     566     2825,  684, 2189, 2186, 2183,    0, 2206,  578,  608,  617,
     567      654,  679,  650,  683,  684,  687, 2203,  690,  691, 2179,
     568     2159, 2825,    0,  683,  710,  686,  700, 2157, 2209, 2825,
     569      714,    0,  427,  746,  764,  786,  808,  621, 2825, 2165,
     570     2138,    0,  794, 2184,  795,  709, 2825, 2160, 2134,  832,
     571     2825, 2825, 2165, 2825, 2825,  711,  714, 2142, 2142,  717,
     572     2138, 2136, 2133,    0, 2130,    0, 2101,  694,  679,  712,
    571573      709,  711,  698,  566,  726,  743,  771,  741,  790,  784,
    572       800,  795,  742,  744,  814,  816,  818, 2118,  819,  745,
     574      800,  795,  742,  744,  814,  816,  818, 2131,  819,  745,
    573575
    574576      820,  821,  822,  823,  824,  746,  825,  748,  659,  831,
    575577      826,  833,  838,  839,  848,  850,  851,  844,  834,  857,
    576      2116,  858,  859,  860,  862,  861,  864,  865,  867,  868,
    577       866,  871,  876,  872,  878, 2113,  880,  689,  881,  882,
    578       892,  896,  893,  953,  954, 2109, 2108, 2106,    0, 2103,
    579         0,  941,  945, 2102,    0, 2101,    0, 2099,    0, 2118,
    580      2822,  940,  941, 2094, 2088,    0, 2086,    0, 2822,  953,
    581       975,  964, 2822,  981,  997, 1021, 2084, 2822, 2822,  939,
    582       940, 1006,  982, 1041,  310, 1039, 1004, 2822, 2822, 2081,
    583      2079, 2077,    0, 2074,    0, 2071,    0, 2070,    0, 2822,
     578     2129,  858,  859,  860,  862,  861,  864,  865,  867,  868,
     579      866,  871,  876,  872,  878, 2126,  880,  689,  881,  882,
     580      892,  896,  893,  953,  954, 2120, 2119, 2118,    0, 2116,
     581        0,  941,  945, 2113,    0, 2112,    0, 2111,    0, 2131,
     582     2825,  940,  941, 2108, 2105,    0, 2104,    0, 2825,  953,
     583      975,  964, 2825,  981,  997, 1021, 2102, 2825, 2825,  939,
     584      940, 1006,  982, 1041,  310, 1039, 1004, 2825, 2825, 2099,
     585     2095, 2091,    0, 2089,    0, 2087,    0, 2084,    0, 2825,
    584586
    585587      886,  941,  960,  962,  977,  976,  980,  982, 1017, 1010,
    586588     1002,  998, 1022, 1031, 1028, 1033, 1034, 1037, 1040, 1043,
    587      1038, 1041, 1053, 2072, 1055, 2070, 1045, 2067, 1056, 1061,
    588      1063, 1065, 1066, 1067, 1070, 2064, 1071, 2063, 1073, 1074,
    589      1075, 1078, 1080, 1081, 1085, 2062, 1087, 2060, 1084, 1089,
     589     1038, 1041, 1053, 2085, 1055, 2083, 1045, 2080, 1056, 1061,
     590     1063, 1065, 1066, 1067, 1070, 2077, 1071, 2076, 1073, 1074,
     591     1075, 1078, 1080, 1081, 1085, 2075, 1087, 2073, 1084, 1089,
    590592     1091, 1097, 1099, 1092, 1102, 1103, 1105, 1106, 1108,  905,
    591      1109, 1116, 1110, 1122, 2057, 1120, 1123, 1179, 2051,    0,
    592      2050,    0, 2049,    0, 2047,    0, 1166, 2044,    0, 2041,
    593         0, 2040, 2039, 2037,    0, 2034,    0, 1173, 2031, 1179,
    594      1137, 1195, 1181, 1178, 1176, 2822, 1219, 1231, 1253, 2042,
    595 
    596      2017, 2027, 2024,    0, 2021,    0, 2020,    0, 2019,    0,
    597      2017,    0, 2014,    0, 1141, 1172, 2014, 1180, 1155, 1196,
     593     1109, 1116, 1110, 1122, 2070, 1120, 1123, 1179, 2064,    0,
     594     2063,    0, 2062,    0, 2060,    0, 1166, 2057,    0, 2054,
     595        0, 2053, 2052, 2050,    0, 2047,    0, 1173, 2044, 1179,
     596     1137, 1195, 1181, 1178, 1176, 2825, 1219, 1231, 1253, 2055,
     597
     598     2030, 2040, 2037,    0, 2034,    0, 2033,    0, 2032,    0,
     599     2030,    0, 2027,    0, 1141, 1172, 2027, 1180, 1155, 1196,
    598600     1157, 1216, 1207, 1231, 1125, 1210, 1232, 1214, 1187, 1236,
    599      1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2013,
    600      1261, 1256, 2012, 1260, 1263, 1264, 1257, 2010, 1271, 1268,
    601      1269, 1273, 2007, 1275, 1282, 2006, 1283, 1284, 2005, 1276,
    602      1286, 1289, 2003, 1294, 1291, 1296, 1295, 1297, 1310, 2000,
    603      1305, 1308, 1999, 1307, 1300, 1998, 2046, 1960,    0, 1958,
    604         0, 1957,    0, 1954,    0, 1951,    0, 1950,    0, 1949,
    605         0, 1947,    0, 1355, 1361, 1389, 1372, 1944, 2822, 1378,
    606 
    607      1325, 1365, 1379, 1941, 2822, 1940,    0, 1939,    0, 1937,
    608         0, 1934,    0,    0,    0, 1936,    0, 1366, 1312, 1311,
     601     1235, 1237, 1238, 1272, 1249, 1252, 1250, 1253, 1254, 2026,
     602     1261, 1256, 2025, 1260, 1263, 1264, 1257, 2023, 1271, 1268,
     603     1269, 1273, 2020, 1275, 1282, 2017, 1283, 1284, 2016, 1276,
     604     1286, 1289, 2015, 1294, 1291, 1296, 1295, 1297, 1310, 2013,
     605     1305, 1308, 2010, 1307, 1300, 2009, 2058, 2003,    0, 2000,
     606        0, 1999,    0, 1998,    0, 1996,    0, 1963,    0, 1961,
     607        0, 1960,    0, 1355, 1361, 1389, 1372, 1957, 2825, 1378,
     608
     609     1325, 1365, 1379, 1954, 2825, 1953,    0, 1952,    0, 1950,
     610        0, 1947,    0,    0,    0, 1947,    0, 1366, 1312, 1311,
    609611     1341, 1323, 1368, 1369, 1374, 1356, 1383, 1372, 1388, 1390,
    610612     1393, 1395, 1396, 1398, 1400, 1431, 1406, 1407, 1411, 1408,
    611      1413, 1414, 1935, 1409, 1416, 1419, 1933, 1930, 1929, 1422,
    612      1424, 1928, 1429, 1926, 1923, 1425, 1430, 1919, 1915, 1911,
    613      1895, 1894, 1893, 1436, 1433, 1891, 1439, 1440, 1938, 2822,
    614      1884,    0, 1883,    0,    0,    0, 1884,    0,    0,    0,
    615      2822,    0,    0,    0,    0, 1486, 1878, 2822, 2822, 1492,
    616      1877,    0, 1876,    0,    0,    0,    0, 1874, 1447, 1444,
    617 
    618      1874, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1873, 1486,
     613     1413, 1414, 1946, 1409, 1416, 1419, 1945, 1943, 1940, 1422,
     614     1424, 1939, 1429, 1938, 1936, 1425, 1430, 1933, 1932, 1931,
     615     1929, 1926, 1922, 1436, 1433, 1918, 1439, 1440, 1964, 2825,
     616     1895,    0, 1894,    0,    0,    0, 1896,    0,    0,    0,
     617     2825,    0,    0,    0,    0, 1486, 1891, 2825, 2825, 1492,
     618     1888,    0, 1887,    0,    0,    0,    0, 1886, 1447, 1444,
     619
     620     1887, 1449, 1471, 1479, 1450, 1480, 1482, 1469, 1884, 1486,
    619621     1490, 1488, 1502, 1452, 1510, 1504, 1491, 1519, 1506, 1498,
    620      1508, 1512, 1513, 1514, 1515, 1872, 1870, 1517, 1867, 1866,
    621      1518, 1520, 1523, 1865, 1521, 1525,    0,    0,    0, 1860,
    622      1857, 1856, 1575,    0, 1855, 1853, 1850, 1849, 1848, 1849,
    623      1846, 1845, 1844, 1531, 1536, 1527, 1528, 1552, 1533, 1537,
    624      1539, 1555, 1557, 1569, 1842, 1560, 1839, 1561, 1559, 1568,
    625      1572, 1567, 1573, 1838, 1837, 1835, 1828, 1574, 1826, 1825,
    626      1819, 1818, 1817, 1815, 1798, 1789, 1788, 1785, 1778, 1775,
    627      1768, 1766, 1576, 1768, 1577, 1581, 1580, 1579, 1584, 1585,
    628 
    629      1747, 1586, 1615, 1590, 1746, 1591, 1592, 1602, 1600, 1594,
    630      1606, 1742, 1735, 1733, 1732, 1690, 1689, 1686, 1685, 1683,
    631      1682, 1678, 1677, 1674, 1676, 1607, 1611, 1614, 1612, 1608,
    632      1616, 1620, 1675, 1623, 1624, 1530, 1453, 1630, 1625, 1629,
    633      1438, 1354, 1319, 1318, 1267, 1212, 1210, 1208, 1631, 1636,
    634      1178, 1639, 1635, 1643, 1177, 1644, 1646, 1650, 1126,  964,
    635       937,  903, 1651, 1652, 1654, 1655, 1656, 1658,  788,  752,
    636      1660,  607,  487, 1662, 1663,  394,  357, 1664, 1666, 1668,
    637      1670, 1669, 1672, 1674,  233,  137, 2822, 1747, 1760, 1773,
    638      1783, 1793, 1806, 1816, 1829, 1842, 1855, 1863, 1873, 1880,
    639 
    640      1887, 1894, 1901, 1908, 1915, 1922, 1929, 1936, 1949, 1956,
    641      1960, 1968, 1971, 1978, 1985, 1992, 1995, 2002, 2008, 2021,
    642      2034, 2041, 2048, 2055, 2062, 2065, 2072, 2075, 2082, 2085,
    643      2092, 2095, 2102, 2105, 2112, 2115, 2122, 2125, 2132, 2140,
    644      2147, 2154, 2161, 2168, 2171, 2178, 2181, 2188, 2191, 2198,
    645      2204, 2217, 2224, 2231, 2234, 2241, 2244, 2251, 2254, 2261,
    646      2264, 2271, 2274, 2281, 2284, 2291, 2298, 2301, 2308, 2311,
    647      2318, 2325, 2332, 2335, 2342, 2345, 2352, 2355, 2362, 2365,
    648      2372, 2375, 2382, 2388, 2401, 2408, 2415, 2418, 2425, 2428,
    649      2435, 2438, 2445, 2448, 2455, 2458, 2465, 2468, 2475, 2478,
    650 
    651      2485, 2488, 2495, 2502, 2505, 2512, 2515, 2522, 2525, 2532,
    652      2535, 2538, 2544, 2551, 2560, 2567, 2574, 2577, 2584, 2587,
    653      2590, 2596, 2603, 2606, 2609, 2612, 2615, 2618, 2621, 2624,
    654      2631, 2634, 2641, 2644, 2647, 2650, 2653, 2663, 2670, 2673,
    655      2676, 2679, 2686, 2693, 2700, 2703, 2710, 2717, 2724, 2731,
    656      2738, 2745, 2752, 2759, 2766, 2773, 2780, 2787, 2794, 2801,
    657      2808
     622     1508, 1512, 1513, 1514, 1515, 1883, 1882, 1518, 1880, 1877,
     623     1517, 1520, 1523, 1876, 1521, 1525,    0,    0,    0, 1872,
     624     1870, 1867, 1575,    0, 1866, 1865, 1863, 1860, 1859, 1861,
     625     1859, 1856, 1855, 1531, 1538, 1527, 1528, 1530, 1533, 1552,
     626     1539, 1554, 1553, 1586, 1854, 1559, 1852, 1560, 1561, 1564,
     627     1570, 1572, 1571, 1849, 1574, 1848, 1847, 1845, 1575, 1842,
     628     1841, 1837, 1835, 1828, 1826, 1825, 1822, 1821, 1820, 1818,
     629     1801, 1792, 1791, 1576, 1791, 1579, 1577, 1580, 1582, 1581,
     630
     631     1585, 1784, 1589, 1616, 1593, 1781, 1591, 1599, 1605, 1592,
     632     1606, 1609, 1610, 1771, 1769, 1768, 1747, 1746, 1745, 1738,
     633     1736, 1735, 1693, 1689, 1688, 1687, 1689, 1611, 1612, 1614,
     634     1615, 1618, 1625, 1621, 1686, 1683, 1627, 1682, 1681, 1631,
     635     1635, 1441, 1637, 1677, 1674, 1354, 1319, 1318, 1267, 1212,
     636     1210, 1639, 1640, 1211, 1647, 1623, 1649, 1178, 1652, 1653,
     637     1657, 1177, 1126,  964,  937,  903, 1641, 1643, 1659, 1663,
     638     1664, 1665,  788,  752, 1629,  607,  487, 1666, 1669,  394,
     639      357, 1670, 1672, 1671, 1674, 1676, 1675, 1678,  233,  137,
     640     2825, 1750, 1763, 1776, 1786, 1796, 1809, 1819, 1832, 1845,
     641
     642     1858, 1866, 1876, 1883, 1890, 1897, 1904, 1911, 1918, 1925,
     643     1932, 1939, 1952, 1959, 1963, 1971, 1974, 1981, 1988, 1995,
     644     1998, 2005, 2011, 2024, 2037, 2044, 2051, 2058, 2065, 2068,
     645     2075, 2078, 2085, 2088, 2095, 2098, 2105, 2108, 2115, 2118,
     646     2125, 2128, 2135, 2143, 2150, 2157, 2164, 2171, 2174, 2181,
     647     2184, 2191, 2194, 2201, 2207, 2220, 2227, 2234, 2237, 2244,
     648     2247, 2254, 2257, 2264, 2267, 2274, 2277, 2284, 2287, 2294,
     649     2301, 2304, 2311, 2314, 2321, 2328, 2335, 2338, 2345, 2348,
     650     2355, 2358, 2365, 2368, 2375, 2378, 2385, 2391, 2404, 2411,
     651     2418, 2421, 2428, 2431, 2438, 2441, 2448, 2451, 2458, 2461,
     652
     653     2468, 2471, 2478, 2481, 2488, 2491, 2498, 2505, 2508, 2515,
     654     2518, 2525, 2528, 2535, 2538, 2541, 2547, 2554, 2563, 2570,
     655     2577, 2580, 2587, 2590, 2593, 2599, 2606, 2609, 2612, 2615,
     656     2618, 2621, 2624, 2627, 2634, 2637, 2644, 2647, 2650, 2653,
     657     2656, 2666, 2673, 2676, 2679, 2682, 2689, 2696, 2703, 2706,
     658     2713, 2720, 2727, 2734, 2741, 2748, 2755, 2762, 2769, 2776,
     659     2783, 2790, 2797, 2804, 2811
    658660    } ;
    659661
    660 static yyconst flex_int16_t yy_def[1062] =
     662static yyconst flex_int16_t yy_def[1066] =
    661663    {   0,
    662       887,    1,  888,  888,  887,    5,  889,  889,  890,  890,
    663       887,  887,  887,  887,  887,  887,  887,  891,  887,  887,
    664       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    665       887,   31,  887,  887,  887,  887,  887,  887,  892,  891,
    666       887,  887,  887,  887,  891,  887,  891,  891,  891,  891,
     664      891,    1,  892,  892,  891,    5,  893,  893,  894,  894,
     665      891,  891,  891,  891,  891,  891,  891,  895,  891,  891,
    667666      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    668       891,  891,  887,  887,  887,  887,  887,  893,  887,  887,
    669       887,  894,  887,  887,  895,  887,  887,  896,  887,  887,
    670       887,  887,  887,  887,  887,  891,  887,  887,  887,  887,
    671       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    672 
    673       897,  887,   99,   30,  887,  887,  887,  887,  898,   30,
    674       887,   31,  887,  887,   31,  887,  887,  887,  887,  887,
    675       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    676       887,  887,  887,  887,  887,  887,  887,  887,  887,  899,
    677       887,  887,  887,  887,  891,  900,  901,  887,  887,  891,
     667      891,   31,  891,  891,  891,  891,  891,  891,  896,  895,
     668      891,  891,  891,  891,  895,  891,  895,  895,  895,  895,
     669      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
     670      895,  895,  891,  891,  891,  891,  891,  897,  891,  891,
     671      891,  898,  891,  891,  899,  891,  891,  900,  891,  891,
     672      891,  891,  891,  891,  891,  895,  891,  891,  891,  891,
     673      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     674
     675      901,  891,   99,   30,  891,  891,  891,  891,  902,   30,
     676      891,   31,  891,  891,   31,  891,  891,  891,  891,  891,
     677      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     678      891,  891,  891,  891,  891,  891,  891,  891,  891,  903,
     679      891,  891,  891,  891,  895,  904,  905,  891,  891,  895,
     680      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
     681      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
     682      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
     683      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
     684      895,  895,  895,  895,  891,  891,  891,  897,  897,  897,
     685
     686      891,  897,  891,  898,  891,  906,  907,  899,  891,  891,
     687      891,  891,  908,  909,  910,  900,  891,  891,  891,  891,
     688      891,  891,  891,  891,  891,  891,  891,  891,  891,  911,
     689      912,  891,   99,  891,  891,  891,  891,   99,  913,  891,
     690      891,  104,  104,  891,  891,  891,  891,  891,  891,  891,
     691      891,  914,  915,  916,  891,  891,  891,  891,  891,  891,
     692      891,  891,  891,  891,  891,  891,  891,  891,  903,  891,
     693      917,  918,  919,  920,  921,  922,  891,  923,  923,  923,
     694      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
     695      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
     696
     697      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
     698      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
     699      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
     700      923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
     701      923,  923,  923,  924,  925,  926,  927,  928,  929,  930,
     702      931,  891,  891,  932,  933,  934,  935,  936,  937,  891,
     703      891,  891,  891,  891,  938,  939,  940,  941,  891,  891,
     704      891,  891,  891,  891,  891,  371,  376,  891,  891,  942,
     705      943,  944,  891,  891,  891,  944,  891,  891,  891,  945,
     706      946,  947,  948,  949,  950,  951,  952,  953,  954,  891,
     707
     708      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
     709      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
     710      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
     711      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
     712      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
     713      955,  955,  955,  955,  955,  955,  955,  955,  955,  955,
     714      955,  955,  955,  955,  955,  955,  955,  956,  957,  958,
     715      959,  960,  961,  962,  963,  964,  891,  965,  966,  967,
     716      968,  969,  969,  970,  971,  972,  973,  891,  488,  891,
     717      974,  891,  974,  891,  891,  891,  891,  891,  891,  891,
     718
     719      891,  975,  976,  977,  978,  979,  980,  981,  982,  983,
     720      984,  985,  986,  987,  988,  988,  988,  988,  988,  988,
     721      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
     722      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
     723      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
     724      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
     725      988,  988,  988,  988,  988,  988,  988,  988,  988,  988,
     726      988,  988,  988,  988,  988,  988,  989,  990,  991,  992,
     727      993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
     728     1003, 1004, 1005,  891,  891,  891,  891, 1006,  891,  596,
     729
     730      891,  891,  891,  600,  891, 1007, 1008, 1009, 1010, 1011,
     731     1012, 1013, 1014, 1015, 1016, 1017, 1018, 1017, 1017, 1017,
     732     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
     733     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
     734     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
     735     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
     736     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1019,  891,
     737     1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
     738      891, 1030, 1031, 1032, 1033,  891,  686,  891,  891,  891,
     739     1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1042,
     740
     741     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     742     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     743     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     744     1042, 1042, 1042, 1042, 1042, 1042, 1043, 1044, 1045, 1046,
     745     1047, 1048,  891, 1049, 1034, 1036, 1050, 1051, 1041, 1042,
     746     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     747     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     748     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     749     1042, 1052, 1053, 1046, 1054, 1047, 1055, 1048, 1056, 1057,
     750     1050, 1058, 1051, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     751
     752     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     753     1042, 1042, 1042, 1059, 1052, 1060, 1053, 1061, 1054, 1062,
     754     1055, 1063, 1056, 1064, 1057, 1058, 1042, 1042, 1042, 1042,
     755     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     756     1042, 1042, 1042, 1065, 1059, 1060, 1061, 1062, 1036, 1063,
     757     1064, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     758     1042, 1042, 1042, 1042, 1065, 1036, 1042, 1042, 1042, 1042,
     759     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     760     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
     761        0,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     762
    678763      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    679764      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    680765      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    681766      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    682       891,  891,  891,  891,  887,  887,  887,  893,  893,  893,
    683 
    684       887,  893,  887,  894,  887,  902,  903,  895,  887,  887,
    685       887,  887,  904,  905,  906,  896,  887,  887,  887,  887,
    686       887,  887,  887,  887,  887,  887,  887,  887,  887,  907,
    687       908,  887,   99,  887,  887,  887,  887,   99,  909,  887,
    688       887,  104,  104,  887,  887,  887,  887,  887,  887,  887,
    689       887,  910,  911,  912,  887,  887,  887,  887,  887,  887,
    690       887,  887,  887,  887,  887,  887,  887,  887,  899,  887,
    691       913,  914,  915,  916,  917,  918,  887,  919,  919,  919,
    692       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    693       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    694 
    695       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    696       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    697       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    698       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    699       919,  919,  919,  920,  921,  922,  923,  924,  925,  926,
    700       927,  887,  887,  928,  929,  930,  931,  932,  933,  887,
    701       887,  887,  887,  887,  934,  935,  936,  937,  887,  887,
    702       887,  887,  887,  887,  887,  371,  376,  887,  887,  938,
    703       939,  940,  887,  887,  887,  940,  887,  887,  887,  941,
    704       942,  943,  944,  945,  946,  947,  948,  949,  950,  887,
    705 
    706       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    707       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    708       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    709       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    710       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    711       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    712       951,  951,  951,  951,  951,  951,  951,  952,  953,  954,
    713       955,  956,  957,  958,  959,  960,  887,  961,  962,  963,
    714       964,  965,  965,  966,  967,  968,  969,  887,  488,  887,
    715       970,  887,  970,  887,  887,  887,  887,  887,  887,  887,
    716 
    717       887,  971,  972,  973,  974,  975,  976,  977,  978,  979,
    718       980,  981,  982,  983,  984,  984,  984,  984,  984,  984,
    719       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    720       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    721       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    722       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    723       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    724       984,  984,  984,  984,  984,  984,  985,  986,  987,  988,
    725       989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
    726       999, 1000, 1001,  887,  887,  887,  887, 1002,  887,  596,
    727 
    728       887,  887,  887,  600,  887, 1003, 1004, 1005, 1006, 1007,
    729      1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013,
    730      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    731      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    732      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    733      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    734      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015,  887,
    735      1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
    736       887, 1026, 1027, 1028, 1029,  887,  686,  887,  887,  887,
    737      1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038,
    738 
    739      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    740      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    741      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    742      1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042,
    743      1043, 1044,  887, 1045, 1030, 1032, 1046, 1047, 1037, 1038,
    744      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    745      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    746      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    747      1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046,
    748      1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    749 
    750      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    751      1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059,
    752      1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038,
    753      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    754      1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038,
    755      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    756      1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    757      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    758      1038, 1038, 1038, 1038, 1038, 1038,    0,  887,  887,  887,
    759       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    760 
    761       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    762       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    763       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    764       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    765       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    766       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    767       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    768       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    769       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    770       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    771 
    772       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    773       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    774       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    775       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    776       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    777       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    778       887
     767      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     768      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     769      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     770      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     771      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     772      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     773
     774      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     775      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     776      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     777      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     778      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     779      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     780      891,  891,  891,  891,  891
    779781    } ;
    780782
    781 static yyconst flex_int16_t yy_nxt[2908] =
     783static yyconst flex_int16_t yy_nxt[2911] =
    782784    {   0,
    783785       12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
     
    804806
    805807       83,   83,   83,   82,   91,   93,   87,  142,  146,   98,
    806        95,   99,   99,   99,   99,   99,   99,  252,  887,   94,
     808       95,   99,   99,   99,   99,   99,   99,  252,  891,   94,
    807809      100,   85,   96,   97,   85,  101,  161,  118,  143,   77,
    808810       77,   77,   77,  144,  147,  102,  103,   87,  104,  104,
     
    825827      305,  200,  201,  190,  257,  136,  200,  257,  137,  263,
    826828
    827       887,  264,  192,  197,   81,   82,   82,   82,  197,   87,
     829      891,  264,  192,  197,   81,   82,   82,   82,  197,   87,
    828830      272,  198,  202,  202,  202,  202,  202,  202,   80,   81,
    829831       82,   82,   82,   80,   87,  138,  139,  209,  210,  263,
    830       887,  264,  209,  282,  211,  255,  263,  267,  264,  211,
    831        82,   81,   82,   82,   82,   82,   87,  887,  212,  212,
    832       212,  212,   82,   81,   83,   83,   83,   82,  887,  211,
     832      891,  264,  209,  282,  211,  255,  263,  267,  264,  211,
     833       82,   81,   82,   82,   82,   82,   87,  891,  212,  212,
     834      212,  212,   82,   81,   83,   83,   83,   82,  891,  211,
    833835       99,   99,   99,   99,   99,   99,  242,  242,  242,  242,
    834836      266,  263,  263,  264,  264,  213,  143,  263,  211,  264,
    835837       87,  144,  375,  211,  211,   87,   87,  211,  211,   87,
    836        87,   87,  286,  241,  887,  211,   87,   87,  211,  243,
     838       87,   87,  286,  241,  891,  211,   87,   87,  211,  243,
    837839
    838840      211,  214,  211,  281,  215,  217,  278,  284,  285,  218,
    839841      219,  307,  298,  279,  220,  221,   87,  222,   87,  223,
    840        87,   87,  887,   87,  309,  300,   87,   87,  224,  225,
     842       87,   87,  891,   87,  309,  300,   87,   87,  224,  225,
    841843      226,  103,  303,  105,  105,  105,  105,  105,  105,   87,
    842844      299,   87,  301,  302,   87,  304,  308,  310,   87,  227,
     
    885887       87,  450,   87,   87,   87,  452,  455,  454,   87,  453,
    886888      457,  462,  460,  461,   87,   87,  458,  464,   87,  515,
    887       459,  463,  465,  466,  344,  201,  201,   87,  887,  344,
     889      459,  463,  465,  466,  344,  201,  201,   87,  891,  344,
    888890      467,  345,  199,  211,  211,  211,  211,  352,  352,  352,
    889891      352,  360,  360,  361,  361,  371,  371,  371,  371,  371,
    890892      371,  370,  569,  370,  492,  492,  371,  371,  371,  371,
    891       371,  371,  887,   87,  493,  494,  477,  488,  488,  488,
     893      371,  371,  891,   87,  493,  494,  477,  488,  488,  488,
    892894
    893895      488,  488,  488,  233,  233,  233,  233,  233,  233,  516,
     
    896898      489,  496,   87,  518,   87,  236,  374,  236,  519,  520,
    897899      237,  521,  236,  376,  376,  376,  376,  376,  376,  383,
    898        87,  384,  375,  496,   87,  385,  522,  496,  497,  887,
     900       87,  384,  375,  496,   87,  385,  522,  496,  497,  891,
    899901      497,  386,   87,  498,  498,  498,  498,  498,  498,   87,
    900902      525,  495,  526,  387,   87,  524,  377,  384,  523,  496,
     
    919921      236,  498,  498,  498,  498,  498,  498,  620,   87,  492,
    920922      597,  599,  492,  600,  600,  600,  600,  600,  600,   87,
    921       631,  622,   87,  887,  625,  887,   87,  862,   87,  601,
     923      631,  622,   87,   87,  625,  891,   87,  891,   87,  601,
    922924      497,  602,  497,  603,  602,  498,  498,  498,  498,  498,
    923925      498,  624,  628,   87,   87,  630,  604,   87,   87,   87,
     
    926928      634,   87,   87,  635,   87,   87,   87,  642,   87,   87,
    927929      637,  641,   87,   87,  640,   87,   87,  643,  647,  639,
    928        87,   87,  887,   87,   87,   87,  638,   87,   87,  644,
     930       87,   87,  866,   87,   87,   87,  638,   87,   87,  644,
    929931      645,  646,  648,  650,   87,   87,   87,  649,   87,  653,
    930932      651,   87,  652,   87,  654,  655,   87,   87,   87,   87,
    931933      656,  657,   87,  660,  659,  661,  664,   87,  658,   87,
    932934       87,  663,   87,   87,   87,  668,  665,  688,  688,  662,
    933       666,  701,  702,  887,  887,   87,  667,  488,  488,  488,
     935      666,  701,  702,  891,  891,   87,  667,  488,  488,  488,
    934936      488,  488,  488,  596,  596,  596,  596,  596,  596,  595,
    935937      688,  595,  704,   87,  596,  596,  596,  596,  596,  596,
    936938
    937       600,  600,  600,  600,  600,  600,  703,  688,   87,  887,
     939      600,  600,  600,  600,  600,  600,  703,  688,   87,  891,
    938940      594,  686,  686,  686,  686,  686,  686,  689,   87,  689,
    939941       87,   87,  689,  699,   87,  708,   87,  601,  706,  602,
     
    944946      715,   87,  721,  719,   87,  724,   87,   87,  722,  720,
    945947      727,   87,   87,   87,  725,   87,  731,  723,   87,  732,
    946       726,   87,   87,  861,  728,  734,   87,  733,  730,   87,
    947 
    948       735,   87,   87,  729,   87,   87,  751,  736,  686,  686,
     948      726,   87,   87,   87,  728,  734,   87,  733,  730,   87,
     949
     950      735,   87,   87,  729,   87,  863,  751,  736,  686,  686,
    949951      686,  686,  686,  686,  600,  600,  600,  600,  600,  600,
    950952      750,   87,  755,   87,  601,  763,  602,  752,  603,  602,
     
    954956       87,  768,   87,  769,   87,   87,   87,   87,  770,   87,
    955957       87,   87,   87,   87,  771,   87,  774,   87,  772,   87,
    956        87,  779,   87,   87,  795,   87,  780,  773,   87,   87,
    957       776,   87,  775,  803,  777,  796,  778,  686,  686,  686,
    958 
    959       686,  686,  686,  793,   87,  794,  799,   87,  798,   87,
    960       801,   87,   87,   87,  797,  804,  805,  800,  806,   87,
    961        87,   87,  802,  807,   87,   87,   87,  808,   87,   87,
    962       743,   87,   87,   87,  809,  828,   87,   87,   87,  830,
    963       831,  833,   87,   87,   87,  834,   87,  836,  810,  811,
    964       826,  827,   87,  829,   87,  825,  832,  837,   87,   87,
    965        87,  838,  839,   87,   87,  835,   87,   87,   87,  851,
    966       850,  855,   87,  852,  840,   87,   87,   87,  853,  857,
    967       849,   87,   87,   87,  854,  858,  859,   87,   87,  856,
    968       860,   87,  863,  864,  865,   87,   87,  866,   87,  868,
    969 
    970       867,  869,   87,   87,   87,  870,   87,   87,   87,  873,
    971        87,  875,   87,  876,   87,   87,   87,  874,   87,  872,
    972        87,   87,   87,  871,   87,  880,   87,   87,   87,  887,
    973       879,  881,  887,  848,  877,  878,  886,  887,  847,  884,
    974       887,  845,  882,  883,  887,  844,  885,   69,   69,   69,
     958       87,  780,   87,   87,  796,   87,  781,  773,  775,  777,
     959       87,   87,  798,  776,  778,  797,  779,  686,  686,  686,
     960
     961      686,  686,  686,  794,   87,   87,   87,  795,  799,  802,
     962      804,   87,   87,   87,  805,  806,   87,  801,  803,  808,
     963      807,  800,   87,   87,   87,  809,   87,   87,   87,   87,
     964      743,   87,   87,   87,   87,  830,  832,   87,   87,  810,
     965      833,   87,  835,   87,   87,   87,  811,  829,  836,  812,
     966      813,   87,  828,  840,  838,  827,  831,   87,   87,  834,
     967      839,   87,   87,   87,   87,  837,   87,   87,   87,  854,
     968       87,  853,  842,   87,  841,   87,  855,   87,  843,   87,
     969      858,   87,  860,   87,  852,  870,  861,   87,  856,   87,
     970      859,   87,   87,   87,  857,   87,  862,  868,  864,   87,
     971
     972      867,   87,  869,  881,   87,   87,  871,  872,  873,   87,
     973      876,   87,  874,  875,  877,   87,   87,   87,   87,  879,
     974      880,   87,   87,   87,   87,  878,   87,   87,   87,  891,
     975       87,  884,  865,   87,   87,   87,  883,  885,   87,  882,
     976      890,   87,  891,  891,  851,  886,  888,  887,  891,  889,
    975977       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
    976        75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
    977        75,   75,   75,   78,   78,   78,   78,   78,   78,   78,
    978        78,   78,   78,   78,   78,   78,   86,  887,  843,   86,
    979       887,   86,   86,   86,   86,   86,  140,  842,   87,   87,
    980 
    981       140,  140,  140,  140,  140,  140,  199,  199,  199,  199,
    982       199,  199,  199,  199,  199,  199,  199,  199,  199,  204,
    983        87,  887,  204,  824,  204,  204,  204,  204,  204,  208,
    984       887,  208,  208,  823,  208,  208,  208,  208,  208,  208,
    985       821,  208,  216,  887,  819,  216,  216,  216,  216,  216,
    986       216,  216,  216,  887,  216,  239,  239,  239,  239,  239,
    987       239,  239,  239,  239,  239,  239,  239,  239,  253,  253,
    988       817,  253,  887,  815,  813,  253,  269,   87,   87,  269,
    989        87,  269,  269,  269,  269,  269,  273,   87,  273,   87,
    990        87,   87,  273,  275,   87,  275,   87,   87,   87,  275,
    991 
    992       348,   87,  348,  887,  792,  790,  348,  350,  887,  350,
    993       887,  787,  785,  350,  354,  783,  354,   87,   87,   87,
    994       354,  356,   87,  356,   87,   87,   87,  356,  358,  749,
    995       358,  746,  745,  743,  358,  365,  205,  365,  739,  738,
    996       670,  365,  367,   87,  367,   87,   87,   87,  367,  239,
     978       69,   69,   69,   75,   75,   75,   75,   75,   75,   75,
     979       75,   75,   75,   75,   75,   75,   78,   78,   78,   78,
     980       78,   78,   78,   78,   78,   78,   78,   78,   78,   86,
     981      850,  891,   86,  848,   86,   86,   86,   86,   86,  140,
     982
     983      891,  847,  891,  140,  140,  140,  140,  140,  140,  199,
     984      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
     985      199,  199,  204,  846,  891,  204,  845,  204,  204,  204,
     986      204,  204,  208,   87,  208,  208,   87,  208,  208,  208,
     987      208,  208,  208,   87,  208,  216,  891,  826,  216,  216,
     988      216,  216,  216,  216,  216,  216,  891,  216,  239,  239,
    997989      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
    998       239,  239,  380,   87,  380,  382,  382,   87,  382,  382,
    999       382,   87,  382,  253,  253,   87,  253,  392,   87,  392,
    1000        87,   87,   87,  392,  394,   87,  394,   87,   87,  697,
    1001       394,  396,  696,  396,  694,  692,  690,  396,  273,  598,
    1002 
    1003       273,  398,  685,  398,  684,  682,  680,  398,  275,  678,
    1004       275,   86,  676,  674,   86,  672,   86,   86,   86,   86,
    1005        86,  199,  199,  199,  199,  199,  199,  199,  199,  199,
    1006       199,  199,  199,  199,  468,  468,  468,  468,  468,  468,
    1007       468,  468,  468,  468,  468,  468,  468,  469,  670,  469,
    1008        87,   87,   87,  469,  471,   87,  471,   87,   87,   87,
    1009       471,  473,   87,  473,   87,   87,   87,  473,  348,  617,
    1010       348,  475,  615,  475,  613,  611,  609,  475,  350,  607,
    1011       350,  478,  502,  478,  605,  605,  594,  478,  354,  593,
    1012       354,  480,  591,  480,  483,  483,  589,  480,  356,  587,
    1013 
    1014       356,  482,  585,  482,  583,  581,  579,  482,  358,   87,
    1015       358,  484,   87,  484,   87,   87,   87,  484,  365,   87,
    1016       365,  486,   87,  486,   87,  514,  512,  486,  367,  510,
    1017       367,  491,  508,  491,  506,  491,  504,  491,  380,  490,
    1018       380,  487,  380,  485,  380,  382,  382,  361,  382,  382,
    1019       382,  361,  382,  503,  483,  503,  481,  479,  476,  503,
    1020       505,  474,  505,  472,  470,   87,  505,  507,   87,  507,
    1021        87,  400,  399,  507,  392,  397,  392,  509,  395,  509,
    1022       393,  270,  265,  509,  394,  264,  394,  511,  389,  511,
    1023       389,  252,  379,  511,  396,  379,  396,  513,  240,  513,
    1024 
    1025       374,  368,  366,  513,  398,  364,  398,   86,  360,  359,
    1026        86,  357,   86,   86,   86,   86,   86,  468,  468,  468,
     990      239,  253,  253,  825,  253,  823,  891,  821,  253,  269,
     991      891,  819,  269,  891,  269,  269,  269,  269,  269,  273,
     992      817,  273,  815,   87,   87,  273,  275,   87,  275,   87,
     993
     994       87,   87,  275,  348,   87,  348,   87,   87,   87,  348,
     995      350,   87,  350,   87,  891,  793,  350,  354,  791,  354,
     996      891,  891,  788,  354,  356,  786,  356,  784,   87,   87,
     997      356,  358,   87,  358,   87,   87,   87,  358,  365,   87,
     998      365,  749,  746,  745,  365,  367,  743,  367,  205,  739,
     999      738,  367,  239,  239,  239,  239,  239,  239,  239,  239,
     1000      239,  239,  239,  239,  239,  380,  670,  380,  382,  382,
     1001       87,  382,  382,  382,   87,  382,  253,  253,   87,  253,
     1002      392,   87,  392,   87,   87,   87,  392,  394,   87,  394,
     1003       87,   87,   87,  394,  396,   87,  396,   87,   87,   87,
     1004
     1005      396,  273,  697,  273,  398,  696,  398,  694,  692,  690,
     1006      398,  275,  598,  275,   86,  685,  684,   86,  682,   86,
     1007       86,   86,   86,   86,  199,  199,  199,  199,  199,  199,
     1008      199,  199,  199,  199,  199,  199,  199,  468,  468,  468,
    10271009      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
    1028       578,  355,  578,  351,  349,  205,  578,  469,  201,  469,
    1029       580,   87,  580,  277,  276,  274,  580,  471,  270,  471,
    1030       582,  265,  582,  268,  265,  263,  582,  473,  262,  473,
    1031       584,  261,  584,  240,  232,   85,  584,  475,   85,  475,
    1032       586,   87,  586,  205,  203,   85,  586,  478,  122,  478,
    1033       588,  117,  588,   87,  887,   70,  588,  480,   70,  480,
    1034       482,  887,  482,  887,  887,  887,  482,  590,  887,  590,
    1035 
    1036       887,  887,  887,  590,  484,  887,  484,  592,  887,  592,
    1037       887,  887,  887,  592,  486,  887,  486,  491,  887,  491,
    1038       887,  491,  887,  491,  382,  887,  382,  887,  887,  887,
    1039       382,  606,  887,  606,  887,  887,  887,  606,  503,  887,
    1040       503,  608,  887,  608,  887,  887,  887,  608,  505,  887,
    1041       505,  610,  887,  610,  887,  887,  887,  610,  507,  887,
    1042       507,  612,  887,  612,  887,  887,  887,  612,  509,  887,
    1043       509,  614,  887,  614,  887,  887,  887,  614,  511,  887,
    1044       511,  616,  887,  616,  887,  887,  887,  616,  513,  887,
    1045       513,   86,  887,  887,   86,  887,   86,   86,   86,   86,
    1046 
    1047        86,  669,  669,  669,  669,  669,  669,  669,  669,  669,
    1048       669,  669,  669,  669,  671,  887,  671,  887,  887,  887,
    1049       671,  578,  887,  578,  673,  887,  673,  887,  887,  887,
    1050       673,  580,  887,  580,  675,  887,  675,  887,  887,  887,
    1051       675,  582,  887,  582,  677,  887,  677,  887,  887,  887,
    1052       677,  584,  887,  584,  679,  887,  679,  887,  887,  887,
    1053       679,  586,  887,  586,  681,  887,  681,  887,  887,  887,
    1054       681,  588,  887,  588,  683,  887,  683,  887,  887,  887,
    1055       683,  590,  887,  590,   86,  887,   86,  887,  887,  887,
    1056        86,  592,  887,  592,  491,  887,  491,  887,  887,  887,
    1057 
    1058       491,  691,  887,  691,  887,  887,  887,  691,  606,  887,
    1059       606,  693,  887,  693,  887,  887,  887,  693,  608,  887,
    1060       608,  695,  887,  695,  887,  887,  887,  695,  610,  887,
    1061       610,  140,  887,  140,  887,  887,  887,  140,  612,  887,
    1062       612,  698,  887,  698,  614,  887,  614,   86,  887,  887,
    1063        86,  887,   86,   86,   86,   86,   86,  616,  887,  616,
    1064       669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
    1065       669,  669,  669,  737,  887,  737,  887,  887,  887,  737,
    1066       671,  887,  671,  204,  887,  204,  887,  887,  887,  204,
    1067       673,  887,  673,  740,  887,  740,  675,  887,  675,  204,
    1068 
    1069       887,  887,  204,  887,  204,  204,  204,  204,  204,  677,
    1070       887,  677,  741,  887,  741,  679,  887,  679,  681,  887,
    1071       681,  742,  887,  742,  683,  887,  683,   86,  887,   86,
    1072       744,  887,  744,  887,  887,  887,  744,  691,  887,  691,
    1073       269,  887,  269,  887,  887,  887,  269,  693,  887,  693,
    1074       747,  887,  747,  695,  887,  695,  140,  887,  140,  748,
    1075       887,  748,  887,  887,  887,  748,   86,  887,  887,   86,
    1076       887,   86,   86,   86,   86,   86,  781,  887,  781,  737,
    1077       887,  737,  204,  887,  204,  782,  887,  782,  887,  887,
    1078       887,  782,  784,  887,  784,  887,  887,  887,  784,  786,
    1079 
    1080       887,  786,  887,  887,  887,  786,  788,  887,  788,  789,
    1081       887,  789,  887,  887,  887,  789,  791,  887,  791,  887,
    1082       887,  887,  791,  812,  887,  812,  887,  887,  887,  812,
    1083       814,  887,  814,  887,  887,  887,  814,  816,  887,  816,
    1084       887,  887,  887,  816,  818,  887,  818,  887,  887,  887,
    1085       818,  820,  887,  820,  887,  887,  887,  820,  822,  887,
    1086       822,  887,  887,  887,  822,  616,  887,  616,  887,  887,
    1087       887,  616,  841,  887,  841,  887,  887,  887,  841,  677,
    1088       887,  677,  887,  887,  887,  677,  681,  887,  681,  887,
    1089       887,  887,  681,   86,  887,   86,  887,  887,  887,   86,
    1090 
    1091       846,  887,  846,  887,  887,  887,  846,  140,  887,  140,
    1092       887,  887,  887,  140,  204,  887,  204,  887,  887,  887,
    1093       204,   11,  887,  887,  887,  887,  887,  887,  887,  887,
    1094       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1095       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1096       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1097       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1098       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1099       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1100       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1101 
    1102       887,  887,  887,  887,  887,  887,  887
     1010      469,  680,  469,  678,  676,  674,  469,  471,  672,  471,
     1011      670,   87,   87,  471,  473,   87,  473,   87,   87,   87,
     1012      473,  348,   87,  348,  475,   87,  475,   87,   87,   87,
     1013      475,  350,  617,  350,  478,  615,  478,  613,  611,  609,
     1014      478,  354,  607,  354,  480,  502,  480,  605,  605,  594,
     1015
     1016      480,  356,  593,  356,  482,  591,  482,  483,  483,  589,
     1017      482,  358,  587,  358,  484,  585,  484,  583,  581,  579,
     1018      484,  365,   87,  365,  486,   87,  486,   87,   87,   87,
     1019      486,  367,   87,  367,  491,   87,  491,   87,  491,  514,
     1020      491,  380,  512,  380,  510,  380,  508,  380,  382,  382,
     1021      506,  382,  382,  382,  504,  382,  503,  490,  503,  487,
     1022      485,  361,  503,  505,  361,  505,  483,  481,  479,  505,
     1023      507,  476,  507,  474,  472,  470,  507,  392,   87,  392,
     1024      509,   87,  509,   87,  400,  399,  509,  394,  397,  394,
     1025      511,  395,  511,  393,  270,  265,  511,  396,  264,  396,
     1026
     1027      513,  389,  513,  389,  252,  379,  513,  398,  379,  398,
     1028       86,  240,  374,   86,  368,   86,   86,   86,   86,   86,
     1029      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
     1030      468,  468,  468,  578,  366,  578,  364,  360,  359,  578,
     1031      469,  357,  469,  580,  355,  580,  351,  349,  205,  580,
     1032      471,  201,  471,  582,   87,  582,  277,  276,  274,  582,
     1033      473,  270,  473,  584,  265,  584,  268,  265,  263,  584,
     1034      475,  262,  475,  586,  261,  586,  240,  232,   85,  586,
     1035      478,   85,  478,  588,   87,  588,  205,  203,   85,  588,
     1036      480,  122,  480,  482,  117,  482,   87,  891,   70,  482,
     1037
     1038      590,   70,  590,  891,  891,  891,  590,  484,  891,  484,
     1039      592,  891,  592,  891,  891,  891,  592,  486,  891,  486,
     1040      491,  891,  491,  891,  491,  891,  491,  382,  891,  382,
     1041      891,  891,  891,  382,  606,  891,  606,  891,  891,  891,
     1042      606,  503,  891,  503,  608,  891,  608,  891,  891,  891,
     1043      608,  505,  891,  505,  610,  891,  610,  891,  891,  891,
     1044      610,  507,  891,  507,  612,  891,  612,  891,  891,  891,
     1045      612,  509,  891,  509,  614,  891,  614,  891,  891,  891,
     1046      614,  511,  891,  511,  616,  891,  616,  891,  891,  891,
     1047      616,  513,  891,  513,   86,  891,  891,   86,  891,   86,
     1048
     1049       86,   86,   86,   86,  669,  669,  669,  669,  669,  669,
     1050      669,  669,  669,  669,  669,  669,  669,  671,  891,  671,
     1051      891,  891,  891,  671,  578,  891,  578,  673,  891,  673,
     1052      891,  891,  891,  673,  580,  891,  580,  675,  891,  675,
     1053      891,  891,  891,  675,  582,  891,  582,  677,  891,  677,
     1054      891,  891,  891,  677,  584,  891,  584,  679,  891,  679,
     1055      891,  891,  891,  679,  586,  891,  586,  681,  891,  681,
     1056      891,  891,  891,  681,  588,  891,  588,  683,  891,  683,
     1057      891,  891,  891,  683,  590,  891,  590,   86,  891,   86,
     1058      891,  891,  891,   86,  592,  891,  592,  491,  891,  491,
     1059
     1060      891,  891,  891,  491,  691,  891,  691,  891,  891,  891,
     1061      691,  606,  891,  606,  693,  891,  693,  891,  891,  891,
     1062      693,  608,  891,  608,  695,  891,  695,  891,  891,  891,
     1063      695,  610,  891,  610,  140,  891,  140,  891,  891,  891,
     1064      140,  612,  891,  612,  698,  891,  698,  614,  891,  614,
     1065       86,  891,  891,   86,  891,   86,   86,   86,   86,   86,
     1066      616,  891,  616,  669,  669,  669,  669,  669,  669,  669,
     1067      669,  669,  669,  669,  669,  669,  737,  891,  737,  891,
     1068      891,  891,  737,  671,  891,  671,  204,  891,  204,  891,
     1069      891,  891,  204,  673,  891,  673,  740,  891,  740,  675,
     1070
     1071      891,  675,  204,  891,  891,  204,  891,  204,  204,  204,
     1072      204,  204,  677,  891,  677,  741,  891,  741,  679,  891,
     1073      679,  681,  891,  681,  742,  891,  742,  683,  891,  683,
     1074       86,  891,   86,  744,  891,  744,  891,  891,  891,  744,
     1075      691,  891,  691,  269,  891,  269,  891,  891,  891,  269,
     1076      693,  891,  693,  747,  891,  747,  695,  891,  695,  140,
     1077      891,  140,  748,  891,  748,  891,  891,  891,  748,   86,
     1078      891,  891,   86,  891,   86,   86,   86,   86,   86,  782,
     1079      891,  782,  737,  891,  737,  204,  891,  204,  783,  891,
     1080      783,  891,  891,  891,  783,  785,  891,  785,  891,  891,
     1081
     1082      891,  785,  787,  891,  787,  891,  891,  891,  787,  789,
     1083      891,  789,  790,  891,  790,  891,  891,  891,  790,  792,
     1084      891,  792,  891,  891,  891,  792,  814,  891,  814,  891,
     1085      891,  891,  814,  816,  891,  816,  891,  891,  891,  816,
     1086      818,  891,  818,  891,  891,  891,  818,  820,  891,  820,
     1087      891,  891,  891,  820,  822,  891,  822,  891,  891,  891,
     1088      822,  824,  891,  824,  891,  891,  891,  824,  616,  891,
     1089      616,  891,  891,  891,  616,  844,  891,  844,  891,  891,
     1090      891,  844,  677,  891,  677,  891,  891,  891,  677,  681,
     1091      891,  681,  891,  891,  891,  681,   86,  891,   86,  891,
     1092
     1093      891,  891,   86,  849,  891,  849,  891,  891,  891,  849,
     1094      140,  891,  140,  891,  891,  891,  140,  204,  891,  204,
     1095      891,  891,  891,  204,   11,  891,  891,  891,  891,  891,
     1096      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1097      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1098      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1099      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1100      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1101      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1102      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1103
     1104      891,  891,  891,  891,  891,  891,  891,  891,  891,  891
    11031105    } ;
    11041106
    1105 static yyconst flex_int16_t yy_chk[2908] =
     1107static yyconst flex_int16_t yy_chk[2911] =
    11061108    {   0,
    11071109        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    11241126        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    11251127        5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
    1126         8,    9,   10,   37,   37,   20,   39,    9,   10,  886,
     1128        8,    9,   10,   37,   37,   20,   39,    9,   10,  890,
    11271129        7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
    11281130
     
    11351137       47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
    11361138       45,   30,   40,   45,   45,   40,   49,   30,   45,   56,
    1137        62,   45,   49,   30,   73,  885,  127,   53,  127,   51,
     1139       62,   45,   49,   30,   73,  889,  127,   53,  127,   51,
    11381140       61,   30,   62,   55,   30,   31,  108,   31,   31,   31,
    11391141
     
    11491151      164,   68,   68,   59,  113,   38,   68,  116,   38,  131,
    11501152
    1151       110,  131,   60,   67,   67,   67,   67,   67,   67,  877,
     1153      110,  131,   60,   67,   67,   67,   67,   67,   67,  881,
    11521154      142,   67,   68,   68,   68,   68,   68,   68,   80,   80,
    11531155       80,   80,   80,   80,  153,   38,   38,   77,   77,  134,
    11541156      110,  134,   77,  153,   77,  110,  135,  135,  135,   77,
    1155        82,   82,   82,   82,   82,   82,  876,  243,   77,   77,
     1157       82,   82,   82,   82,   82,   82,  880,  243,   77,   77,
    11561158       77,   77,   83,   83,   83,   83,   83,   83,  110,   77,
    11571159      103,  103,  103,  103,  103,  103,  104,  104,  104,  104,
     
    11631165       85,  166,  159,  150,   85,   85,  161,   85,  160,   85,
    11641166      145,  162,  104,  167,  168,  161,  169,  163,   85,   85,
    1165        85,  105,  163,  105,  105,  105,  105,  105,  105,  873,
     1167       85,  105,  163,  105,  105,  105,  105,  105,  105,  877,
    11661168      160,  171,  162,  162,  165,  163,  167,  169,  173,   85,
    11671169      105,  106,   85,  106,  165,  172,  106,  106,  106,  106,
     
    11761178      189,  158,  158,  188,  192,  158,  194,  158,  284,  219,
    11771179      185,  219,  158,  158,  158,  193,  158,  192,  220,  194,
    1178       220,  191,  198,  198,  191,  192,  205,  198,  193,  872,
     1180      220,  191,  198,  198,  191,  192,  205,  198,  193,  876,
    11791181      193,  197,  197,  197,  197,  197,  197,  200,  200,  197,
    11801182      248,  221,  200,  198,  198,  198,  198,  198,  198,  202,
     
    11931195      245,  245,  270,  288,  293,  286,  294,  300,  306,  293,
    11941196
    1195       308,  244,  300,  306,  870,  294,  308,  244,  246,  246,
     1197      308,  244,  300,  306,  874,  294,  308,  244,  246,  246,
    11961198      246,  246,  246,  246,  253,  286,  288,  255,  255,  255,
    11971199      255,  255,  255,  287,  246,  247,  246,  247,  246,  246,
    11981200      247,  247,  247,  247,  247,  247,  290,  253,  287,  253,
    1199       869,  246,  289,  253,  287,  287,  246,  292,  246,  253,
     1201      873,  246,  289,  253,  287,  287,  246,  292,  246,  253,
    12001202      255,  246,  291,  246,  260,  260,  260,  260,  260,  260,
    12011203      289,  253,  290,  292,  292,  253,  295,  291,  296,  253,
     
    12091211      335,  324,  337,  339,  340,  326,  329,  328,  401,  327,
    12101212      331,  337,  334,  335,  341,  343,  332,  340,  342,  401,
    1211       333,  339,  341,  342,  344,  344,  345,  460,  862,  344,
     1213      333,  339,  341,  342,  344,  344,  345,  460,  866,  344,
    12121214      343,  344,  345,  352,  352,  352,  352,  353,  353,  353,
    12131215      353,  362,  363,  362,  363,  370,  370,  370,  370,  370,
    12141216      370,  372,  460,  372,  380,  381,  372,  372,  372,  372,
    1215       372,  372,  861,  402,  380,  381,  352,  371,  371,  371,
     1217      372,  372,  865,  402,  380,  381,  352,  371,  371,  371,
    12161218
    12171219      371,  371,  371,  374,  374,  374,  374,  374,  374,  402,
    1218       380,  381,  403,  371,  404,  371,  860,  371,  371,  375,
     1220      380,  381,  403,  371,  404,  371,  864,  371,  371,  375,
    12191221      375,  375,  375,  375,  375,  383,  382,  403,  406,  405,
    12201222      371,  383,  407,  404,  408,  371,  374,  371,  405,  406,
     
    12331235      450,  453,  442,  444,  455,  456,  447,  457,  458,  449,
    12341236      459,  461,  463,  455,  451,  458,  454,  459,  462,  452,
    1235       457,  453,  466,  456,  464,  467,  462,  525,  859,  463,
     1237      457,  453,  466,  456,  464,  467,  462,  525,  863,  463,
    12361238      525,  468,  491,  461,  467,  464,  462,  468,  477,  477,
    12371239      477,  477,  491,  515,  466,  488,  488,  488,  488,  488,
     
    12391241      488,  490,  490,  490,  490,  490,  490,  519,  491,  521,
    12401242      515,  488,  492,  488,  492,  488,  488,  492,  492,  492,
    1241       492,  492,  492,  494,  516,  495,  493,  519,  488,  855,
    1242       851,  521,  518,  488,  490,  488,  493,  516,  488,  529,
     1243      492,  492,  492,  494,  516,  495,  493,  519,  488,  862,
     1244      858,  521,  518,  488,  490,  488,  493,  516,  488,  529,
    12431245      488,  497,  497,  497,  497,  497,  497,  518,  520,  494,
    12441246      492,  495,  493,  498,  498,  498,  498,  498,  498,  523,
    1245       529,  520,  526,  848,  523,  847,  528,  846,  522,  498,
     1247      529,  520,  526,  854,  523,  851,  528,  850,  522,  498,
    12461248      499,  498,  499,  498,  498,  499,  499,  499,  499,  499,
    12471249      499,  522,  526,  524,  527,  528,  498,  531,  530,  532,
     
    12501252      532,  535,  537,  533,  536,  538,  539,  541,  542,  547,
    12511253      535,  539,  544,  541,  538,  545,  546,  542,  547,  537,
    1252       550,  551,  845,  549,  534,  552,  536,  554,  560,  544,
     1254      550,  551,  849,  549,  534,  552,  536,  554,  560,  544,
    12531255      545,  546,  549,  551,  555,  557,  558,  550,  561,  555,
    12541256      552,  562,  554,  565,  557,  558,  564,  567,  566,  568,
    12551257      560,  561,  575,  565,  564,  566,  569,  571,  562,  574,
    12561258      572,  568,  569,  620,  619,  575,  571,  601,  601,  567,
    1257       572,  619,  620,  844,  843,  622,  574,  594,  594,  594,
     1259      572,  619,  620,  848,  847,  622,  574,  594,  594,  594,
    12581260      594,  594,  594,  595,  595,  595,  595,  595,  595,  597,
    12591261      601,  597,  622,  621,  597,  597,  597,  597,  597,  597,
    12601262
    1261       600,  600,  600,  600,  600,  600,  621,  602,  626,  842,
     1263      600,  600,  600,  600,  600,  600,  621,  602,  626,  846,
    12621264      594,  596,  596,  596,  596,  596,  596,  603,  618,  603,
    12631265      623,  624,  603,  618,  628,  626,  625,  596,  624,  596,
     
    12681270      633,  646,  639,  637,  650,  642,  651,  656,  640,  638,
    12691271      646,  653,  657,  636,  644,  665,  656,  641,  664,  657,
    1270       645,  667,  668,  841,  650,  665,  700,  664,  653,  699,
    1271 
    1272       667,  702,  705,  651,  714,  837,  700,  668,  686,  686,
     1272      645,  667,  668,  842,  650,  665,  700,  664,  653,  699,
     1273
     1274      667,  702,  705,  651,  714,  842,  700,  668,  686,  686,
    12731275      686,  686,  686,  686,  690,  690,  690,  690,  690,  690,
    12741276      699,  708,  705,  703,  686,  714,  686,  702,  686,  686,
     
    12761278      712,  686,  711,  717,  710,  718,  686,  690,  686,  712,
    12771279      720,  686,  717,  686,  713,  711,  716,  713,  719,  716,
    1278       721,  719,  715,  720,  722,  723,  724,  725,  721,  728,
    1279       731,  718,  732,  735,  722,  733,  725,  736,  723,  756,
    1280       757,  735,  836,  754,  756,  759,  736,  724,  755,  760,
    1281       731,  761,  728,  764,  732,  757,  733,  743,  743,  743,
    1282 
    1283       743,  743,  743,  754,  758,  755,  760,  762,  759,  763,
    1284       762,  769,  766,  768,  758,  766,  768,  761,  769,  772,
    1285       770,  764,  763,  770,  771,  773,  778,  771,  793,  795,
    1286       743,  798,  797,  796,  772,  797,  799,  800,  802,  799,
    1287       800,  803,  804,  806,  807,  804,  810,  807,  773,  778,
    1288       795,  796,  809,  798,  808,  793,  802,  808,  811,  826,
    1289       830,  809,  810,  827,  829,  806,  828,  803,  831,  828,
    1290       827,  831,  832,  829,  811,  834,  835,  839,  830,  835,
    1291       826,  840,  838,  849,  830,  838,  839,  853,  850,  832,
    1292       840,  852,  849,  850,  852,  854,  856,  853,  857,  856,
    1293 
    1294       854,  857,  858,  863,  864,  858,  865,  866,  867,  865,
    1295       868,  867,  871,  868,  874,  875,  878,  866,  879,  864,
    1296       880,  882,  881,  863,  883,  878,  884,  833,  825,  824,
    1297       875,  879,  823,  822,  871,  874,  884,  821,  820,  882,
    1298       819,  818,  880,  881,  817,  816,  883,  888,  888,  888,
    1299       888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
    1300       889,  889,  889,  889,  889,  889,  889,  889,  889,  889,
    1301       889,  889,  889,  890,  890,  890,  890,  890,  890,  890,
    1302       890,  890,  890,  890,  890,  890,  891,  815,  814,  891,
    1303       813,  891,  891,  891,  891,  891,  892,  812,  805,  801,
    1304 
    1305       892,  892,  892,  892,  892,  892,  893,  893,  893,  893,
    1306       893,  893,  893,  893,  893,  893,  893,  893,  893,  894,
    1307       794,  792,  894,  791,  894,  894,  894,  894,  894,  895,
    1308       790,  895,  895,  789,  895,  895,  895,  895,  895,  895,
    1309       788,  895,  896,  787,  786,  896,  896,  896,  896,  896,
    1310       896,  896,  896,  785,  896,  897,  897,  897,  897,  897,
    1311       897,  897,  897,  897,  897,  897,  897,  897,  898,  898,
    1312       784,  898,  783,  782,  781,  898,  899,  780,  779,  899,
    1313       777,  899,  899,  899,  899,  899,  900,  776,  900,  775,
    1314       774,  767,  900,  901,  765,  901,  753,  752,  751,  901,
    1315 
    1316       902,  750,  902,  749,  748,  747,  902,  903,  746,  903,
    1317       745,  742,  741,  903,  904,  740,  904,  734,  730,  729,
    1318       904,  905,  727,  905,  726,  709,  701,  905,  906,  698,
    1319       906,  693,  691,  687,  906,  907,  677,  907,  673,  671,
    1320       669,  907,  908,  666,  908,  663,  662,  661,  908,  909,
    1321       909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
    1322       909,  909,  910,  660,  910,  911,  911,  659,  911,  911,
    1323       911,  658,  911,  912,  912,  655,  912,  913,  654,  913,
    1324       652,  649,  648,  913,  914,  647,  914,  643,  616,  612,
    1325       914,  915,  610,  915,  608,  606,  604,  915,  916,  598,
    1326 
    1327       916,  917,  592,  917,  590,  588,  586,  917,  918,  584,
    1328       918,  919,  582,  580,  919,  578,  919,  919,  919,  919,
    1329       919,  920,  920,  920,  920,  920,  920,  920,  920,  920,
    1330       920,  920,  920,  920,  921,  921,  921,  921,  921,  921,
    1331       921,  921,  921,  921,  921,  921,  921,  922,  577,  922,
    1332       576,  573,  570,  922,  923,  563,  923,  559,  556,  553,
    1333       923,  924,  548,  924,  543,  540,  517,  924,  925,  513,
    1334       925,  926,  511,  926,  509,  507,  505,  926,  927,  503,
    1335       927,  928,  502,  928,  501,  500,  489,  928,  929,  486,
    1336       929,  930,  484,  930,  483,  482,  480,  930,  931,  478,
    1337 
    1338       931,  932,  475,  932,  473,  471,  469,  932,  933,  465,
    1339       933,  934,  448,  934,  446,  438,  436,  934,  935,  428,
    1340       935,  936,  426,  936,  424,  398,  396,  936,  937,  394,
    1341       937,  938,  392,  938,  391,  938,  390,  938,  939,  377,
    1342       939,  367,  939,  365,  939,  940,  940,  364,  940,  940,
    1343       940,  360,  940,  941,  358,  941,  356,  354,  350,  941,
    1344       942,  348,  942,  347,  346,  336,  942,  943,  321,  943,
    1345       298,  277,  275,  943,  944,  273,  944,  945,  272,  945,
    1346       271,  269,  268,  945,  946,  263,  946,  947,  259,  947,
    1347       258,  254,  251,  947,  948,  250,  948,  949,  239,  949,
    1348 
    1349       238,  231,  230,  949,  950,  227,  950,  951,  217,  215,
    1350       951,  214,  951,  951,  951,  951,  951,  952,  952,  952,
    1351       952,  952,  952,  952,  952,  952,  952,  952,  952,  952,
    1352       953,  213,  953,  207,  206,  204,  953,  954,  199,  954,
    1353       955,  178,  955,  149,  147,  146,  955,  956,  140,  956,
    1354       957,  138,  957,  136,  128,  125,  957,  958,  124,  958,
    1355       959,  120,  959,  101,   98,   95,  959,  960,   93,  960,
    1356       961,   86,  961,   72,   70,   66,  961,  962,   36,  962,
    1357       963,   33,  963,   18,   11,    4,  963,  964,    3,  964,
    1358       965,    0,  965,    0,    0,    0,  965,  966,    0,  966,
    1359 
    1360         0,    0,    0,  966,  967,    0,  967,  968,    0,  968,
    1361         0,    0,    0,  968,  969,    0,  969,  970,    0,  970,
    1362         0,  970,    0,  970,  971,    0,  971,    0,    0,    0,
    1363       971,  972,    0,  972,    0,    0,    0,  972,  973,    0,
    1364       973,  974,    0,  974,    0,    0,    0,  974,  975,    0,
    1365       975,  976,    0,  976,    0,    0,    0,  976,  977,    0,
    1366       977,  978,    0,  978,    0,    0,    0,  978,  979,    0,
    1367       979,  980,    0,  980,    0,    0,    0,  980,  981,    0,
    1368       981,  982,    0,  982,    0,    0,    0,  982,  983,    0,
    1369       983,  984,    0,    0,  984,    0,  984,  984,  984,  984,
    1370 
    1371       984,  985,  985,  985,  985,  985,  985,  985,  985,  985,
    1372       985,  985,  985,  985,  986,    0,  986,    0,    0,    0,
    1373       986,  987,    0,  987,  988,    0,  988,    0,    0,    0,
    1374       988,  989,    0,  989,  990,    0,  990,    0,    0,    0,
    1375       990,  991,    0,  991,  992,    0,  992,    0,    0,    0,
    1376       992,  993,    0,  993,  994,    0,  994,    0,    0,    0,
    1377       994,  995,    0,  995,  996,    0,  996,    0,    0,    0,
    1378       996,  997,    0,  997,  998,    0,  998,    0,    0,    0,
    1379       998,  999,    0,  999, 1000,    0, 1000,    0,    0,    0,
    1380      1000, 1001,    0, 1001, 1002,    0, 1002,    0,    0,    0,
    1381 
    1382      1002, 1003,    0, 1003,    0,    0,    0, 1003, 1004,    0,
    1383      1004, 1005,    0, 1005,    0,    0,    0, 1005, 1006,    0,
    1384      1006, 1007,    0, 1007,    0,    0,    0, 1007, 1008,    0,
    1385      1008, 1009,    0, 1009,    0,    0,    0, 1009, 1010,    0,
    1386      1010, 1011,    0, 1011, 1012,    0, 1012, 1013,    0,    0,
    1387      1013,    0, 1013, 1013, 1013, 1013, 1013, 1014,    0, 1014,
    1388      1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
    1389      1015, 1015, 1015, 1016,    0, 1016,    0,    0,    0, 1016,
    1390      1017,    0, 1017, 1018,    0, 1018,    0,    0,    0, 1018,
    1391      1019,    0, 1019, 1020,    0, 1020, 1021,    0, 1021, 1022,
    1392 
    1393         0,    0, 1022,    0, 1022, 1022, 1022, 1022, 1022, 1023,
    1394         0, 1023, 1024,    0, 1024, 1025,    0, 1025, 1026,    0,
    1395      1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0, 1029,
    1396      1030,    0, 1030,    0,    0,    0, 1030, 1031,    0, 1031,
    1397      1032,    0, 1032,    0,    0,    0, 1032, 1033,    0, 1033,
    1398      1034,    0, 1034, 1035,    0, 1035, 1036,    0, 1036, 1037,
    1399         0, 1037,    0,    0,    0, 1037, 1038,    0,    0, 1038,
    1400         0, 1038, 1038, 1038, 1038, 1038, 1039,    0, 1039, 1040,
    1401         0, 1040, 1041,    0, 1041, 1042,    0, 1042,    0,    0,
    1402         0, 1042, 1043,    0, 1043,    0,    0,    0, 1043, 1044,
    1403 
    1404         0, 1044,    0,    0,    0, 1044, 1045,    0, 1045, 1046,
    1405         0, 1046,    0,    0,    0, 1046, 1047,    0, 1047,    0,
    1406         0,    0, 1047, 1048,    0, 1048,    0,    0,    0, 1048,
    1407      1049,    0, 1049,    0,    0,    0, 1049, 1050,    0, 1050,
    1408         0,    0,    0, 1050, 1051,    0, 1051,    0,    0,    0,
    1409      1051, 1052,    0, 1052,    0,    0,    0, 1052, 1053,    0,
    1410      1053,    0,    0,    0, 1053, 1054,    0, 1054,    0,    0,
    1411         0, 1054, 1055,    0, 1055,    0,    0,    0, 1055, 1056,
    1412         0, 1056,    0,    0,    0, 1056, 1057,    0, 1057,    0,
    1413         0,    0, 1057, 1058,    0, 1058,    0,    0,    0, 1058,
    1414 
    1415      1059,    0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,
    1416         0,    0,    0, 1060, 1061,    0, 1061,    0,    0,    0,
    1417      1061,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1418       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1419       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1420       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1421       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1422       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1423       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1424       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1425 
    1426       887,  887,  887,  887,  887,  887,  887
     1280      721,  719,  715,  720,  722,  723,  724,  725,  721,  731,
     1281      728,  718,  732,  735,  722,  733,  725,  736,  723,  756,
     1282      757,  735,  758,  754,  756,  759,  736,  724,  728,  731,
     1283      755,  761,  758,  728,  732,  757,  733,  743,  743,  743,
     1284
     1285      743,  743,  743,  754,  760,  763,  762,  755,  759,  762,
     1286      764,  766,  768,  769,  766,  768,  770,  761,  763,  770,
     1287      769,  760,  771,  773,  772,  771,  775,  779,  794,  797,
     1288      743,  796,  798,  800,  799,  798,  800,  801,  764,  772,
     1289      801,  803,  804,  807,  810,  805,  773,  797,  805,  775,
     1290      779,  808,  796,  810,  808,  794,  799,  809,  811,  803,
     1291      809,  812,  813,  828,  829,  807,  830,  831,  804,  830,
     1292      832,  829,  812,  834,  811,  856,  831,  833,  813,  837,
     1293      833,  875,  837,  840,  828,  856,  840,  841,  832,  843,
     1294      834,  852,  853,  867,  832,  868,  841,  853,  843,  855,
     1295
     1296      852,  857,  855,  875,  859,  860,  857,  859,  860,  861,
     1297      868,  869,  861,  867,  869,  870,  871,  872,  878,  871,
     1298      872,  879,  882,  884,  883,  870,  885,  887,  886,  845,
     1299      888,  882,  844,  839,  838,  836,  879,  883,  835,  878,
     1300      888,  827,  826,  825,  824,  884,  886,  885,  823,  887,
     1301      892,  892,  892,  892,  892,  892,  892,  892,  892,  892,
     1302      892,  892,  892,  893,  893,  893,  893,  893,  893,  893,
     1303      893,  893,  893,  893,  893,  893,  894,  894,  894,  894,
     1304      894,  894,  894,  894,  894,  894,  894,  894,  894,  895,
     1305      822,  821,  895,  820,  895,  895,  895,  895,  895,  896,
     1306
     1307      819,  818,  817,  896,  896,  896,  896,  896,  896,  897,
     1308      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
     1309      897,  897,  898,  816,  815,  898,  814,  898,  898,  898,
     1310      898,  898,  899,  806,  899,  899,  802,  899,  899,  899,
     1311      899,  899,  899,  795,  899,  900,  793,  792,  900,  900,
     1312      900,  900,  900,  900,  900,  900,  791,  900,  901,  901,
     1313      901,  901,  901,  901,  901,  901,  901,  901,  901,  901,
     1314      901,  902,  902,  790,  902,  789,  788,  787,  902,  903,
     1315      786,  785,  903,  784,  903,  903,  903,  903,  903,  904,
     1316      783,  904,  782,  781,  780,  904,  905,  778,  905,  777,
     1317
     1318      776,  774,  905,  906,  767,  906,  765,  753,  752,  906,
     1319      907,  751,  907,  750,  749,  748,  907,  908,  747,  908,
     1320      746,  745,  742,  908,  909,  741,  909,  740,  734,  730,
     1321      909,  910,  729,  910,  727,  726,  709,  910,  911,  701,
     1322      911,  698,  693,  691,  911,  912,  687,  912,  677,  673,
     1323      671,  912,  913,  913,  913,  913,  913,  913,  913,  913,
     1324      913,  913,  913,  913,  913,  914,  669,  914,  915,  915,
     1325      666,  915,  915,  915,  663,  915,  916,  916,  662,  916,
     1326      917,  661,  917,  660,  659,  658,  917,  918,  655,  918,
     1327      654,  652,  649,  918,  919,  648,  919,  647,  643,  616,
     1328
     1329      919,  920,  612,  920,  921,  610,  921,  608,  606,  604,
     1330      921,  922,  598,  922,  923,  592,  590,  923,  588,  923,
     1331      923,  923,  923,  923,  924,  924,  924,  924,  924,  924,
     1332      924,  924,  924,  924,  924,  924,  924,  925,  925,  925,
     1333      925,  925,  925,  925,  925,  925,  925,  925,  925,  925,
     1334      926,  586,  926,  584,  582,  580,  926,  927,  578,  927,
     1335      577,  576,  573,  927,  928,  570,  928,  563,  559,  556,
     1336      928,  929,  553,  929,  930,  548,  930,  543,  540,  517,
     1337      930,  931,  513,  931,  932,  511,  932,  509,  507,  505,
     1338      932,  933,  503,  933,  934,  502,  934,  501,  500,  489,
     1339
     1340      934,  935,  486,  935,  936,  484,  936,  483,  482,  480,
     1341      936,  937,  478,  937,  938,  475,  938,  473,  471,  469,
     1342      938,  939,  465,  939,  940,  448,  940,  446,  438,  436,
     1343      940,  941,  428,  941,  942,  426,  942,  424,  942,  398,
     1344      942,  943,  396,  943,  394,  943,  392,  943,  944,  944,
     1345      391,  944,  944,  944,  390,  944,  945,  377,  945,  367,
     1346      365,  364,  945,  946,  360,  946,  358,  356,  354,  946,
     1347      947,  350,  947,  348,  347,  346,  947,  948,  336,  948,
     1348      949,  321,  949,  298,  277,  275,  949,  950,  273,  950,
     1349      951,  272,  951,  271,  269,  268,  951,  952,  263,  952,
     1350
     1351      953,  259,  953,  258,  254,  251,  953,  954,  250,  954,
     1352      955,  239,  238,  955,  231,  955,  955,  955,  955,  955,
     1353      956,  956,  956,  956,  956,  956,  956,  956,  956,  956,
     1354      956,  956,  956,  957,  230,  957,  227,  217,  215,  957,
     1355      958,  214,  958,  959,  213,  959,  207,  206,  204,  959,
     1356      960,  199,  960,  961,  178,  961,  149,  147,  146,  961,
     1357      962,  140,  962,  963,  138,  963,  136,  128,  125,  963,
     1358      964,  124,  964,  965,  120,  965,  101,   98,   95,  965,
     1359      966,   93,  966,  967,   86,  967,   72,   70,   66,  967,
     1360      968,   36,  968,  969,   33,  969,   18,   11,    4,  969,
     1361
     1362      970,    3,  970,    0,    0,    0,  970,  971,    0,  971,
     1363      972,    0,  972,    0,    0,    0,  972,  973,    0,  973,
     1364      974,    0,  974,    0,  974,    0,  974,  975,    0,  975,
     1365        0,    0,    0,  975,  976,    0,  976,    0,    0,    0,
     1366      976,  977,    0,  977,  978,    0,  978,    0,    0,    0,
     1367      978,  979,    0,  979,  980,    0,  980,    0,    0,    0,
     1368      980,  981,    0,  981,  982,    0,  982,    0,    0,    0,
     1369      982,  983,    0,  983,  984,    0,  984,    0,    0,    0,
     1370      984,  985,    0,  985,  986,    0,  986,    0,    0,    0,
     1371      986,  987,    0,  987,  988,    0,    0,  988,    0,  988,
     1372
     1373      988,  988,  988,  988,  989,  989,  989,  989,  989,  989,
     1374      989,  989,  989,  989,  989,  989,  989,  990,    0,  990,
     1375        0,    0,    0,  990,  991,    0,  991,  992,    0,  992,
     1376        0,    0,    0,  992,  993,    0,  993,  994,    0,  994,
     1377        0,    0,    0,  994,  995,    0,  995,  996,    0,  996,
     1378        0,    0,    0,  996,  997,    0,  997,  998,    0,  998,
     1379        0,    0,    0,  998,  999,    0,  999, 1000,    0, 1000,
     1380        0,    0,    0, 1000, 1001,    0, 1001, 1002,    0, 1002,
     1381        0,    0,    0, 1002, 1003,    0, 1003, 1004,    0, 1004,
     1382        0,    0,    0, 1004, 1005,    0, 1005, 1006,    0, 1006,
     1383
     1384        0,    0,    0, 1006, 1007,    0, 1007,    0,    0,    0,
     1385     1007, 1008,    0, 1008, 1009,    0, 1009,    0,    0,    0,
     1386     1009, 1010,    0, 1010, 1011,    0, 1011,    0,    0,    0,
     1387     1011, 1012,    0, 1012, 1013,    0, 1013,    0,    0,    0,
     1388     1013, 1014,    0, 1014, 1015,    0, 1015, 1016,    0, 1016,
     1389     1017,    0,    0, 1017,    0, 1017, 1017, 1017, 1017, 1017,
     1390     1018,    0, 1018, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
     1391     1019, 1019, 1019, 1019, 1019, 1019, 1020,    0, 1020,    0,
     1392        0,    0, 1020, 1021,    0, 1021, 1022,    0, 1022,    0,
     1393        0,    0, 1022, 1023,    0, 1023, 1024,    0, 1024, 1025,
     1394
     1395        0, 1025, 1026,    0,    0, 1026,    0, 1026, 1026, 1026,
     1396     1026, 1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0,
     1397     1029, 1030,    0, 1030, 1031,    0, 1031, 1032,    0, 1032,
     1398     1033,    0, 1033, 1034,    0, 1034,    0,    0,    0, 1034,
     1399     1035,    0, 1035, 1036,    0, 1036,    0,    0,    0, 1036,
     1400     1037,    0, 1037, 1038,    0, 1038, 1039,    0, 1039, 1040,
     1401        0, 1040, 1041,    0, 1041,    0,    0,    0, 1041, 1042,
     1402        0,    0, 1042,    0, 1042, 1042, 1042, 1042, 1042, 1043,
     1403        0, 1043, 1044,    0, 1044, 1045,    0, 1045, 1046,    0,
     1404     1046,    0,    0,    0, 1046, 1047,    0, 1047,    0,    0,
     1405
     1406        0, 1047, 1048,    0, 1048,    0,    0,    0, 1048, 1049,
     1407        0, 1049, 1050,    0, 1050,    0,    0,    0, 1050, 1051,
     1408        0, 1051,    0,    0,    0, 1051, 1052,    0, 1052,    0,
     1409        0,    0, 1052, 1053,    0, 1053,    0,    0,    0, 1053,
     1410     1054,    0, 1054,    0,    0,    0, 1054, 1055,    0, 1055,
     1411        0,    0,    0, 1055, 1056,    0, 1056,    0,    0,    0,
     1412     1056, 1057,    0, 1057,    0,    0,    0, 1057, 1058,    0,
     1413     1058,    0,    0,    0, 1058, 1059,    0, 1059,    0,    0,
     1414        0, 1059, 1060,    0, 1060,    0,    0,    0, 1060, 1061,
     1415        0, 1061,    0,    0,    0, 1061, 1062,    0, 1062,    0,
     1416
     1417        0,    0, 1062, 1063,    0, 1063,    0,    0,    0, 1063,
     1418     1064,    0, 1064,    0,    0,    0, 1064, 1065,    0, 1065,
     1419        0,    0,    0, 1065,  891,  891,  891,  891,  891,  891,
     1420      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1421      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1422      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1423      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1424      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1425      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1426      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
     1427
     1428      891,  891,  891,  891,  891,  891,  891,  891,  891,  891
    14271429    } ;
    14281430
    14291431/* Table of booleans, true if rule could match eol. */
    1430 static yyconst flex_int32_t yy_rule_can_match_eol[181] =
     1432static yyconst flex_int32_t yy_rule_can_match_eol[182] =
    14311433    {   0,
    143214341, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    14351437    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14361438    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1437     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
    1438     0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1439    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
     1440    1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14391441    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14401442    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1441     0,     };
     1443    0, 0,     };
    14421444
    14431445static yy_state_type yy_last_accepting_state;
     
    14661468 * Author           : Peter A. Buhr
    14671469 * Created On       : Sat Sep 22 08:58:10 2001
    1468  * Last Modified By : Peter A. Buhr
    1469  * Last Modified On : Thu Jun 23 07:29:30 2016
    1470  * Update Count     : 457
     1470 * Last Modified By :
     1471 * Last Modified On : Sun Jul 31 07:19:36 2016
     1472 * Update Count     : 459
    14711473 */
    14721474#line 20 "lex.ll"
     
    15291531
    15301532
    1531 #line 1532 "Parser/lex.cc"
     1533#line 1534 "Parser/lex.cc"
    15321534
    15331535#define INITIAL 0
     
    17241726
    17251727                                   /* line directives */
    1726 #line 1727 "Parser/lex.cc"
     1728#line 1729 "Parser/lex.cc"
    17271729
    17281730        if ( !(yy_init) )
     
    17781780                                {
    17791781                                yy_current_state = (int) yy_def[yy_current_state];
    1780                                 if ( yy_current_state >= 888 )
     1782                                if ( yy_current_state >= 892 )
    17811783                                        yy_c = yy_meta[(unsigned int) yy_c];
    17821784                                }
     
    17841786                        ++yy_cp;
    17851787                        }
    1786                 while ( yy_base[yy_current_state] != 2822 );
     1788                while ( yy_base[yy_current_state] != 2825 );
    17871789
    17881790yy_find_action:
     
    20812083YY_RULE_SETUP
    20822084#line 216 "lex.ll"
     2085{ KEYWORD_RETURN(FALLTHRU); }                   // CFA
     2086        YY_BREAK
     2087case 48:
     2088YY_RULE_SETUP
     2089#line 217 "lex.ll"
    20832090{ KEYWORD_RETURN(FINALLY); }                    // CFA
    20842091        YY_BREAK
    2085 case 48:
    2086 YY_RULE_SETUP
    2087 #line 217 "lex.ll"
     2092case 49:
     2093YY_RULE_SETUP
     2094#line 218 "lex.ll"
    20882095{ KEYWORD_RETURN(FLOAT); }
    20892096        YY_BREAK
    2090 case 49:
    2091 YY_RULE_SETUP
    2092 #line 218 "lex.ll"
     2097case 50:
     2098YY_RULE_SETUP
     2099#line 219 "lex.ll"
    20932100{ KEYWORD_RETURN(FLOAT); }                              // GCC
    20942101        YY_BREAK
    2095 case 50:
    2096 YY_RULE_SETUP
    2097 #line 219 "lex.ll"
     2102case 51:
     2103YY_RULE_SETUP
     2104#line 220 "lex.ll"
    20982105{ KEYWORD_RETURN(FOR); }
    20992106        YY_BREAK
    2100 case 51:
    2101 YY_RULE_SETUP
    2102 #line 220 "lex.ll"
     2107case 52:
     2108YY_RULE_SETUP
     2109#line 221 "lex.ll"
    21032110{ KEYWORD_RETURN(FORALL); }                             // CFA
    21042111        YY_BREAK
    2105 case 52:
    2106 YY_RULE_SETUP
    2107 #line 221 "lex.ll"
     2112case 53:
     2113YY_RULE_SETUP
     2114#line 222 "lex.ll"
    21082115{ KEYWORD_RETURN(FORTRAN); }
    21092116        YY_BREAK
    2110 case 53:
    2111 YY_RULE_SETUP
    2112 #line 222 "lex.ll"
     2117case 54:
     2118YY_RULE_SETUP
     2119#line 223 "lex.ll"
    21132120{ KEYWORD_RETURN(FTYPE); }                              // CFA
    21142121        YY_BREAK
    2115 case 54:
    2116 YY_RULE_SETUP
    2117 #line 223 "lex.ll"
     2122case 55:
     2123YY_RULE_SETUP
     2124#line 224 "lex.ll"
    21182125{ KEYWORD_RETURN(GENERIC); }                    // C11
    21192126        YY_BREAK
    2120 case 55:
    2121 YY_RULE_SETUP
    2122 #line 224 "lex.ll"
     2127case 56:
     2128YY_RULE_SETUP
     2129#line 225 "lex.ll"
    21232130{ KEYWORD_RETURN(GOTO); }
    21242131        YY_BREAK
    2125 case 56:
    2126 YY_RULE_SETUP
    2127 #line 225 "lex.ll"
     2132case 57:
     2133YY_RULE_SETUP
     2134#line 226 "lex.ll"
    21282135{ KEYWORD_RETURN(IF); }
    21292136        YY_BREAK
    2130 case 57:
    2131 YY_RULE_SETUP
    2132 #line 226 "lex.ll"
     2137case 58:
     2138YY_RULE_SETUP
     2139#line 227 "lex.ll"
    21332140{ KEYWORD_RETURN(IMAGINARY); }                  // C99
    2134         YY_BREAK
    2135 case 58:
    2136 YY_RULE_SETUP
    2137 #line 227 "lex.ll"
    2138 { KEYWORD_RETURN(IMAGINARY); }                  // GCC
    21392141        YY_BREAK
    21402142case 59:
     
    21462148YY_RULE_SETUP
    21472149#line 229 "lex.ll"
     2150{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
     2151        YY_BREAK
     2152case 61:
     2153YY_RULE_SETUP
     2154#line 230 "lex.ll"
    21482155{ KEYWORD_RETURN(INLINE); }                             // C99
    2149         YY_BREAK
    2150 case 61:
    2151 YY_RULE_SETUP
    2152 #line 230 "lex.ll"
    2153 { KEYWORD_RETURN(INLINE); }                             // GCC
    21542156        YY_BREAK
    21552157case 62:
     
    21612163YY_RULE_SETUP
    21622164#line 232 "lex.ll"
     2165{ KEYWORD_RETURN(INLINE); }                             // GCC
     2166        YY_BREAK
     2167case 64:
     2168YY_RULE_SETUP
     2169#line 233 "lex.ll"
    21632170{ KEYWORD_RETURN(INT); }
    21642171        YY_BREAK
    2165 case 64:
    2166 YY_RULE_SETUP
    2167 #line 233 "lex.ll"
     2172case 65:
     2173YY_RULE_SETUP
     2174#line 234 "lex.ll"
    21682175{ KEYWORD_RETURN(INT); }                                // GCC
    21692176        YY_BREAK
    2170 case 65:
    2171 YY_RULE_SETUP
    2172 #line 234 "lex.ll"
     2177case 66:
     2178YY_RULE_SETUP
     2179#line 235 "lex.ll"
    21732180{ KEYWORD_RETURN(LABEL); }                              // GCC
    21742181        YY_BREAK
    2175 case 66:
    2176 YY_RULE_SETUP
    2177 #line 235 "lex.ll"
     2182case 67:
     2183YY_RULE_SETUP
     2184#line 236 "lex.ll"
    21782185{ KEYWORD_RETURN(LONG); }
    21792186        YY_BREAK
    2180 case 67:
    2181 YY_RULE_SETUP
    2182 #line 236 "lex.ll"
     2187case 68:
     2188YY_RULE_SETUP
     2189#line 237 "lex.ll"
    21832190{ KEYWORD_RETURN(LVALUE); }                             // CFA
    21842191        YY_BREAK
    2185 case 68:
    2186 YY_RULE_SETUP
    2187 #line 237 "lex.ll"
     2192case 69:
     2193YY_RULE_SETUP
     2194#line 238 "lex.ll"
    21882195{ KEYWORD_RETURN(NORETURN); }                   // C11
    21892196        YY_BREAK
    2190 case 69:
    2191 YY_RULE_SETUP
    2192 #line 238 "lex.ll"
     2197case 70:
     2198YY_RULE_SETUP
     2199#line 239 "lex.ll"
    21932200{ KEYWORD_RETURN(OFFSETOF); }           // GCC
    21942201        YY_BREAK
    2195 case 70:
    2196 YY_RULE_SETUP
    2197 #line 239 "lex.ll"
     2202case 71:
     2203YY_RULE_SETUP
     2204#line 240 "lex.ll"
    21982205{ KEYWORD_RETURN(OTYPE); }                              // CFA
    21992206        YY_BREAK
    2200 case 71:
    2201 YY_RULE_SETUP
    2202 #line 240 "lex.ll"
     2207case 72:
     2208YY_RULE_SETUP
     2209#line 241 "lex.ll"
    22032210{ KEYWORD_RETURN(REGISTER); }
    22042211        YY_BREAK
    2205 case 72:
    2206 YY_RULE_SETUP
    2207 #line 241 "lex.ll"
     2212case 73:
     2213YY_RULE_SETUP
     2214#line 242 "lex.ll"
    22082215{ KEYWORD_RETURN(RESTRICT); }                   // C99
    2209         YY_BREAK
    2210 case 73:
    2211 YY_RULE_SETUP
    2212 #line 242 "lex.ll"
    2213 { KEYWORD_RETURN(RESTRICT); }                   // GCC
    22142216        YY_BREAK
    22152217case 74:
     
    22212223YY_RULE_SETUP
    22222224#line 244 "lex.ll"
     2225{ KEYWORD_RETURN(RESTRICT); }                   // GCC
     2226        YY_BREAK
     2227case 76:
     2228YY_RULE_SETUP
     2229#line 245 "lex.ll"
    22232230{ KEYWORD_RETURN(RETURN); }
    22242231        YY_BREAK
    2225 case 76:
    2226 YY_RULE_SETUP
    2227 #line 245 "lex.ll"
     2232case 77:
     2233YY_RULE_SETUP
     2234#line 246 "lex.ll"
    22282235{ KEYWORD_RETURN(SHORT); }
    22292236        YY_BREAK
    2230 case 77:
    2231 YY_RULE_SETUP
    2232 #line 246 "lex.ll"
     2237case 78:
     2238YY_RULE_SETUP
     2239#line 247 "lex.ll"
    22332240{ KEYWORD_RETURN(SIGNED); }
    2234         YY_BREAK
    2235 case 78:
    2236 YY_RULE_SETUP
    2237 #line 247 "lex.ll"
    2238 { KEYWORD_RETURN(SIGNED); }                             // GCC
    22392241        YY_BREAK
    22402242case 79:
     
    22462248YY_RULE_SETUP
    22472249#line 249 "lex.ll"
     2250{ KEYWORD_RETURN(SIGNED); }                             // GCC
     2251        YY_BREAK
     2252case 81:
     2253YY_RULE_SETUP
     2254#line 250 "lex.ll"
    22482255{ KEYWORD_RETURN(SIZEOF); }
    22492256        YY_BREAK
    2250 case 81:
    2251 YY_RULE_SETUP
    2252 #line 250 "lex.ll"
     2257case 82:
     2258YY_RULE_SETUP
     2259#line 251 "lex.ll"
    22532260{ KEYWORD_RETURN(STATIC); }
    22542261        YY_BREAK
    2255 case 82:
    2256 YY_RULE_SETUP
    2257 #line 251 "lex.ll"
     2262case 83:
     2263YY_RULE_SETUP
     2264#line 252 "lex.ll"
    22582265{ KEYWORD_RETURN(STATICASSERT); }               // C11
    22592266        YY_BREAK
    2260 case 83:
    2261 YY_RULE_SETUP
    2262 #line 252 "lex.ll"
     2267case 84:
     2268YY_RULE_SETUP
     2269#line 253 "lex.ll"
    22632270{ KEYWORD_RETURN(STRUCT); }
    22642271        YY_BREAK
    2265 case 84:
    2266 YY_RULE_SETUP
    2267 #line 253 "lex.ll"
     2272case 85:
     2273YY_RULE_SETUP
     2274#line 254 "lex.ll"
    22682275{ KEYWORD_RETURN(SWITCH); }
    22692276        YY_BREAK
    2270 case 85:
    2271 YY_RULE_SETUP
    2272 #line 254 "lex.ll"
     2277case 86:
     2278YY_RULE_SETUP
     2279#line 255 "lex.ll"
    22732280{ KEYWORD_RETURN(THREADLOCAL); }                // C11
    22742281        YY_BREAK
    2275 case 86:
    2276 YY_RULE_SETUP
    2277 #line 255 "lex.ll"
     2282case 87:
     2283YY_RULE_SETUP
     2284#line 256 "lex.ll"
    22782285{ KEYWORD_RETURN(THROW); }                              // CFA
    22792286        YY_BREAK
    2280 case 87:
    2281 YY_RULE_SETUP
    2282 #line 256 "lex.ll"
     2287case 88:
     2288YY_RULE_SETUP
     2289#line 257 "lex.ll"
    22832290{ KEYWORD_RETURN(THROWRESUME); }                // CFA
    22842291        YY_BREAK
    2285 case 88:
    2286 YY_RULE_SETUP
    2287 #line 257 "lex.ll"
     2292case 89:
     2293YY_RULE_SETUP
     2294#line 258 "lex.ll"
    22882295{ KEYWORD_RETURN(TRAIT); }                              // CFA
    22892296        YY_BREAK
    2290 case 89:
    2291 YY_RULE_SETUP
    2292 #line 258 "lex.ll"
     2297case 90:
     2298YY_RULE_SETUP
     2299#line 259 "lex.ll"
    22932300{ KEYWORD_RETURN(TRY); }                                // CFA
    22942301        YY_BREAK
    2295 case 90:
    2296 YY_RULE_SETUP
    2297 #line 259 "lex.ll"
     2302case 91:
     2303YY_RULE_SETUP
     2304#line 260 "lex.ll"
    22982305{ KEYWORD_RETURN(TYPEDEF); }
    2299         YY_BREAK
    2300 case 91:
    2301 YY_RULE_SETUP
    2302 #line 260 "lex.ll"
    2303 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    23042306        YY_BREAK
    23052307case 92:
     
    23162318YY_RULE_SETUP
    23172319#line 263 "lex.ll"
     2320{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2321        YY_BREAK
     2322case 95:
     2323YY_RULE_SETUP
     2324#line 264 "lex.ll"
    23182325{ KEYWORD_RETURN(UNION); }
    23192326        YY_BREAK
    2320 case 95:
    2321 YY_RULE_SETUP
    2322 #line 264 "lex.ll"
     2327case 96:
     2328YY_RULE_SETUP
     2329#line 265 "lex.ll"
    23232330{ KEYWORD_RETURN(UNSIGNED); }
    23242331        YY_BREAK
    2325 case 96:
    2326 YY_RULE_SETUP
    2327 #line 265 "lex.ll"
     2332case 97:
     2333YY_RULE_SETUP
     2334#line 266 "lex.ll"
    23282335{ KEYWORD_RETURN(VALIST); }                     // GCC
    23292336        YY_BREAK
    2330 case 97:
    2331 YY_RULE_SETUP
    2332 #line 266 "lex.ll"
     2337case 98:
     2338YY_RULE_SETUP
     2339#line 267 "lex.ll"
    23332340{ KEYWORD_RETURN(VOID); }
    23342341        YY_BREAK
    2335 case 98:
    2336 YY_RULE_SETUP
    2337 #line 267 "lex.ll"
     2342case 99:
     2343YY_RULE_SETUP
     2344#line 268 "lex.ll"
    23382345{ KEYWORD_RETURN(VOLATILE); }
    2339         YY_BREAK
    2340 case 99:
    2341 YY_RULE_SETUP
    2342 #line 268 "lex.ll"
    2343 { KEYWORD_RETURN(VOLATILE); }                   // GCC
    23442346        YY_BREAK
    23452347case 100:
     
    23512353YY_RULE_SETUP
    23522354#line 270 "lex.ll"
     2355{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2356        YY_BREAK
     2357case 102:
     2358YY_RULE_SETUP
     2359#line 271 "lex.ll"
    23532360{ KEYWORD_RETURN(WHILE); }
    23542361        YY_BREAK
    23552362/* identifier */
    2356 case 102:
    2357 YY_RULE_SETUP
    2358 #line 273 "lex.ll"
     2363case 103:
     2364YY_RULE_SETUP
     2365#line 274 "lex.ll"
    23592366{ IDENTIFIER_RETURN(); }
    23602367        YY_BREAK
    2361 case 103:
    2362 YY_RULE_SETUP
    2363 #line 274 "lex.ll"
     2368case 104:
     2369YY_RULE_SETUP
     2370#line 275 "lex.ll"
    23642371{ ATTRIBUTE_RETURN(); }
    23652372        YY_BREAK
    2366 case 104:
    2367 YY_RULE_SETUP
    2368 #line 275 "lex.ll"
     2373case 105:
     2374YY_RULE_SETUP
     2375#line 276 "lex.ll"
    23692376{ BEGIN BKQUOTE; }
    23702377        YY_BREAK
    2371 case 105:
    2372 YY_RULE_SETUP
    2373 #line 276 "lex.ll"
     2378case 106:
     2379YY_RULE_SETUP
     2380#line 277 "lex.ll"
    23742381{ IDENTIFIER_RETURN(); }
    23752382        YY_BREAK
    2376 case 106:
    2377 YY_RULE_SETUP
    2378 #line 277 "lex.ll"
     2383case 107:
     2384YY_RULE_SETUP
     2385#line 278 "lex.ll"
    23792386{ BEGIN 0; }
    23802387        YY_BREAK
    23812388/* numeric constants */
    2382 case 107:
    2383 YY_RULE_SETUP
    2384 #line 280 "lex.ll"
     2389case 108:
     2390YY_RULE_SETUP
     2391#line 281 "lex.ll"
    23852392{ NUMERIC_RETURN(ZERO); }                               // CFA
    23862393        YY_BREAK
    2387 case 108:
    2388 YY_RULE_SETUP
    2389 #line 281 "lex.ll"
     2394case 109:
     2395YY_RULE_SETUP
     2396#line 282 "lex.ll"
    23902397{ NUMERIC_RETURN(ONE); }                                // CFA
    2391         YY_BREAK
    2392 case 109:
    2393 YY_RULE_SETUP
    2394 #line 282 "lex.ll"
    2395 { NUMERIC_RETURN(INTEGERconstant); }
    23962398        YY_BREAK
    23972399case 110:
     
    24082410YY_RULE_SETUP
    24092411#line 285 "lex.ll"
    2410 { NUMERIC_RETURN(FLOATINGconstant); }
     2412{ NUMERIC_RETURN(INTEGERconstant); }
    24112413        YY_BREAK
    24122414case 113:
     
    24152417{ NUMERIC_RETURN(FLOATINGconstant); }
    24162418        YY_BREAK
     2419case 114:
     2420YY_RULE_SETUP
     2421#line 287 "lex.ll"
     2422{ NUMERIC_RETURN(FLOATINGconstant); }
     2423        YY_BREAK
    24172424/* character constant, allows empty value */
    2418 case 114:
    2419 YY_RULE_SETUP
    2420 #line 289 "lex.ll"
     2425case 115:
     2426YY_RULE_SETUP
     2427#line 290 "lex.ll"
    24212428{ BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    24222429        YY_BREAK
    2423 case 115:
    2424 YY_RULE_SETUP
    2425 #line 290 "lex.ll"
     2430case 116:
     2431YY_RULE_SETUP
     2432#line 291 "lex.ll"
    24262433{ *strtext += std::string( yytext ); }
    24272434        YY_BREAK
    2428 case 116:
    2429 /* rule 116 can match eol */
    2430 YY_RULE_SETUP
    2431 #line 291 "lex.ll"
     2435case 117:
     2436/* rule 117 can match eol */
     2437YY_RULE_SETUP
     2438#line 292 "lex.ll"
    24322439{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
    24332440        YY_BREAK
    24342441/* ' stop highlighting */
    24352442/* string constant */
    2436 case 117:
    2437 YY_RULE_SETUP
    2438 #line 295 "lex.ll"
     2443case 118:
     2444YY_RULE_SETUP
     2445#line 296 "lex.ll"
    24392446{ BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    24402447        YY_BREAK
    2441 case 118:
    2442 YY_RULE_SETUP
    2443 #line 296 "lex.ll"
     2448case 119:
     2449YY_RULE_SETUP
     2450#line 297 "lex.ll"
    24442451{ *strtext += std::string( yytext ); }
    24452452        YY_BREAK
    2446 case 119:
    2447 /* rule 119 can match eol */
    2448 YY_RULE_SETUP
    2449 #line 297 "lex.ll"
     2453case 120:
     2454/* rule 120 can match eol */
     2455YY_RULE_SETUP
     2456#line 298 "lex.ll"
    24502457{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
    24512458        YY_BREAK
    24522459/* " stop highlighting */
    24532460/* common character/string constant */
    2454 case 120:
    2455 YY_RULE_SETUP
    2456 #line 301 "lex.ll"
     2461case 121:
     2462YY_RULE_SETUP
     2463#line 302 "lex.ll"
    24572464{ rm_underscore(); *strtext += std::string( yytext ); }
    24582465        YY_BREAK
    2459 case 121:
    2460 /* rule 121 can match eol */
    2461 YY_RULE_SETUP
    2462 #line 302 "lex.ll"
     2466case 122:
     2467/* rule 122 can match eol */
     2468YY_RULE_SETUP
     2469#line 303 "lex.ll"
    24632470{}                                              // continuation (ALSO HANDLED BY CPP)
    24642471        YY_BREAK
    2465 case 122:
    2466 YY_RULE_SETUP
    2467 #line 303 "lex.ll"
     2472case 123:
     2473YY_RULE_SETUP
     2474#line 304 "lex.ll"
    24682475{ *strtext += std::string( yytext ); } // unknown escape character
    24692476        YY_BREAK
    24702477/* punctuation */
    2471 case 123:
    2472 YY_RULE_SETUP
    2473 #line 306 "lex.ll"
    2474 { ASCIIOP_RETURN(); }
    2475         YY_BREAK
    24762478case 124:
    24772479YY_RULE_SETUP
     
    25022504YY_RULE_SETUP
    25032505#line 312 "lex.ll"
     2506{ ASCIIOP_RETURN(); }
     2507        YY_BREAK
     2508case 130:
     2509YY_RULE_SETUP
     2510#line 313 "lex.ll"
    25042511{ ASCIIOP_RETURN(); }                                   // also operator
    2505         YY_BREAK
    2506 case 130:
    2507 YY_RULE_SETUP
    2508 #line 313 "lex.ll"
    2509 { ASCIIOP_RETURN(); }
    25102512        YY_BREAK
    25112513case 131:
     
    25172519YY_RULE_SETUP
    25182520#line 315 "lex.ll"
     2521{ ASCIIOP_RETURN(); }
     2522        YY_BREAK
     2523case 133:
     2524YY_RULE_SETUP
     2525#line 316 "lex.ll"
    25192526{ ASCIIOP_RETURN(); }                                   // also operator
    25202527        YY_BREAK
    2521 case 133:
    2522 YY_RULE_SETUP
    2523 #line 316 "lex.ll"
     2528case 134:
     2529YY_RULE_SETUP
     2530#line 317 "lex.ll"
    25242531{ NAMEDOP_RETURN(ELLIPSIS); }
    25252532        YY_BREAK
    25262533/* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
    2527 case 134:
    2528 YY_RULE_SETUP
    2529 #line 319 "lex.ll"
     2534case 135:
     2535YY_RULE_SETUP
     2536#line 320 "lex.ll"
    25302537{ RETURN_VAL('['); }
    25312538        YY_BREAK
    2532 case 135:
    2533 YY_RULE_SETUP
    2534 #line 320 "lex.ll"
     2539case 136:
     2540YY_RULE_SETUP
     2541#line 321 "lex.ll"
    25352542{ RETURN_VAL(']'); }
    25362543        YY_BREAK
    2537 case 136:
    2538 YY_RULE_SETUP
    2539 #line 321 "lex.ll"
     2544case 137:
     2545YY_RULE_SETUP
     2546#line 322 "lex.ll"
    25402547{ RETURN_VAL('{'); }
    25412548        YY_BREAK
    2542 case 137:
    2543 YY_RULE_SETUP
    2544 #line 322 "lex.ll"
     2549case 138:
     2550YY_RULE_SETUP
     2551#line 323 "lex.ll"
    25452552{ RETURN_VAL('}'); }
    25462553        YY_BREAK
    25472554/* operators */
    2548 case 138:
    2549 YY_RULE_SETUP
    2550 #line 325 "lex.ll"
    2551 { ASCIIOP_RETURN(); }
    2552         YY_BREAK
    25532555case 139:
    25542556YY_RULE_SETUP
     
    26182620case 152:
    26192621YY_RULE_SETUP
    2620 #line 340 "lex.ll"
     2622#line 339 "lex.ll"
     2623{ ASCIIOP_RETURN(); }
     2624        YY_BREAK
     2625case 153:
     2626YY_RULE_SETUP
     2627#line 341 "lex.ll"
    26212628{ NAMEDOP_RETURN(ICR); }
    26222629        YY_BREAK
    2623 case 153:
    2624 YY_RULE_SETUP
    2625 #line 341 "lex.ll"
     2630case 154:
     2631YY_RULE_SETUP
     2632#line 342 "lex.ll"
    26262633{ NAMEDOP_RETURN(DECR); }
    26272634        YY_BREAK
    2628 case 154:
    2629 YY_RULE_SETUP
    2630 #line 342 "lex.ll"
     2635case 155:
     2636YY_RULE_SETUP
     2637#line 343 "lex.ll"
    26312638{ NAMEDOP_RETURN(EQ); }
    26322639        YY_BREAK
    2633 case 155:
    2634 YY_RULE_SETUP
    2635 #line 343 "lex.ll"
     2640case 156:
     2641YY_RULE_SETUP
     2642#line 344 "lex.ll"
    26362643{ NAMEDOP_RETURN(NE); }
    26372644        YY_BREAK
    2638 case 156:
    2639 YY_RULE_SETUP
    2640 #line 344 "lex.ll"
     2645case 157:
     2646YY_RULE_SETUP
     2647#line 345 "lex.ll"
    26412648{ NAMEDOP_RETURN(LS); }
    26422649        YY_BREAK
    2643 case 157:
    2644 YY_RULE_SETUP
    2645 #line 345 "lex.ll"
     2650case 158:
     2651YY_RULE_SETUP
     2652#line 346 "lex.ll"
    26462653{ NAMEDOP_RETURN(RS); }
    26472654        YY_BREAK
    2648 case 158:
    2649 YY_RULE_SETUP
    2650 #line 346 "lex.ll"
     2655case 159:
     2656YY_RULE_SETUP
     2657#line 347 "lex.ll"
    26512658{ NAMEDOP_RETURN(LE); }
    26522659        YY_BREAK
    2653 case 159:
    2654 YY_RULE_SETUP
    2655 #line 347 "lex.ll"
     2660case 160:
     2661YY_RULE_SETUP
     2662#line 348 "lex.ll"
    26562663{ NAMEDOP_RETURN(GE); }
    26572664        YY_BREAK
    2658 case 160:
    2659 YY_RULE_SETUP
    2660 #line 348 "lex.ll"
     2665case 161:
     2666YY_RULE_SETUP
     2667#line 349 "lex.ll"
    26612668{ NAMEDOP_RETURN(ANDAND); }
    26622669        YY_BREAK
    2663 case 161:
    2664 YY_RULE_SETUP
    2665 #line 349 "lex.ll"
     2670case 162:
     2671YY_RULE_SETUP
     2672#line 350 "lex.ll"
    26662673{ NAMEDOP_RETURN(OROR); }
    26672674        YY_BREAK
    2668 case 162:
    2669 YY_RULE_SETUP
    2670 #line 350 "lex.ll"
     2675case 163:
     2676YY_RULE_SETUP
     2677#line 351 "lex.ll"
    26712678{ NAMEDOP_RETURN(ARROW); }
    26722679        YY_BREAK
    2673 case 163:
    2674 YY_RULE_SETUP
    2675 #line 351 "lex.ll"
     2680case 164:
     2681YY_RULE_SETUP
     2682#line 352 "lex.ll"
    26762683{ NAMEDOP_RETURN(PLUSassign); }
    26772684        YY_BREAK
    2678 case 164:
    2679 YY_RULE_SETUP
    2680 #line 352 "lex.ll"
     2685case 165:
     2686YY_RULE_SETUP
     2687#line 353 "lex.ll"
    26812688{ NAMEDOP_RETURN(MINUSassign); }
    26822689        YY_BREAK
    2683 case 165:
    2684 YY_RULE_SETUP
    2685 #line 353 "lex.ll"
     2690case 166:
     2691YY_RULE_SETUP
     2692#line 354 "lex.ll"
    26862693{ NAMEDOP_RETURN(MULTassign); }
    26872694        YY_BREAK
    2688 case 166:
    2689 YY_RULE_SETUP
    2690 #line 354 "lex.ll"
     2695case 167:
     2696YY_RULE_SETUP
     2697#line 355 "lex.ll"
    26912698{ NAMEDOP_RETURN(DIVassign); }
    26922699        YY_BREAK
    2693 case 167:
    2694 YY_RULE_SETUP
    2695 #line 355 "lex.ll"
     2700case 168:
     2701YY_RULE_SETUP
     2702#line 356 "lex.ll"
    26962703{ NAMEDOP_RETURN(MODassign); }
    26972704        YY_BREAK
    2698 case 168:
    2699 YY_RULE_SETUP
    2700 #line 356 "lex.ll"
     2705case 169:
     2706YY_RULE_SETUP
     2707#line 357 "lex.ll"
    27012708{ NAMEDOP_RETURN(ANDassign); }
    27022709        YY_BREAK
    2703 case 169:
    2704 YY_RULE_SETUP
    2705 #line 357 "lex.ll"
     2710case 170:
     2711YY_RULE_SETUP
     2712#line 358 "lex.ll"
    27062713{ NAMEDOP_RETURN(ORassign); }
    27072714        YY_BREAK
    2708 case 170:
    2709 YY_RULE_SETUP
    2710 #line 358 "lex.ll"
     2715case 171:
     2716YY_RULE_SETUP
     2717#line 359 "lex.ll"
    27112718{ NAMEDOP_RETURN(ERassign); }
    27122719        YY_BREAK
    2713 case 171:
    2714 YY_RULE_SETUP
    2715 #line 359 "lex.ll"
     2720case 172:
     2721YY_RULE_SETUP
     2722#line 360 "lex.ll"
    27162723{ NAMEDOP_RETURN(LSassign); }
    27172724        YY_BREAK
    2718 case 172:
    2719 YY_RULE_SETUP
    2720 #line 360 "lex.ll"
     2725case 173:
     2726YY_RULE_SETUP
     2727#line 361 "lex.ll"
    27212728{ NAMEDOP_RETURN(RSassign); }
    27222729        YY_BREAK
    2723 case 173:
    2724 YY_RULE_SETUP
    2725 #line 362 "lex.ll"
    2726 { NAMEDOP_RETURN(ATassign); }
     2730case 174:
     2731YY_RULE_SETUP
     2732#line 363 "lex.ll"
     2733{ NAMEDOP_RETURN(ATassign); }                   // CFA
    27272734        YY_BREAK
    27282735/* CFA, operator identifier */
    2729 case 174:
    2730 YY_RULE_SETUP
    2731 #line 365 "lex.ll"
     2736case 175:
     2737YY_RULE_SETUP
     2738#line 366 "lex.ll"
    27322739{ IDENTIFIER_RETURN(); }                                // unary
    2733         YY_BREAK
    2734 case 175:
    2735 YY_RULE_SETUP
    2736 #line 366 "lex.ll"
    2737 { IDENTIFIER_RETURN(); }
    27382740        YY_BREAK
    27392741case 176:
     
    27452747YY_RULE_SETUP
    27462748#line 368 "lex.ll"
     2749{ IDENTIFIER_RETURN(); }
     2750        YY_BREAK
     2751case 178:
     2752YY_RULE_SETUP
     2753#line 369 "lex.ll"
    27472754{ IDENTIFIER_RETURN(); }                // binary
    27482755        YY_BREAK
     
    27732780          an argument list.
    27742781        */
    2775 case 178:
    2776 YY_RULE_SETUP
    2777 #line 395 "lex.ll"
     2782case 179:
     2783YY_RULE_SETUP
     2784#line 396 "lex.ll"
    27782785{
    27792786        // 1 or 2 character unary operator ?
     
    27882795        YY_BREAK
    27892796/* unknown characters */
    2790 case 179:
    2791 YY_RULE_SETUP
    2792 #line 407 "lex.ll"
     2797case 180:
     2798YY_RULE_SETUP
     2799#line 408 "lex.ll"
    27932800{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
    27942801        YY_BREAK
    2795 case 180:
    2796 YY_RULE_SETUP
    2797 #line 409 "lex.ll"
     2802case 181:
     2803YY_RULE_SETUP
     2804#line 410 "lex.ll"
    27982805ECHO;
    27992806        YY_BREAK
    2800 #line 2801 "Parser/lex.cc"
     2807#line 2808 "Parser/lex.cc"
    28012808case YY_STATE_EOF(INITIAL):
    28022809case YY_STATE_EOF(COMMENT):
     
    30953102                        {
    30963103                        yy_current_state = (int) yy_def[yy_current_state];
    3097                         if ( yy_current_state >= 888 )
     3104                        if ( yy_current_state >= 892 )
    30983105                                yy_c = yy_meta[(unsigned int) yy_c];
    30993106                        }
     
    31233130                {
    31243131                yy_current_state = (int) yy_def[yy_current_state];
    3125                 if ( yy_current_state >= 888 )
     3132                if ( yy_current_state >= 892 )
    31263133                        yy_c = yy_meta[(unsigned int) yy_c];
    31273134                }
    31283135        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
    3129         yy_is_jam = (yy_current_state == 887);
     3136        yy_is_jam = (yy_current_state == 891);
    31303137
    31313138        return yy_is_jam ? 0 : yy_current_state;
     
    37733780#define YYTABLES_NAME "yytables"
    37743781
    3775 #line 409 "lex.ll"
     3782#line 410 "lex.ll"
    37763783
    37773784
  • src/Parser/lex.ll

    r950f7a7 r7527e63  
    99 * Author           : Peter A. Buhr
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    11  * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Thu Jun 23 07:29:30 2016
    13  * Update Count     : 457
     11 * Last Modified By :
     12 * Last Modified On : Sun Jul 31 07:19:36 2016
     13 * Update Count     : 459
    1414 */
    1515
     
    213213__extension__   { KEYWORD_RETURN(EXTENSION); }                  // GCC
    214214extern                  { KEYWORD_RETURN(EXTERN); }
     215fallthrough             { KEYWORD_RETURN(FALLTHRU); }                   // CFA
    215216fallthru                { KEYWORD_RETURN(FALLTHRU); }                   // CFA
    216217finally                 { KEYWORD_RETURN(FINALLY); }                    // CFA
     
    360361">>="                   { NAMEDOP_RETURN(RSassign); }
    361362
    362 "@="                    { NAMEDOP_RETURN(ATassign); }
     363"@="                    { NAMEDOP_RETURN(ATassign); }                   // CFA
    363364
    364365                                /* CFA, operator identifier */
  • src/Parser/parser.cc

    r950f7a7 r7527e63  
    8989TypedefTable typedefTable;
    9090
     91void appendStr( std::string &to, std::string *from ) {
     92        // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
     93        to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
     94} // appendStr
     95
    9196
    9297/* Line 268 of yacc.c  */
    93 #line 94 "Parser/parser.cc"
     98#line 99 "Parser/parser.cc"
    9499
    95100/* Enabling traces.  */
     
    342347
    343348/* Line 293 of yacc.c  */
    344 #line 110 "parser.yy"
     349#line 115 "parser.yy"
    345350
    346351        Token tok;
     
    351356        DeclarationNode::TypeClass tclass;
    352357        StatementNode *sn;
    353         ConstantNode *constant;
     358        ConstantExpr *constant;
     359        ForCtl *fctl;
    354360        LabelNode *label;
    355361        InitializerNode *in;
     362        OperKinds op;
    356363        bool flag;
    357364
     
    359366
    360367/* Line 293 of yacc.c  */
    361 #line 362 "Parser/parser.cc"
     368#line 369 "Parser/parser.cc"
    362369} YYSTYPE;
    363370# define YYSTYPE_IS_TRIVIAL 1
     
    371378
    372379/* Line 343 of yacc.c  */
    373 #line 374 "Parser/parser.cc"
     380#line 381 "Parser/parser.cc"
    374381
    375382#ifdef short
     
    588595
    589596/* YYFINAL -- State number of the termination state.  */
    590 #define YYFINAL  252
     597#define YYFINAL  251
    591598/* YYLAST -- Last index in YYTABLE.  */
    592 #define YYLAST   12080
     599#define YYLAST   10816
    593600
    594601/* YYNTOKENS -- Number of terminals.  */
     
    597604#define YYNNTS  241
    598605/* YYNRULES -- Number of rules.  */
    599 #define YYNRULES  755
     606#define YYNRULES  750
    600607/* YYNRULES -- Number of states.  */
    601 #define YYNSTATES  1579
     608#define YYNSTATES  1554
    602609
    603610/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
     
    614621       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    615622       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    616        2,     2,     2,   122,     2,     2,     2,   125,   119,     2,
    617      109,   110,   118,   120,   116,   121,   113,   124,     2,     2,
    618        2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
    619      126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
     623       2,     2,     2,   121,     2,     2,     2,   124,   118,     2,
     624     109,   110,   117,   119,   116,   120,   113,   123,     2,     2,
     625       2,     2,     2,     2,     2,     2,     2,     2,   130,   132,
     626     125,   131,   126,   129,     2,     2,     2,     2,     2,     2,
    620627       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    621628       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    622        2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
     629       2,   111,     2,   112,   127,     2,     2,     2,     2,     2,
    623630       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    624631       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    625        2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
     632       2,     2,     2,   114,   128,   115,   122,     2,     2,     2,
    626633       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    627634       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    658665      17,    19,    21,    23,    25,    27,    29,    31,    34,    36,
    659666      38,    42,    46,    48,    55,    60,    64,    72,    76,    84,
    660       87,    90,    98,   103,   105,   109,   110,   112,   116,   124,
    661      134,   136,   140,   142,   146,   154,   158,   166,   168,   170,
    662      172,   175,   178,   181,   184,   187,   190,   195,   202,   204,
    663      209,   214,   217,   222,   224,   226,   228,   230,   232,   234,
    664      236,   238,   243,   248,   250,   254,   258,   262,   264,   268,
    665      272,   274,   278,   282,   284,   288,   292,   296,   300,   302,
    666      306,   310,   312,   316,   318,   322,   324,   328,   330,   334,
    667      336,   340,   342,   348,   353,   359,   361,   363,   367,   371,
    668      374,   375,   377,   380,   386,   393,   401,   403,   407,   409,
    669      411,   413,   415,   417,   419,   421,   423,   425,   427,   429,
    670      433,   434,   436,   438,   440,   442,   444,   446,   448,   450,
    671      452,   459,   464,   467,   475,   477,   481,   483,   486,   488,
    672      491,   493,   496,   499,   505,   513,   519,   529,   535,   545,
    673      547,   551,   553,   555,   559,   563,   566,   568,   571,   574,
    674      575,   577,   580,   584,   585,   587,   590,   594,   598,   603,
    675      604,   606,   608,   611,   617,   625,   632,   639,   644,   648,
    676      653,   656,   660,   663,   667,   671,   675,   679,   685,   689,
    677      693,   698,   700,   706,   713,   719,   726,   736,   747,   757,
    678      768,   771,   773,   776,   779,   782,   784,   791,   800,   811,
    679      824,   839,   840,   842,   843,   845,   847,   851,   856,   864,
    680      865,   867,   871,   873,   877,   879,   881,   883,   887,   889,
    681      891,   893,   897,   898,   900,   904,   909,   911,   915,   917,
    682      919,   923,   927,   931,   935,   939,   942,   946,   953,   957,
    683      961,   966,   968,   971,   974,   978,   984,   993,  1001,  1009,
    684     1015,  1025,  1028,  1031,  1037,  1041,  1047,  1052,  1056,  1061,
    685     1066,  1074,  1078,  1082,  1086,  1090,  1095,  1102,  1104,  1106,
    686     1108,  1110,  1112,  1114,  1116,  1118,  1119,  1121,  1123,  1126,
    687     1128,  1130,  1132,  1134,  1136,  1138,  1140,  1141,  1147,  1149,
    688     1152,  1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,
    689     1175,  1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,
    690     1195,  1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,
    691     1221,  1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,
    692     1258,  1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,
    693     1286,  1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,
    694     1318,  1326,  1329,  1332,  1335,  1336,  1339,  1342,  1346,  1349,
    695     1353,  1355,  1358,  1362,  1365,  1368,  1373,  1374,  1376,  1379,
    696     1382,  1384,  1385,  1387,  1390,  1393,  1399,  1402,  1403,  1411,
    697     1414,  1419,  1420,  1423,  1424,  1426,  1428,  1430,  1436,  1442,
    698     1448,  1450,  1456,  1462,  1472,  1474,  1480,  1481,  1483,  1485,
    699     1491,  1493,  1495,  1501,  1507,  1509,  1513,  1517,  1522,  1524,
    700     1526,  1528,  1530,  1533,  1535,  1539,  1543,  1545,  1548,  1550,
    701     1554,  1556,  1558,  1560,  1562,  1564,  1566,  1568,  1570,  1572,
    702     1574,  1576,  1579,  1581,  1583,  1585,  1588,  1589,  1592,  1595,
    703     1597,  1602,  1603,  1605,  1608,  1612,  1617,  1620,  1623,  1625,
    704     1628,  1630,  1633,  1639,  1645,  1653,  1660,  1662,  1665,  1668,
    705     1672,  1674,  1677,  1680,  1685,  1688,  1693,  1694,  1699,  1702,
    706     1704,  1706,  1708,  1709,  1712,  1718,  1724,  1738,  1740,  1742,
    707     1746,  1750,  1753,  1757,  1761,  1764,  1769,  1771,  1778,  1788,
    708     1789,  1801,  1803,  1807,  1811,  1815,  1817,  1819,  1825,  1828,
    709     1834,  1835,  1837,  1839,  1843,  1844,  1846,  1848,  1850,  1852,
    710     1853,  1860,  1863,  1865,  1868,  1873,  1876,  1880,  1884,  1888,
    711     1893,  1899,  1905,  1911,  1918,  1920,  1922,  1924,  1928,  1929,
    712     1935,  1936,  1938,  1940,  1943,  1950,  1952,  1956,  1957,  1959,
    713     1964,  1966,  1968,  1970,  1972,  1975,  1977,  1980,  1983,  1985,
    714     1989,  1992,  1996,  2000,  2003,  2008,  2013,  2017,  2026,  2030,
    715     2033,  2035,  2038,  2045,  2054,  2058,  2061,  2065,  2069,  2074,
    716     2079,  2083,  2085,  2087,  2089,  2094,  2101,  2105,  2108,  2112,
    717     2116,  2121,  2126,  2130,  2133,  2135,  2138,  2141,  2143,  2147,
    718     2150,  2154,  2158,  2161,  2166,  2171,  2175,  2182,  2191,  2195,
    719     2198,  2200,  2203,  2206,  2209,  2213,  2217,  2220,  2225,  2230,
    720     2234,  2241,  2250,  2254,  2257,  2259,  2262,  2265,  2267,  2269,
    721     2272,  2276,  2280,  2283,  2288,  2295,  2304,  2306,  2309,  2312,
    722     2314,  2317,  2320,  2324,  2328,  2330,  2335,  2340,  2344,  2350,
    723     2359,  2363,  2366,  2370,  2372,  2378,  2384,  2391,  2398,  2400,
    724     2403,  2406,  2408,  2411,  2414,  2418,  2422,  2424,  2429,  2434,
    725     2438,  2444,  2453,  2457,  2459,  2462,  2464,  2467,  2474,  2480,
    726     2487,  2495,  2503,  2505,  2508,  2511,  2513,  2516,  2519,  2523,
    727     2527,  2529,  2534,  2539,  2543,  2552,  2556,  2558,  2560,  2563,
    728     2565,  2567,  2570,  2574,  2577,  2581,  2584,  2588,  2592,  2595,
    729     2600,  2604,  2607,  2611,  2614,  2619,  2623,  2626,  2633,  2640,
    730     2647,  2655,  2657,  2660,  2662,  2664,  2666,  2669,  2673,  2676,
    731     2680,  2683,  2687,  2691,  2696,  2699,  2703,  2708,  2711,  2717,
    732     2723,  2730,  2737,  2738,  2740,  2741
     667      87,    90,    98,   103,   105,   109,   110,   112,   114,   118,
     668     120,   124,   132,   136,   144,   146,   148,   150,   153,   156,
     669     159,   162,   165,   168,   173,   176,   181,   188,   190,   195,
     670     200,   202,   204,   206,   208,   210,   212,   214,   219,   224,
     671     226,   230,   234,   238,   240,   244,   248,   250,   254,   258,
     672     260,   264,   268,   272,   276,   278,   282,   286,   288,   292,
     673     294,   298,   300,   304,   306,   310,   312,   316,   318,   324,
     674     329,   335,   337,   339,   343,   346,   347,   349,   351,   353,
     675     355,   357,   359,   361,   363,   365,   367,   369,   371,   374,
     676     380,   387,   395,   397,   401,   403,   407,   408,   410,   412,
     677     414,   416,   418,   420,   422,   424,   426,   433,   438,   441,
     678     449,   451,   455,   457,   460,   462,   465,   467,   470,   473,
     679     479,   487,   493,   503,   509,   519,   521,   525,   527,   529,
     680     533,   537,   540,   542,   545,   548,   549,   551,   554,   558,
     681     559,   561,   564,   568,   572,   577,   578,   580,   582,   585,
     682     591,   599,   606,   613,   618,   622,   627,   630,   634,   637,
     683     641,   645,   649,   653,   659,   663,   667,   672,   674,   680,
     684     687,   693,   700,   710,   721,   731,   742,   745,   747,   750,
     685     753,   756,   758,   765,   774,   785,   798,   813,   814,   816,
     686     817,   819,   821,   825,   830,   838,   839,   841,   845,   847,
     687     851,   853,   855,   857,   861,   863,   865,   867,   871,   872,
     688     874,   878,   883,   885,   889,   891,   893,   897,   901,   905,
     689     909,   913,   916,   920,   927,   931,   935,   940,   942,   945,
     690     948,   952,   958,   967,   975,   983,   989,   999,  1002,  1005,
     691    1011,  1015,  1021,  1026,  1030,  1035,  1040,  1048,  1052,  1056,
     692    1060,  1064,  1069,  1076,  1078,  1080,  1082,  1084,  1086,  1088,
     693    1090,  1092,  1093,  1095,  1097,  1100,  1102,  1104,  1106,  1108,
     694    1110,  1112,  1114,  1115,  1121,  1123,  1126,  1130,  1132,  1135,
     695    1137,  1139,  1141,  1143,  1145,  1147,  1149,  1151,  1153,  1155,
     696    1157,  1159,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
     697    1177,  1179,  1181,  1184,  1187,  1191,  1195,  1197,  1201,  1203,
     698    1206,  1209,  1212,  1217,  1222,  1227,  1232,  1234,  1237,  1240,
     699    1244,  1246,  1249,  1252,  1254,  1257,  1260,  1264,  1266,  1269,
     700    1272,  1274,  1276,  1281,  1284,  1285,  1292,  1300,  1303,  1306,
     701    1309,  1310,  1313,  1316,  1320,  1323,  1327,  1329,  1332,  1336,
     702    1339,  1342,  1347,  1348,  1350,  1353,  1356,  1358,  1359,  1361,
     703    1364,  1367,  1373,  1376,  1377,  1385,  1388,  1393,  1394,  1397,
     704    1398,  1400,  1402,  1404,  1410,  1416,  1422,  1424,  1430,  1436,
     705    1446,  1448,  1454,  1455,  1457,  1459,  1465,  1467,  1469,  1475,
     706    1481,  1483,  1487,  1491,  1496,  1498,  1500,  1502,  1504,  1507,
     707    1509,  1513,  1517,  1519,  1522,  1524,  1528,  1530,  1532,  1534,
     708    1536,  1538,  1540,  1542,  1544,  1546,  1548,  1550,  1553,  1555,
     709    1557,  1559,  1562,  1563,  1566,  1569,  1571,  1576,  1577,  1579,
     710    1582,  1586,  1591,  1594,  1597,  1599,  1602,  1605,  1611,  1617,
     711    1625,  1632,  1634,  1637,  1640,  1644,  1646,  1649,  1652,  1657,
     712    1660,  1665,  1666,  1671,  1674,  1676,  1678,  1680,  1681,  1684,
     713    1690,  1696,  1710,  1712,  1714,  1718,  1722,  1725,  1729,  1733,
     714    1736,  1741,  1743,  1750,  1760,  1761,  1773,  1775,  1779,  1783,
     715    1787,  1789,  1791,  1797,  1800,  1806,  1807,  1809,  1811,  1815,
     716    1816,  1818,  1820,  1822,  1824,  1825,  1832,  1835,  1837,  1840,
     717    1845,  1848,  1852,  1856,  1860,  1865,  1871,  1877,  1883,  1890,
     718    1892,  1894,  1896,  1900,  1901,  1907,  1908,  1910,  1912,  1915,
     719    1922,  1924,  1928,  1929,  1931,  1936,  1938,  1940,  1942,  1944,
     720    1947,  1949,  1952,  1955,  1957,  1961,  1964,  1968,  1972,  1975,
     721    1980,  1985,  1989,  1998,  2002,  2005,  2007,  2010,  2017,  2026,
     722    2030,  2033,  2037,  2041,  2046,  2051,  2055,  2057,  2059,  2061,
     723    2066,  2073,  2077,  2080,  2084,  2088,  2093,  2098,  2102,  2105,
     724    2107,  2110,  2113,  2115,  2119,  2122,  2126,  2130,  2133,  2138,
     725    2143,  2147,  2154,  2163,  2167,  2170,  2172,  2175,  2178,  2181,
     726    2185,  2189,  2192,  2197,  2202,  2206,  2213,  2222,  2226,  2229,
     727    2231,  2234,  2237,  2239,  2241,  2244,  2248,  2252,  2255,  2260,
     728    2267,  2276,  2278,  2281,  2284,  2286,  2289,  2292,  2296,  2300,
     729    2302,  2307,  2312,  2316,  2322,  2331,  2335,  2338,  2342,  2344,
     730    2350,  2356,  2363,  2370,  2372,  2375,  2378,  2380,  2383,  2386,
     731    2390,  2394,  2396,  2401,  2406,  2410,  2416,  2425,  2429,  2431,
     732    2434,  2436,  2439,  2446,  2452,  2459,  2467,  2475,  2477,  2480,
     733    2483,  2485,  2488,  2491,  2495,  2499,  2501,  2506,  2511,  2515,
     734    2524,  2528,  2530,  2532,  2535,  2537,  2539,  2542,  2546,  2549,
     735    2553,  2556,  2560,  2564,  2567,  2572,  2576,  2579,  2583,  2586,
     736    2591,  2595,  2598,  2605,  2612,  2619,  2627,  2629,  2632,  2634,
     737    2636,  2638,  2641,  2645,  2648,  2652,  2655,  2659,  2663,  2668,
     738    2671,  2675,  2680,  2683,  2689,  2695,  2702,  2709,  2710,  2712,
     739    2713
    733740};
    734741
     
    747754     109,   275,   110,   114,   279,   372,   115,    -1,   143,   114,
    748755     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    749      164,    -1,   139,   117,   164,    -1,   111,   134,   164,   135,
    750      112,   117,   164,    -1,   111,   134,   164,   116,   167,   135,
    751      112,   117,   164,    -1,   147,    -1,   146,   116,   147,    -1,
    752      139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
    753      146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
    754      111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
    755      141,    -1,    40,   151,    -1,   149,   151,    -1,   150,   151,
    756       -1,    86,   148,    -1,    87,   148,    -1,    37,   148,    -1,
    757       37,   109,   275,   110,    -1,    38,   109,   275,   116,   139,
    758      110,    -1,    76,    -1,    76,   109,   276,   110,    -1,    76,
    759      109,   145,   110,    -1,    66,   148,    -1,    66,   109,   275,
    760      110,    -1,   118,    -1,   119,    -1,    94,    -1,   120,    -1,
    761      121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   275,
    762      110,   151,    -1,   109,   275,   110,   166,    -1,   151,    -1,
    763      152,   118,   151,    -1,   152,   124,   151,    -1,   152,   125,
    764      151,    -1,   152,    -1,   153,   120,   152,    -1,   153,   121,
    765      152,    -1,   153,    -1,   154,    88,   153,    -1,   154,    89,
    766      153,    -1,   154,    -1,   155,   126,   154,    -1,   155,   127,
    767      154,    -1,   155,    90,   154,    -1,   155,    91,   154,    -1,
    768      155,    -1,   156,    92,   155,    -1,   156,    93,   155,    -1,
    769      156,    -1,   157,   119,   156,    -1,   157,    -1,   158,   128,
    770      157,    -1,   158,    -1,   159,   129,   158,    -1,   159,    -1,
    771      160,    94,   159,    -1,   160,    -1,   161,    95,   160,    -1,
    772      161,    -1,   161,   130,   169,   117,   162,    -1,   161,   130,
    773      117,   162,    -1,   161,   130,   169,   117,   166,    -1,   162,
    774       -1,   162,    -1,   148,   131,   164,    -1,   148,   168,   164,
    775       -1,   166,   373,    -1,    -1,   164,    -1,   111,   112,    -1,
    776      111,   134,   164,   135,   112,    -1,   111,   134,   116,   167,
    777      135,   112,    -1,   111,   134,   164,   116,   167,   135,   112,
    778       -1,   165,    -1,   167,   116,   165,    -1,    97,    -1,    98,
    779       -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
    780       -1,   104,    -1,   105,    -1,   106,    -1,   164,    -1,   169,
    781      116,   164,    -1,    -1,   169,    -1,   172,    -1,   173,    -1,
    782      177,    -1,   178,    -1,   190,    -1,   192,    -1,   193,    -1,
    783      198,    -1,   128,   143,   114,   144,   115,   132,    -1,    72,
    784      117,   312,   171,    -1,   114,   115,    -1,   114,   134,   134,
    785      209,   174,   135,   115,    -1,   175,    -1,   174,   134,   175,
    786       -1,   212,    -1,    40,   212,    -1,   308,    -1,   171,   135,
    787       -1,   171,    -1,   176,   171,    -1,   170,   132,    -1,    41,
    788      109,   169,   110,   171,    -1,    41,   109,   169,   110,   171,
    789       42,   171,    -1,    43,   109,   169,   110,   183,    -1,    43,
    790      109,   169,   110,   114,   134,   205,   184,   115,    -1,    53,
    791      109,   169,   110,   183,    -1,    53,   109,   169,   110,   114,
    792      134,   205,   186,   115,    -1,   163,    -1,   163,    96,   163,
    793       -1,   310,    -1,   179,    -1,   180,   116,   179,    -1,    44,
    794      180,   117,    -1,    45,   117,    -1,   181,    -1,   182,   181,
    795       -1,   182,   171,    -1,    -1,   185,    -1,   182,   176,    -1,
    796      185,   182,   176,    -1,    -1,   187,    -1,   182,   189,    -1,
    797      182,   176,   188,    -1,   187,   182,   189,    -1,   187,   182,
    798      176,   188,    -1,    -1,   189,    -1,    56,    -1,    56,   132,
    799       -1,    47,   109,   169,   110,   171,    -1,    46,   171,    47,
    800      109,   169,   110,   132,    -1,    48,   109,   134,   191,   110,
    801      171,    -1,   170,   135,   132,   170,   132,   170,    -1,   212,
    802      170,   132,   170,    -1,    51,    72,   132,    -1,    51,   118,
    803      169,   132,    -1,    50,   132,    -1,    50,    72,   132,    -1,
    804       49,   132,    -1,    49,    72,   132,    -1,    52,   170,   132,
    805       -1,    61,   165,   132,    -1,    62,   165,   132,    -1,    62,
    806      165,    63,   164,   132,    -1,    57,   173,   194,    -1,    57,
    807      173,   196,    -1,    57,   173,   194,   196,    -1,   195,    -1,
    808       58,   109,    96,   110,   173,    -1,   195,    58,   109,    96,
    809      110,   173,    -1,    59,   109,    96,   110,   173,    -1,   195,
    810       59,   109,    96,   110,   173,    -1,    58,   109,   134,   134,
    811      197,   135,   110,   173,   135,    -1,   195,    58,   109,   134,
    812      134,   197,   135,   110,   173,   135,    -1,    59,   109,   134,
    813      134,   197,   135,   110,   173,   135,    -1,   195,    59,   109,
    814      134,   134,   197,   135,   110,   173,   135,    -1,    60,   173,
    815       -1,   225,    -1,   225,   309,    -1,   225,   357,    -1,   366,
    816      139,    -1,   366,    -1,    64,   199,   109,   141,   110,   132,
    817       -1,    64,   199,   109,   141,   117,   200,   110,   132,    -1,
    818       64,   199,   109,   141,   117,   200,   117,   200,   110,   132,
    819       -1,    64,   199,   109,   141,   117,   200,   117,   200,   117,
    820      203,   110,   132,    -1,    64,   199,    51,   109,   141,   117,
    821      117,   200,   117,   203,   117,   204,   110,   132,    -1,    -1,
    822       11,    -1,    -1,   201,    -1,   202,    -1,   201,   116,   202,
    823       -1,   141,   109,   163,   110,    -1,   111,   163,   112,   141,
    824      109,   163,   110,    -1,    -1,   141,    -1,   203,   116,   141,
    825       -1,   139,    -1,   204,   116,   139,    -1,   135,    -1,   206,
    826       -1,   212,    -1,   206,   134,   212,    -1,   135,    -1,   208,
    827       -1,   222,    -1,   208,   134,   222,    -1,    -1,   210,    -1,
    828       29,   211,   132,    -1,   210,    29,   211,   132,    -1,   274,
    829       -1,   211,   116,   274,    -1,   213,    -1,   222,    -1,   214,
    830      135,   132,    -1,   219,   135,   132,    -1,   216,   135,   132,
    831       -1,   293,   135,   132,    -1,   296,   135,   132,    -1,   215,
    832      277,    -1,   231,   215,   277,    -1,   214,   135,   116,   134,
    833      272,   277,    -1,   367,   272,   311,    -1,   370,   272,   311,
    834       -1,   227,   370,   272,   311,    -1,   217,    -1,   227,   217,
    835       -1,   231,   217,    -1,   231,   227,   217,    -1,   216,   135,
    836      116,   134,   272,    -1,   111,   112,   272,   109,   134,   260,
    837      135,   110,    -1,   370,   272,   109,   134,   260,   135,   110,
    838       -1,   218,   272,   109,   134,   260,   135,   110,    -1,   111,
    839      134,   262,   135,   112,    -1,   111,   134,   262,   135,   116,
    840      134,   263,   135,   112,    -1,     3,   215,    -1,     3,   217,
    841       -1,   219,   135,   116,   134,   139,    -1,     3,   225,   309,
    842       -1,   220,   135,   116,   134,   309,    -1,   227,     3,   225,
    843      309,    -1,   225,     3,   309,    -1,   225,     3,   227,   309,
    844       -1,     3,   139,   131,   164,    -1,   221,   135,   116,   134,
    845      139,   131,   164,    -1,   223,   135,   132,    -1,   220,   135,
    846      132,    -1,   221,   135,   132,    -1,   240,   135,   132,    -1,
    847      224,   309,   311,   277,    -1,   223,   116,   312,   309,   311,
    848      277,    -1,   236,    -1,   240,    -1,   242,    -1,   283,    -1,
    849      237,    -1,   241,    -1,   243,    -1,   284,    -1,    -1,   227,
    850       -1,   228,    -1,   227,   228,    -1,   229,    -1,   314,    -1,
    851       10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
    852       -1,    13,   109,   230,   286,   110,    -1,   232,    -1,   227,
    853      232,    -1,   231,   227,   232,    -1,   233,    -1,   232,   233,
    854       -1,   234,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
    855       -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
    856       -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
    857       -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
    858       -1,    27,    -1,    24,    -1,   237,    -1,   231,   237,    -1,
    859      236,   233,    -1,   236,   233,   227,    -1,   236,   233,   237,
    860       -1,   238,    -1,   226,   239,   226,    -1,   235,    -1,   227,
    861      235,    -1,   238,   228,    -1,   238,   235,    -1,    28,   109,
    862      276,   110,    -1,    28,   109,   169,   110,    -1,    78,   109,
    863      276,   110,    -1,    78,   109,   169,   110,    -1,   241,    -1,
    864      231,   241,    -1,   240,   233,    -1,   240,   233,   227,    -1,
    865      244,    -1,   227,   244,    -1,   241,   228,    -1,   243,    -1,
    866      231,   243,    -1,   242,   233,    -1,   242,   233,   227,    -1,
    867       74,    -1,   227,    74,    -1,   243,   228,    -1,   245,    -1,
    868      256,    -1,   247,   114,   248,   115,    -1,   247,   274,    -1,
    869       -1,   247,   274,   246,   114,   248,   115,    -1,   247,   109,
    870      292,   110,   114,   248,   115,    -1,   247,   285,    -1,    31,
    871      312,    -1,    32,   312,    -1,    -1,   248,   249,    -1,   250,
    872      132,    -1,    40,   250,   132,    -1,   251,   132,    -1,    40,
    873      251,   132,    -1,   366,    -1,   366,   274,    -1,   250,   116,
    874      274,    -1,   250,   116,    -1,   225,   252,    -1,   251,   116,
    875      312,   252,    -1,    -1,   254,    -1,   318,   253,    -1,   331,
    876      253,    -1,   357,    -1,    -1,   254,    -1,   117,   163,    -1,
    877       30,   312,    -1,   255,   114,   258,   372,   115,    -1,   255,
    878      274,    -1,    -1,   255,   274,   257,   114,   258,   372,   115,
    879       -1,   274,   259,    -1,   258,   116,   274,   259,    -1,    -1,
    880      131,   163,    -1,    -1,   261,    -1,   263,    -1,   262,    -1,
    881      262,   135,   116,   134,   263,    -1,   263,   135,   116,   134,
    882       96,    -1,   262,   135,   116,   134,    96,    -1,   267,    -1,
    883      263,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
    884      267,    -1,   262,   135,   116,   134,   263,   135,   116,   134,
    885      267,    -1,   268,    -1,   263,   135,   116,   134,   268,    -1,
    886       -1,   265,    -1,   266,    -1,   266,   135,   116,   134,    96,
    887       -1,   270,    -1,   269,    -1,   266,   135,   116,   134,   270,
    888       -1,   266,   135,   116,   134,   269,    -1,   269,    -1,   362,
    889      272,   373,    -1,   370,   272,   373,    -1,   227,   370,   272,
    890      373,    -1,   217,    -1,   270,    -1,   362,    -1,   370,    -1,
    891      227,   370,    -1,   371,    -1,   224,   336,   373,    -1,   224,
    892      340,   373,    -1,   224,    -1,   224,   351,    -1,   139,    -1,
    893      271,   116,   139,    -1,   137,    -1,    74,    -1,    75,    -1,
    894      138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,    -1,
    895       75,    -1,   366,    -1,   225,    -1,   225,   357,    -1,   366,
    896       -1,   371,    -1,   225,    -1,   225,   345,    -1,    -1,   131,
    897      278,    -1,   107,   278,    -1,   164,    -1,   114,   279,   372,
    898      115,    -1,    -1,   278,    -1,   280,   278,    -1,   279,   116,
    899      278,    -1,   279,   116,   280,   278,    -1,   281,   117,    -1,
    900      274,   117,    -1,   282,    -1,   281,   282,    -1,    80,    -1,
    901      113,   274,    -1,   111,   134,   164,   135,   112,    -1,   111,
    902      134,   310,   135,   112,    -1,   111,   134,   163,    96,   163,
    903      135,   112,    -1,   113,   111,   134,   146,   135,   112,    -1,
    904      284,    -1,   231,   284,    -1,   283,   233,    -1,   283,   233,
    905      227,    -1,   285,    -1,   227,   285,    -1,   284,   228,    -1,
    906       75,   109,   292,   110,    -1,   287,   373,    -1,   286,   116,
    907      287,   373,    -1,    -1,   289,   274,   288,   290,    -1,   225,
    908      336,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,   290,
    909      291,    -1,   129,   274,   109,   292,   110,    -1,   129,   114,
    910      134,   298,   115,    -1,   129,   109,   134,   286,   135,   110,
    911      114,   134,   298,   115,   109,   292,   110,    -1,   276,    -1,
    912      164,    -1,   292,   116,   276,    -1,   292,   116,   164,    -1,
    913       33,   294,    -1,   232,    33,   294,    -1,   293,   116,   294,
    914       -1,   295,   290,    -1,   295,   290,   131,   276,    -1,   274,
    915       -1,   273,   109,   134,   286,   135,   110,    -1,    36,   274,
    916      109,   134,   286,   135,   110,   114,   115,    -1,    -1,    36,
    917      274,   109,   134,   286,   135,   110,   114,   297,   298,   115,
    918       -1,   299,    -1,   298,   134,   299,    -1,   300,   135,   132,
    919       -1,   301,   135,   132,    -1,   215,    -1,   217,    -1,   300,
    920      135,   116,   134,   272,    -1,   225,   309,    -1,   301,   135,
    921      116,   134,   309,    -1,    -1,   303,    -1,   305,    -1,   303,
    922      134,   305,    -1,    -1,   303,    -1,   212,    -1,   307,    -1,
    923      198,    -1,    -1,     5,    82,   306,   114,   304,   115,    -1,
    924       40,   305,    -1,   308,    -1,   323,   173,    -1,   327,   134,
    925      207,   173,    -1,   216,   173,    -1,   224,   323,   173,    -1,
    926      227,   323,   173,    -1,   231,   323,   173,    -1,   231,   227,
    927      323,   173,    -1,   224,   327,   134,   207,   173,    -1,   227,
    928      327,   134,   207,   173,    -1,   231,   327,   134,   207,   173,
    929       -1,   231,   227,   327,   134,   207,   173,    -1,   318,    -1,
    930      331,    -1,   323,    -1,   163,   123,   163,    -1,    -1,    64,
    931      109,   141,   110,   312,    -1,    -1,   313,    -1,   314,    -1,
    932      313,   314,    -1,    39,   109,   109,   315,   110,   110,    -1,
    933      316,    -1,   315,   116,   316,    -1,    -1,   317,    -1,   317,
    934      109,   170,   110,    -1,   272,    -1,   234,    -1,   235,    -1,
    935      228,    -1,   319,   312,    -1,   320,    -1,   321,   312,    -1,
    936      322,   312,    -1,   137,    -1,   109,   319,   110,    -1,   149,
    937      318,    -1,   149,   227,   318,    -1,   109,   320,   110,    -1,
    938      319,   349,    -1,   109,   320,   110,   349,    -1,   109,   321,
    939      110,   350,    -1,   109,   321,   110,    -1,   109,   320,   110,
    940      109,   134,   264,   135,   110,    -1,   109,   322,   110,    -1,
    941      324,   312,    -1,   325,    -1,   326,   312,    -1,   319,   109,
    942      134,   264,   135,   110,    -1,   109,   325,   110,   109,   134,
    943      264,   135,   110,    -1,   109,   324,   110,    -1,   149,   323,
    944       -1,   149,   227,   323,    -1,   109,   325,   110,    -1,   109,
    945      325,   110,   349,    -1,   109,   326,   110,   350,    -1,   109,
    946      326,   110,    -1,   328,    -1,   329,    -1,   330,    -1,   319,
    947      109,   271,   110,    -1,   109,   329,   110,   109,   271,   110,
    948       -1,   109,   328,   110,    -1,   149,   327,    -1,   149,   227,
    949      327,    -1,   109,   329,   110,    -1,   109,   329,   110,   349,
    950       -1,   109,   330,   110,   350,    -1,   109,   330,   110,    -1,
    951      332,   312,    -1,   333,    -1,   334,   312,    -1,   335,   312,
    952       -1,   341,    -1,   109,   332,   110,    -1,   149,   331,    -1,
    953      149,   227,   331,    -1,   109,   333,   110,    -1,   332,   349,
    954       -1,   109,   333,   110,   349,    -1,   109,   334,   110,   350,
    955       -1,   109,   334,   110,    -1,   332,   109,   134,   264,   135,
    956      110,    -1,   109,   333,   110,   109,   134,   264,   135,   110,
    957       -1,   109,   335,   110,    -1,   319,   312,    -1,   337,    -1,
    958      338,   312,    -1,   339,   312,    -1,   149,   336,    -1,   149,
    959      227,   336,    -1,   109,   337,   110,    -1,   319,   355,    -1,
    960      109,   337,   110,   349,    -1,   109,   338,   110,   350,    -1,
    961      109,   338,   110,    -1,   319,   109,   134,   264,   135,   110,
    962       -1,   109,   337,   110,   109,   134,   264,   135,   110,    -1,
    963      109,   339,   110,    -1,   341,   312,    -1,   342,    -1,   343,
    964      312,    -1,   344,   312,    -1,    74,    -1,    75,    -1,   149,
    965      340,    -1,   149,   227,   340,    -1,   109,   342,   110,    -1,
    966      341,   355,    -1,   109,   342,   110,   355,    -1,   341,   109,
    967      134,   264,   135,   110,    -1,   109,   342,   110,   109,   134,
    968      264,   135,   110,    -1,   346,    -1,   347,   312,    -1,   348,
    969      312,    -1,   149,    -1,   149,   227,    -1,   149,   345,    -1,
    970      149,   227,   345,    -1,   109,   346,   110,    -1,   349,    -1,
    971      109,   346,   110,   349,    -1,   109,   347,   110,   350,    -1,
    972      109,   347,   110,    -1,   109,   134,   264,   135,   110,    -1,
    973      109,   346,   110,   109,   134,   264,   135,   110,    -1,   109,
    974      348,   110,    -1,   111,   112,    -1,   111,   112,   350,    -1,
    975      350,    -1,   111,   134,   164,   135,   112,    -1,   111,   134,
    976      118,   135,   112,    -1,   350,   111,   134,   164,   135,   112,
    977       -1,   350,   111,   134,   118,   135,   112,    -1,   352,    -1,
    978      353,   312,    -1,   354,   312,    -1,   149,    -1,   149,   227,
    979       -1,   149,   351,    -1,   149,   227,   351,    -1,   109,   352,
    980      110,    -1,   355,    -1,   109,   352,   110,   355,    -1,   109,
    981      353,   110,   350,    -1,   109,   353,   110,    -1,   109,   134,
    982      264,   135,   110,    -1,   109,   352,   110,   109,   134,   264,
    983      135,   110,    -1,   109,   354,   110,    -1,   356,    -1,   356,
    984      350,    -1,   350,    -1,   111,   112,    -1,   111,   134,   227,
    985      118,   135,   112,    -1,   111,   134,   227,   135,   112,    -1,
    986      111,   134,   227,   164,   135,   112,    -1,   111,   134,     7,
    987      226,   164,   135,   112,    -1,   111,   134,   227,     7,   164,
    988      135,   112,    -1,   358,    -1,   359,   312,    -1,   360,   312,
    989       -1,   149,    -1,   149,   227,    -1,   149,   357,    -1,   149,
    990      227,   357,    -1,   109,   358,   110,    -1,   349,    -1,   109,
    991      358,   110,   349,    -1,   109,   359,   110,   350,    -1,   109,
    992      359,   110,    -1,   109,   358,   110,   109,   134,   264,   135,
    993      110,    -1,   109,   360,   110,    -1,   362,    -1,   370,    -1,
    994      227,   370,    -1,   363,    -1,   364,    -1,   149,   225,    -1,
    995      227,   149,   225,    -1,   149,   371,    -1,   227,   149,   371,
    996       -1,   149,   361,    -1,   227,   149,   361,    -1,   111,   112,
    997      225,    -1,   365,   225,    -1,   111,   112,   350,   225,    -1,
    998      365,   350,   225,    -1,   350,   225,    -1,   111,   112,   363,
    999       -1,   365,   363,    -1,   111,   112,   350,   363,    -1,   365,
    1000      350,   363,    -1,   350,   363,    -1,   111,   134,   227,   118,
    1001      135,   112,    -1,   111,   134,   227,   164,   135,   112,    -1,
    1002      111,   134,   231,   164,   135,   112,    -1,   111,   134,   231,
    1003      227,   164,   135,   112,    -1,   370,    -1,   227,   370,    -1,
    1004      367,    -1,   368,    -1,   369,    -1,   149,   225,    -1,   227,
    1005      149,   225,    -1,   149,   371,    -1,   227,   149,   371,    -1,
    1006      149,   366,    -1,   227,   149,   366,    -1,   111,   112,   225,
    1007       -1,   111,   112,   350,   225,    -1,   350,   225,    -1,   111,
    1008      112,   368,    -1,   111,   112,   350,   368,    -1,   350,   368,
    1009       -1,   111,   134,   263,   135,   112,    -1,   111,   112,   109,
    1010      260,   110,    -1,   370,   109,   134,   260,   135,   110,    -1,
    1011      218,   109,   134,   260,   135,   110,    -1,    -1,   116,    -1,
    1012       -1,   131,   164,    -1
     756     164,    -1,   147,    -1,   146,   116,   147,    -1,   139,    -1,
     757     139,   113,   147,    -1,   139,   113,   111,   134,   146,   135,
     758     112,    -1,   139,    85,   147,    -1,   139,    85,   111,   134,
     759     146,   135,   112,    -1,   143,    -1,   136,    -1,   141,    -1,
     760      40,   151,    -1,   149,   151,    -1,   150,   151,    -1,    86,
     761     148,    -1,    87,   148,    -1,    37,   148,    -1,    37,   109,
     762     275,   110,    -1,    66,   148,    -1,    66,   109,   275,   110,
     763      -1,    38,   109,   275,   116,   139,   110,    -1,    76,    -1,
     764      76,   109,   145,   110,    -1,    76,   109,   276,   110,    -1,
     765     117,    -1,   118,    -1,   119,    -1,   120,    -1,   121,    -1,
     766     122,    -1,   148,    -1,   109,   275,   110,   151,    -1,   109,
     767     275,   110,   167,    -1,   151,    -1,   152,   117,   151,    -1,
     768     152,   123,   151,    -1,   152,   124,   151,    -1,   152,    -1,
     769     153,   119,   152,    -1,   153,   120,   152,    -1,   153,    -1,
     770     154,    88,   153,    -1,   154,    89,   153,    -1,   154,    -1,
     771     155,   125,   154,    -1,   155,   126,   154,    -1,   155,    90,
     772     154,    -1,   155,    91,   154,    -1,   155,    -1,   156,    92,
     773     155,    -1,   156,    93,   155,    -1,   156,    -1,   157,   118,
     774     156,    -1,   157,    -1,   158,   127,   157,    -1,   158,    -1,
     775     159,   128,   158,    -1,   159,    -1,   160,    94,   159,    -1,
     776     160,    -1,   161,    95,   160,    -1,   161,    -1,   161,   129,
     777     169,   130,   162,    -1,   161,   129,   130,   162,    -1,   161,
     778     129,   169,   130,   167,    -1,   162,    -1,   162,    -1,   148,
     779     166,   164,    -1,   167,   373,    -1,    -1,   164,    -1,   131,
     780      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
     781      -1,   102,    -1,   103,    -1,   104,    -1,   105,    -1,   106,
     782      -1,   111,   112,    -1,   111,   134,   164,   135,   112,    -1,
     783     111,   134,   116,   168,   135,   112,    -1,   111,   134,   164,
     784     116,   168,   135,   112,    -1,   165,    -1,   168,   116,   165,
     785      -1,   164,    -1,   169,   116,   164,    -1,    -1,   169,    -1,
     786     172,    -1,   173,    -1,   177,    -1,   178,    -1,   190,    -1,
     787     192,    -1,   193,    -1,   198,    -1,   127,   143,   114,   144,
     788     115,   132,    -1,    72,   130,   312,   171,    -1,   114,   115,
     789      -1,   114,   134,   134,   209,   174,   135,   115,    -1,   175,
     790      -1,   174,   134,   175,    -1,   212,    -1,    40,   212,    -1,
     791     308,    -1,   171,   135,    -1,   171,    -1,   176,   171,    -1,
     792     170,   132,    -1,    41,   109,   169,   110,   171,    -1,    41,
     793     109,   169,   110,   171,    42,   171,    -1,    43,   109,   169,
     794     110,   183,    -1,    43,   109,   169,   110,   114,   134,   205,
     795     184,   115,    -1,    53,   109,   169,   110,   183,    -1,    53,
     796     109,   169,   110,   114,   134,   205,   186,   115,    -1,   163,
     797      -1,   163,    96,   163,    -1,   310,    -1,   179,    -1,   180,
     798     116,   179,    -1,    44,   180,   130,    -1,    45,   130,    -1,
     799     181,    -1,   182,   181,    -1,   182,   171,    -1,    -1,   185,
     800      -1,   182,   176,    -1,   185,   182,   176,    -1,    -1,   187,
     801      -1,   182,   189,    -1,   182,   176,   188,    -1,   187,   182,
     802     189,    -1,   187,   182,   176,   188,    -1,    -1,   189,    -1,
     803      56,    -1,    56,   132,    -1,    47,   109,   169,   110,   171,
     804      -1,    46,   171,    47,   109,   169,   110,   132,    -1,    48,
     805     109,   134,   191,   110,   171,    -1,   170,   135,   132,   170,
     806     132,   170,    -1,   212,   170,   132,   170,    -1,    51,    72,
     807     132,    -1,    51,   117,   169,   132,    -1,    50,   132,    -1,
     808      50,    72,   132,    -1,    49,   132,    -1,    49,    72,   132,
     809      -1,    52,   170,   132,    -1,    61,   165,   132,    -1,    62,
     810     165,   132,    -1,    62,   165,    63,   164,   132,    -1,    57,
     811     173,   194,    -1,    57,   173,   196,    -1,    57,   173,   194,
     812     196,    -1,   195,    -1,    58,   109,    96,   110,   173,    -1,
     813     195,    58,   109,    96,   110,   173,    -1,    59,   109,    96,
     814     110,   173,    -1,   195,    59,   109,    96,   110,   173,    -1,
     815      58,   109,   134,   134,   197,   135,   110,   173,   135,    -1,
     816     195,    58,   109,   134,   134,   197,   135,   110,   173,   135,
     817      -1,    59,   109,   134,   134,   197,   135,   110,   173,   135,
     818      -1,   195,    59,   109,   134,   134,   197,   135,   110,   173,
     819     135,    -1,    60,   173,    -1,   225,    -1,   225,   309,    -1,
     820     225,   357,    -1,   366,   139,    -1,   366,    -1,    64,   199,
     821     109,   141,   110,   132,    -1,    64,   199,   109,   141,   130,
     822     200,   110,   132,    -1,    64,   199,   109,   141,   130,   200,
     823     130,   200,   110,   132,    -1,    64,   199,   109,   141,   130,
     824     200,   130,   200,   130,   203,   110,   132,    -1,    64,   199,
     825      51,   109,   141,   130,   130,   200,   130,   203,   130,   204,
     826     110,   132,    -1,    -1,    11,    -1,    -1,   201,    -1,   202,
     827      -1,   201,   116,   202,    -1,   141,   109,   163,   110,    -1,
     828     111,   163,   112,   141,   109,   163,   110,    -1,    -1,   141,
     829      -1,   203,   116,   141,    -1,   139,    -1,   204,   116,   139,
     830      -1,   135,    -1,   206,    -1,   212,    -1,   206,   134,   212,
     831      -1,   135,    -1,   208,    -1,   222,    -1,   208,   134,   222,
     832      -1,    -1,   210,    -1,    29,   211,   132,    -1,   210,    29,
     833     211,   132,    -1,   274,    -1,   211,   116,   274,    -1,   213,
     834      -1,   222,    -1,   214,   135,   132,    -1,   219,   135,   132,
     835      -1,   216,   135,   132,    -1,   293,   135,   132,    -1,   296,
     836     135,   132,    -1,   215,   277,    -1,   231,   215,   277,    -1,
     837     214,   135,   116,   134,   272,   277,    -1,   367,   272,   311,
     838      -1,   370,   272,   311,    -1,   227,   370,   272,   311,    -1,
     839     217,    -1,   227,   217,    -1,   231,   217,    -1,   231,   227,
     840     217,    -1,   216,   135,   116,   134,   272,    -1,   111,   112,
     841     272,   109,   134,   260,   135,   110,    -1,   370,   272,   109,
     842     134,   260,   135,   110,    -1,   218,   272,   109,   134,   260,
     843     135,   110,    -1,   111,   134,   262,   135,   112,    -1,   111,
     844     134,   262,   135,   116,   134,   263,   135,   112,    -1,     3,
     845     215,    -1,     3,   217,    -1,   219,   135,   116,   134,   139,
     846      -1,     3,   225,   309,    -1,   220,   135,   116,   134,   309,
     847      -1,   227,     3,   225,   309,    -1,   225,     3,   309,    -1,
     848     225,     3,   227,   309,    -1,     3,   139,   131,   164,    -1,
     849     221,   135,   116,   134,   139,   131,   164,    -1,   223,   135,
     850     132,    -1,   220,   135,   132,    -1,   221,   135,   132,    -1,
     851     240,   135,   132,    -1,   224,   309,   311,   277,    -1,   223,
     852     116,   312,   309,   311,   277,    -1,   236,    -1,   240,    -1,
     853     242,    -1,   283,    -1,   237,    -1,   241,    -1,   243,    -1,
     854     284,    -1,    -1,   227,    -1,   228,    -1,   227,   228,    -1,
     855     229,    -1,   314,    -1,    10,    -1,    12,    -1,    11,    -1,
     856      14,    -1,    67,    -1,    -1,    13,   109,   230,   286,   110,
     857      -1,   232,    -1,   227,   232,    -1,   231,   227,   232,    -1,
     858     233,    -1,   232,   233,    -1,   234,    -1,     5,    -1,     7,
     859      -1,     4,    -1,     6,    -1,     8,    -1,     9,    -1,    69,
     860      -1,    71,    -1,    16,    -1,    21,    -1,    20,    -1,    18,
     861      -1,    19,    -1,    17,    -1,    22,    -1,    23,    -1,    15,
     862      -1,    25,    -1,    26,    -1,    27,    -1,    24,    -1,   237,
     863      -1,   231,   237,    -1,   236,   233,    -1,   236,   233,   227,
     864      -1,   236,   233,   237,    -1,   238,    -1,   226,   239,   226,
     865      -1,   235,    -1,   227,   235,    -1,   238,   228,    -1,   238,
     866     235,    -1,    28,   109,   276,   110,    -1,    28,   109,   169,
     867     110,    -1,    78,   109,   276,   110,    -1,    78,   109,   169,
     868     110,    -1,   241,    -1,   231,   241,    -1,   240,   233,    -1,
     869     240,   233,   227,    -1,   244,    -1,   227,   244,    -1,   241,
     870     228,    -1,   243,    -1,   231,   243,    -1,   242,   233,    -1,
     871     242,   233,   227,    -1,    74,    -1,   227,    74,    -1,   243,
     872     228,    -1,   245,    -1,   256,    -1,   247,   114,   248,   115,
     873      -1,   247,   274,    -1,    -1,   247,   274,   246,   114,   248,
     874     115,    -1,   247,   109,   292,   110,   114,   248,   115,    -1,
     875     247,   285,    -1,    31,   312,    -1,    32,   312,    -1,    -1,
     876     248,   249,    -1,   250,   132,    -1,    40,   250,   132,    -1,
     877     251,   132,    -1,    40,   251,   132,    -1,   366,    -1,   366,
     878     274,    -1,   250,   116,   274,    -1,   250,   116,    -1,   225,
     879     252,    -1,   251,   116,   312,   252,    -1,    -1,   254,    -1,
     880     318,   253,    -1,   331,   253,    -1,   357,    -1,    -1,   254,
     881      -1,   130,   163,    -1,    30,   312,    -1,   255,   114,   258,
     882     372,   115,    -1,   255,   274,    -1,    -1,   255,   274,   257,
     883     114,   258,   372,   115,    -1,   274,   259,    -1,   258,   116,
     884     274,   259,    -1,    -1,   131,   163,    -1,    -1,   261,    -1,
     885     263,    -1,   262,    -1,   262,   135,   116,   134,   263,    -1,
     886     263,   135,   116,   134,    96,    -1,   262,   135,   116,   134,
     887      96,    -1,   267,    -1,   263,   135,   116,   134,   267,    -1,
     888     262,   135,   116,   134,   267,    -1,   262,   135,   116,   134,
     889     263,   135,   116,   134,   267,    -1,   268,    -1,   263,   135,
     890     116,   134,   268,    -1,    -1,   265,    -1,   266,    -1,   266,
     891     135,   116,   134,    96,    -1,   270,    -1,   269,    -1,   266,
     892     135,   116,   134,   270,    -1,   266,   135,   116,   134,   269,
     893      -1,   269,    -1,   362,   272,   373,    -1,   370,   272,   373,
     894      -1,   227,   370,   272,   373,    -1,   217,    -1,   270,    -1,
     895     362,    -1,   370,    -1,   227,   370,    -1,   371,    -1,   224,
     896     336,   373,    -1,   224,   340,   373,    -1,   224,    -1,   224,
     897     351,    -1,   139,    -1,   271,   116,   139,    -1,   137,    -1,
     898      74,    -1,    75,    -1,   138,    -1,    74,    -1,    75,    -1,
     899     139,    -1,    74,    -1,    75,    -1,   366,    -1,   225,    -1,
     900     225,   357,    -1,   366,    -1,   371,    -1,   225,    -1,   225,
     901     345,    -1,    -1,   131,   278,    -1,   107,   278,    -1,   164,
     902      -1,   114,   279,   372,   115,    -1,    -1,   278,    -1,   280,
     903     278,    -1,   279,   116,   278,    -1,   279,   116,   280,   278,
     904      -1,   281,   130,    -1,   274,   130,    -1,   282,    -1,   281,
     905     282,    -1,   113,   274,    -1,   111,   134,   164,   135,   112,
     906      -1,   111,   134,   310,   135,   112,    -1,   111,   134,   163,
     907      96,   163,   135,   112,    -1,   113,   111,   134,   146,   135,
     908     112,    -1,   284,    -1,   231,   284,    -1,   283,   233,    -1,
     909     283,   233,   227,    -1,   285,    -1,   227,   285,    -1,   284,
     910     228,    -1,    75,   109,   292,   110,    -1,   287,   373,    -1,
     911     286,   116,   287,   373,    -1,    -1,   289,   274,   288,   290,
     912      -1,   225,   336,    -1,    33,    -1,    35,    -1,    34,    -1,
     913      -1,   290,   291,    -1,   128,   274,   109,   292,   110,    -1,
     914     128,   114,   134,   298,   115,    -1,   128,   109,   134,   286,
     915     135,   110,   114,   134,   298,   115,   109,   292,   110,    -1,
     916     276,    -1,   164,    -1,   292,   116,   276,    -1,   292,   116,
     917     164,    -1,    33,   294,    -1,   232,    33,   294,    -1,   293,
     918     116,   294,    -1,   295,   290,    -1,   295,   290,   131,   276,
     919      -1,   274,    -1,   273,   109,   134,   286,   135,   110,    -1,
     920      36,   274,   109,   134,   286,   135,   110,   114,   115,    -1,
     921      -1,    36,   274,   109,   134,   286,   135,   110,   114,   297,
     922     298,   115,    -1,   299,    -1,   298,   134,   299,    -1,   300,
     923     135,   132,    -1,   301,   135,   132,    -1,   215,    -1,   217,
     924      -1,   300,   135,   116,   134,   272,    -1,   225,   309,    -1,
     925     301,   135,   116,   134,   309,    -1,    -1,   303,    -1,   305,
     926      -1,   303,   134,   305,    -1,    -1,   303,    -1,   212,    -1,
     927     307,    -1,   198,    -1,    -1,     5,    82,   306,   114,   304,
     928     115,    -1,    40,   305,    -1,   308,    -1,   323,   173,    -1,
     929     327,   134,   207,   173,    -1,   216,   173,    -1,   224,   323,
     930     173,    -1,   227,   323,   173,    -1,   231,   323,   173,    -1,
     931     231,   227,   323,   173,    -1,   224,   327,   134,   207,   173,
     932      -1,   227,   327,   134,   207,   173,    -1,   231,   327,   134,
     933     207,   173,    -1,   231,   227,   327,   134,   207,   173,    -1,
     934     318,    -1,   331,    -1,   323,    -1,   163,   122,   163,    -1,
     935      -1,    64,   109,   141,   110,   312,    -1,    -1,   313,    -1,
     936     314,    -1,   313,   314,    -1,    39,   109,   109,   315,   110,
     937     110,    -1,   316,    -1,   315,   116,   316,    -1,    -1,   317,
     938      -1,   317,   109,   170,   110,    -1,   272,    -1,   234,    -1,
     939     235,    -1,   228,    -1,   319,   312,    -1,   320,    -1,   321,
     940     312,    -1,   322,   312,    -1,   137,    -1,   109,   319,   110,
     941      -1,   149,   318,    -1,   149,   227,   318,    -1,   109,   320,
     942     110,    -1,   319,   349,    -1,   109,   320,   110,   349,    -1,
     943     109,   321,   110,   350,    -1,   109,   321,   110,    -1,   109,
     944     320,   110,   109,   134,   264,   135,   110,    -1,   109,   322,
     945     110,    -1,   324,   312,    -1,   325,    -1,   326,   312,    -1,
     946     319,   109,   134,   264,   135,   110,    -1,   109,   325,   110,
     947     109,   134,   264,   135,   110,    -1,   109,   324,   110,    -1,
     948     149,   323,    -1,   149,   227,   323,    -1,   109,   325,   110,
     949      -1,   109,   325,   110,   349,    -1,   109,   326,   110,   350,
     950      -1,   109,   326,   110,    -1,   328,    -1,   329,    -1,   330,
     951      -1,   319,   109,   271,   110,    -1,   109,   329,   110,   109,
     952     271,   110,    -1,   109,   328,   110,    -1,   149,   327,    -1,
     953     149,   227,   327,    -1,   109,   329,   110,    -1,   109,   329,
     954     110,   349,    -1,   109,   330,   110,   350,    -1,   109,   330,
     955     110,    -1,   332,   312,    -1,   333,    -1,   334,   312,    -1,
     956     335,   312,    -1,   341,    -1,   109,   332,   110,    -1,   149,
     957     331,    -1,   149,   227,   331,    -1,   109,   333,   110,    -1,
     958     332,   349,    -1,   109,   333,   110,   349,    -1,   109,   334,
     959     110,   350,    -1,   109,   334,   110,    -1,   332,   109,   134,
     960     264,   135,   110,    -1,   109,   333,   110,   109,   134,   264,
     961     135,   110,    -1,   109,   335,   110,    -1,   319,   312,    -1,
     962     337,    -1,   338,   312,    -1,   339,   312,    -1,   149,   336,
     963      -1,   149,   227,   336,    -1,   109,   337,   110,    -1,   319,
     964     355,    -1,   109,   337,   110,   349,    -1,   109,   338,   110,
     965     350,    -1,   109,   338,   110,    -1,   319,   109,   134,   264,
     966     135,   110,    -1,   109,   337,   110,   109,   134,   264,   135,
     967     110,    -1,   109,   339,   110,    -1,   341,   312,    -1,   342,
     968      -1,   343,   312,    -1,   344,   312,    -1,    74,    -1,    75,
     969      -1,   149,   340,    -1,   149,   227,   340,    -1,   109,   342,
     970     110,    -1,   341,   355,    -1,   109,   342,   110,   355,    -1,
     971     341,   109,   134,   264,   135,   110,    -1,   109,   342,   110,
     972     109,   134,   264,   135,   110,    -1,   346,    -1,   347,   312,
     973      -1,   348,   312,    -1,   149,    -1,   149,   227,    -1,   149,
     974     345,    -1,   149,   227,   345,    -1,   109,   346,   110,    -1,
     975     349,    -1,   109,   346,   110,   349,    -1,   109,   347,   110,
     976     350,    -1,   109,   347,   110,    -1,   109,   134,   264,   135,
     977     110,    -1,   109,   346,   110,   109,   134,   264,   135,   110,
     978      -1,   109,   348,   110,    -1,   111,   112,    -1,   111,   112,
     979     350,    -1,   350,    -1,   111,   134,   164,   135,   112,    -1,
     980     111,   134,   117,   135,   112,    -1,   350,   111,   134,   164,
     981     135,   112,    -1,   350,   111,   134,   117,   135,   112,    -1,
     982     352,    -1,   353,   312,    -1,   354,   312,    -1,   149,    -1,
     983     149,   227,    -1,   149,   351,    -1,   149,   227,   351,    -1,
     984     109,   352,   110,    -1,   355,    -1,   109,   352,   110,   355,
     985      -1,   109,   353,   110,   350,    -1,   109,   353,   110,    -1,
     986     109,   134,   264,   135,   110,    -1,   109,   352,   110,   109,
     987     134,   264,   135,   110,    -1,   109,   354,   110,    -1,   356,
     988      -1,   356,   350,    -1,   350,    -1,   111,   112,    -1,   111,
     989     134,   227,   117,   135,   112,    -1,   111,   134,   227,   135,
     990     112,    -1,   111,   134,   227,   164,   135,   112,    -1,   111,
     991     134,     7,   226,   164,   135,   112,    -1,   111,   134,   227,
     992       7,   164,   135,   112,    -1,   358,    -1,   359,   312,    -1,
     993     360,   312,    -1,   149,    -1,   149,   227,    -1,   149,   357,
     994      -1,   149,   227,   357,    -1,   109,   358,   110,    -1,   349,
     995      -1,   109,   358,   110,   349,    -1,   109,   359,   110,   350,
     996      -1,   109,   359,   110,    -1,   109,   358,   110,   109,   134,
     997     264,   135,   110,    -1,   109,   360,   110,    -1,   362,    -1,
     998     370,    -1,   227,   370,    -1,   363,    -1,   364,    -1,   149,
     999     225,    -1,   227,   149,   225,    -1,   149,   371,    -1,   227,
     1000     149,   371,    -1,   149,   361,    -1,   227,   149,   361,    -1,
     1001     111,   112,   225,    -1,   365,   225,    -1,   111,   112,   350,
     1002     225,    -1,   365,   350,   225,    -1,   350,   225,    -1,   111,
     1003     112,   363,    -1,   365,   363,    -1,   111,   112,   350,   363,
     1004      -1,   365,   350,   363,    -1,   350,   363,    -1,   111,   134,
     1005     227,   117,   135,   112,    -1,   111,   134,   227,   164,   135,
     1006     112,    -1,   111,   134,   231,   164,   135,   112,    -1,   111,
     1007     134,   231,   227,   164,   135,   112,    -1,   370,    -1,   227,
     1008     370,    -1,   367,    -1,   368,    -1,   369,    -1,   149,   225,
     1009      -1,   227,   149,   225,    -1,   149,   371,    -1,   227,   149,
     1010     371,    -1,   149,   366,    -1,   227,   149,   366,    -1,   111,
     1011     112,   225,    -1,   111,   112,   350,   225,    -1,   350,   225,
     1012      -1,   111,   112,   368,    -1,   111,   112,   350,   368,    -1,
     1013     350,   368,    -1,   111,   134,   263,   135,   112,    -1,   111,
     1014     112,   109,   260,   110,    -1,   370,   109,   134,   260,   135,
     1015     110,    -1,   218,   109,   134,   260,   135,   110,    -1,    -1,
     1016     116,    -1,    -1,   131,   164,    -1
    10131017};
    10141018
     
    10161020static const yytype_uint16 yyrline[] =
    10171021{
    1018        0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
    1019      317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
    1020      343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
    1021      369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
    1022      402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
    1023      429,   431,   436,   438,   440,   442,   444,   446,   448,   450,
    1024      452,   454,   456,   463,   464,   466,   470,   471,   472,   473,
    1025      477,   478,   480,   485,   486,   488,   490,   495,   496,   498,
    1026      503,   504,   506,   511,   512,   514,   516,   518,   523,   524,
    1027      526,   531,   532,   537,   538,   543,   544,   549,   550,   555,
    1028      556,   561,   562,   564,   566,   571,   576,   577,   579,   581,
    1029      587,   588,   594,   596,   598,   600,   605,   606,   611,   612,
    1030      613,   614,   615,   616,   617,   618,   619,   620,   624,   625,
    1031      631,   632,   638,   639,   640,   641,   642,   643,   644,   645,
    1032      646,   656,   663,   665,   675,   676,   681,   683,   689,   691,
    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,  1479,  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
     1022       0,   298,   298,   304,   313,   314,   315,   319,   320,   321,
     1023     325,   326,   330,   331,   335,   336,   340,   341,   352,   354,
     1024     356,   358,   363,   364,   370,   374,   376,   377,   379,   380,
     1025     382,   384,   386,   395,   396,   402,   403,   407,   408,   412,
     1026     416,   418,   420,   422,   427,   430,   432,   434,   439,   452,
     1027     454,   456,   458,   460,   462,   464,   466,   468,   470,   472,
     1028     479,   480,   486,   487,   488,   489,   493,   494,   496,   501,
     1029     502,   504,   506,   511,   512,   514,   519,   520,   522,   527,
     1030     528,   530,   532,   534,   539,   540,   542,   547,   548,   553,
     1031     554,   559,   560,   565,   566,   571,   572,   577,   578,   581,
     1032     583,   588,   593,   594,   596,   602,   603,   607,   608,   609,
     1033     610,   611,   612,   613,   614,   615,   616,   617,   623,   625,
     1034     627,   629,   634,   635,   640,   641,   647,   648,   654,   655,
     1035     656,   657,   658,   659,   660,   661,   662,   672,   679,   681,
     1036     691,   692,   697,   699,   705,   707,   711,   712,   717,   722,
     1037     725,   727,   729,   739,   741,   752,   753,   755,   759,   761,
     1038     765,   766,   771,   772,   776,   781,   782,   786,   788,   794,
     1039     795,   799,   801,   803,   805,   811,   812,   816,   818,   823,
     1040     825,   827,   832,   834,   839,   841,   845,   848,   852,   855,
     1041     859,   861,   863,   865,   870,   872,   874,   879,   881,   883,
     1042     885,   887,   892,   894,   896,   898,   903,   915,   916,   921,
     1043     923,   928,   932,   934,   936,   938,   940,   946,   947,   953,
     1044     954,   958,   959,   964,   966,   972,   973,   975,   980,   982,
     1045     989,   991,   995,   996,  1001,  1003,  1007,  1008,  1012,  1014,
     1046    1018,  1019,  1023,  1024,  1028,  1029,  1044,  1045,  1046,  1047,
     1047    1048,  1052,  1057,  1064,  1074,  1079,  1084,  1092,  1097,  1102,
     1048    1107,  1112,  1120,  1142,  1147,  1154,  1156,  1163,  1168,  1173,
     1049    1184,  1189,  1194,  1199,  1204,  1213,  1218,  1226,  1227,  1228,
     1050    1229,  1235,  1240,  1248,  1249,  1250,  1251,  1255,  1256,  1257,
     1051    1258,  1263,  1264,  1273,  1274,  1279,  1280,  1285,  1287,  1289,
     1052    1291,  1293,  1296,  1295,  1307,  1308,  1310,  1320,  1321,  1326,
     1053    1330,  1332,  1334,  1336,  1338,  1340,  1342,  1344,  1349,  1351,
     1054    1353,  1355,  1357,  1359,  1361,  1363,  1365,  1367,  1369,  1371,
     1055    1373,  1379,  1380,  1382,  1384,  1386,  1391,  1392,  1398,  1399,
     1056    1401,  1403,  1408,  1410,  1412,  1414,  1419,  1420,  1422,  1424,
     1057    1429,  1430,  1432,  1437,  1438,  1440,  1442,  1447,  1449,  1451,
     1058    1456,  1457,  1461,  1463,  1469,  1468,  1472,  1474,  1479,  1481,
     1059    1487,  1488,  1493,  1494,  1496,  1497,  1506,  1507,  1509,  1511,
     1060    1516,  1518,  1524,  1525,  1527,  1530,  1533,  1538,  1539,  1544,
     1061    1549,  1553,  1555,  1561,  1560,  1567,  1569,  1575,  1576,  1584,
     1062    1585,  1589,  1590,  1591,  1593,  1595,  1602,  1603,  1605,  1607,
     1063    1612,  1613,  1619,  1620,  1624,  1625,  1630,  1631,  1632,  1634,
     1064    1642,  1643,  1645,  1648,  1650,  1654,  1655,  1656,  1658,  1660,
     1065    1664,  1669,  1677,  1678,  1687,  1689,  1694,  1695,  1696,  1700,
     1066    1701,  1702,  1706,  1707,  1708,  1712,  1713,  1714,  1719,  1720,
     1067    1721,  1722,  1728,  1729,  1731,  1736,  1737,  1742,  1743,  1744,
     1068    1745,  1746,  1761,  1762,  1767,  1768,  1774,  1776,  1779,  1781,
     1069    1783,  1806,  1807,  1809,  1811,  1816,  1817,  1819,  1824,  1829,
     1070    1830,  1836,  1835,  1839,  1843,  1845,  1847,  1853,  1854,  1859,
     1071    1864,  1866,  1871,  1873,  1874,  1876,  1881,  1883,  1885,  1890,
     1072    1892,  1897,  1902,  1910,  1916,  1915,  1929,  1930,  1935,  1936,
     1073    1940,  1945,  1950,  1958,  1963,  1974,  1975,  1986,  1987,  1993,
     1074    1994,  1998,  1999,  2000,  2003,  2002,  2013,  2022,  2028,  2034,
     1075    2043,  2049,  2055,  2061,  2067,  2075,  2081,  2089,  2095,  2104,
     1076    2105,  2106,  2110,  2114,  2116,  2121,  2122,  2126,  2127,  2132,
     1077    2138,  2139,  2142,  2144,  2145,  2149,  2150,  2151,  2152,  2186,
     1078    2188,  2189,  2191,  2196,  2201,  2206,  2208,  2210,  2215,  2217,
     1079    2219,  2221,  2226,  2228,  2237,  2239,  2240,  2245,  2247,  2249,
     1080    2254,  2256,  2258,  2263,  2265,  2267,  2276,  2277,  2278,  2282,
     1081    2284,  2286,  2291,  2293,  2295,  2300,  2302,  2304,  2319,  2321,
     1082    2322,  2324,  2329,  2330,  2335,  2337,  2339,  2344,  2346,  2348,
     1083    2350,  2355,  2357,  2359,  2369,  2371,  2372,  2374,  2379,  2381,
     1084    2383,  2388,  2390,  2392,  2394,  2399,  2401,  2403,  2434,  2436,
     1085    2437,  2439,  2444,  2449,  2457,  2459,  2461,  2466,  2468,  2473,
     1086    2475,  2489,  2490,  2492,  2497,  2499,  2501,  2503,  2505,  2510,
     1087    2511,  2513,  2515,  2520,  2522,  2524,  2530,  2532,  2534,  2538,
     1088    2540,  2542,  2544,  2558,  2559,  2561,  2566,  2568,  2570,  2572,
     1089    2574,  2579,  2580,  2582,  2584,  2589,  2591,  2593,  2599,  2600,
     1090    2602,  2611,  2614,  2616,  2619,  2621,  2623,  2636,  2637,  2639,
     1091    2644,  2646,  2648,  2650,  2652,  2657,  2658,  2660,  2662,  2667,
     1092    2669,  2677,  2678,  2679,  2684,  2685,  2689,  2691,  2693,  2695,
     1093    2697,  2699,  2706,  2708,  2710,  2712,  2714,  2716,  2718,  2720,
     1094    2722,  2724,  2729,  2731,  2733,  2738,  2764,  2765,  2767,  2771,
     1095    2772,  2776,  2778,  2780,  2782,  2784,  2786,  2793,  2795,  2797,
     1096    2799,  2801,  2803,  2808,  2813,  2815,  2817,  2835,  2837,  2842,
     1097    2843
    10941098};
    10951099#endif
     
    11171121  "DIVassign", "MODassign", "PLUSassign", "MINUSassign", "LSassign",
    11181122  "RSassign", "ANDassign", "ERassign", "ORassign", "ATassign", "THEN",
    1119   "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "':'", "'*'",
    1120   "'&'", "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'",
    1121   "'|'", "'?'", "'='", "';'", "$accept", "push", "pop", "constant",
     1123  "'('", "')'", "'['", "']'", "'.'", "'{'", "'}'", "','", "'*'", "'&'",
     1124  "'+'", "'-'", "'!'", "'~'", "'/'", "'%'", "'<'", "'>'", "'^'", "'|'",
     1125  "'?'", "':'", "'='", "';'", "$accept", "push", "pop", "constant",
    11221126  "identifier", "no_01_identifier", "no_attr_identifier", "zero_one",
    11231127  "string_literal_list", "primary_expression", "postfix_expression",
     
    11291133  "logical_AND_expression", "logical_OR_expression",
    11301134  "conditional_expression", "constant_expression", "assignment_expression",
    1131   "assignment_expression_opt", "tuple", "tuple_expression_list",
    1132   "assignment_operator", "comma_expression", "comma_expression_opt",
     1135  "assignment_expression_opt", "assignment_operator", "tuple",
     1136  "tuple_expression_list", "comma_expression", "comma_expression_opt",
    11331137  "statement", "labeled_statement", "compound_statement",
    11341138  "block_item_list", "block_item", "statement_list",
     
    12241228     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    12251229     355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
    1226       41,    91,    93,    46,   123,   125,    44,    58,    42,    38,
    1227       43,    45,    33,   126,    47,    37,    60,    62,    94,   124,
    1228       63,    61,    59
     1230      41,    91,    93,    46,   123,   125,    44,    42,    38,    43,
     1231      45,    33,   126,    47,    37,    60,    62,    94,   124,    63,
     1232      58,    61,    59
    12291233};
    12301234# endif
     
    12361240     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
    12371241     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
    1238      143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
    1239      146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
     1242     143,   143,   143,   144,   144,   145,   145,   146,   146,   147,
     1243     147,   147,   147,   147,   148,   148,   148,   148,   148,   148,
    12401244     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
    1241      148,   148,   148,   149,   149,   149,   150,   150,   150,   150,
    1242      151,   151,   151,   152,   152,   152,   152,   153,   153,   153,
    1243      154,   154,   154,   155,   155,   155,   155,   155,   156,   156,
    1244      156,   157,   157,   158,   158,   159,   159,   160,   160,   161,
    1245      161,   162,   162,   162,   162,   163,   164,   164,   164,   164,
    1246      165,   165,   166,   166,   166,   166,   167,   167,   168,   168,
    1247      168,   168,   168,   168,   168,   168,   168,   168,   169,   169,
    1248      170,   170,   171,   171,   171,   171,   171,   171,   171,   171,
    1249      171,   172,   173,   173,   174,   174,   175,   175,   175,   175,
    1250      176,   176,   177,   178,   178,   178,   178,   178,   178,   179,
    1251      179,   179,   180,   180,   181,   181,   182,   182,   183,   184,
    1252      184,   185,   185,   186,   186,   187,   187,   187,   187,   188,
    1253      188,   189,   189,   190,   190,   190,   191,   191,   192,   192,
    1254      192,   192,   192,   192,   192,   192,   192,   192,   193,   193,
    1255      193,   194,   194,   194,   194,   194,   195,   195,   195,   195,
    1256      196,   197,   197,   197,   197,   197,   198,   198,   198,   198,
    1257      198,   199,   199,   200,   200,   201,   201,   202,   202,   203,
    1258      203,   203,   204,   204,   205,   205,   206,   206,   207,   207,
    1259      208,   208,   209,   209,   210,   210,   211,   211,   212,   212,
    1260      213,   213,   213,   213,   213,   214,   214,   214,   215,   215,
    1261      215,   216,   216,   216,   216,   216,   217,   217,   217,   218,
    1262      218,   219,   219,   219,   220,   220,   220,   220,   220,   221,
    1263      221,   222,   222,   222,   222,   223,   223,   224,   224,   224,
    1264      224,   225,   225,   225,   225,   226,   226,   227,   227,   228,
    1265      228,   229,   229,   229,   229,   229,   230,   229,   231,   231,
    1266      231,   232,   232,   233,   234,   234,   234,   234,   234,   234,
    1267      234,   234,   235,   235,   235,   235,   235,   235,   235,   235,
    1268      235,   235,   235,   235,   235,   236,   236,   236,   236,   236,
    1269      237,   237,   238,   238,   238,   238,   239,   239,   239,   239,
    1270      240,   240,   240,   240,   241,   241,   241,   242,   242,   242,
    1271      242,   243,   243,   243,   244,   244,   245,   245,   246,   245,
    1272      245,   245,   247,   247,   248,   248,   249,   249,   249,   249,
    1273      250,   250,   250,   250,   251,   251,   252,   252,   252,   252,
    1274      252,   253,   253,   254,   255,   256,   256,   257,   256,   258,
    1275      258,   259,   259,   260,   260,   261,   261,   261,   261,   261,
    1276      262,   262,   262,   262,   263,   263,   264,   264,   265,   265,
    1277      266,   266,   266,   266,   267,   267,   267,   267,   267,   268,
    1278      268,   268,   268,   268,   269,   269,   270,   270,   271,   271,
    1279      272,   272,   272,   273,   273,   273,   274,   274,   274,   275,
    1280      275,   275,   276,   276,   276,   276,   277,   277,   277,   278,
    1281      278,   279,   279,   279,   279,   279,   280,   280,   281,   281,
    1282      282,   282,   282,   282,   282,   282,   283,   283,   283,   283,
    1283      284,   284,   284,   285,   286,   286,   288,   287,   287,   289,
    1284      289,   289,   290,   290,   291,   291,   291,   292,   292,   292,
    1285      292,   293,   293,   293,   294,   294,   295,   295,   296,   297,
    1286      296,   298,   298,   299,   299,   300,   300,   300,   301,   301,
    1287      302,   302,   303,   303,   304,   304,   305,   305,   305,   306,
    1288      305,   305,   307,   307,   307,   308,   308,   308,   308,   308,
    1289      308,   308,   308,   308,   309,   309,   309,   310,   311,   311,
    1290      312,   312,   313,   313,   314,   315,   315,   316,   316,   316,
    1291      317,   317,   317,   317,   318,   318,   318,   318,   319,   319,
    1292      320,   320,   320,   321,   321,   321,   321,   322,   322,   323,
    1293      323,   323,   324,   324,   324,   325,   325,   325,   326,   326,
    1294      326,   327,   327,   327,   328,   328,   328,   329,   329,   329,
    1295      330,   330,   330,   331,   331,   331,   331,   332,   332,   333,
    1296      333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
    1297      336,   336,   336,   337,   337,   337,   338,   338,   338,   338,
    1298      339,   339,   339,   340,   340,   340,   340,   341,   341,   342,
    1299      342,   342,   343,   343,   344,   344,   345,   345,   345,   346,
    1300      346,   346,   346,   346,   347,   347,   347,   347,   348,   348,
    1301      348,   349,   349,   349,   350,   350,   350,   350,   351,   351,
    1302      351,   352,   352,   352,   352,   352,   353,   353,   353,   353,
    1303      354,   354,   354,   355,   355,   355,   356,   356,   356,   356,
    1304      356,   356,   357,   357,   357,   358,   358,   358,   358,   358,
    1305      359,   359,   359,   359,   360,   360,   361,   361,   361,   362,
    1306      362,   363,   363,   363,   363,   363,   363,   364,   364,   364,
    1307      364,   364,   364,   364,   364,   364,   364,   365,   365,   365,
    1308      365,   366,   366,   366,   367,   367,   368,   368,   368,   368,
    1309      368,   368,   369,   369,   369,   369,   369,   369,   370,   371,
    1310      371,   371,   372,   372,   373,   373
     1245     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
     1246     152,   152,   152,   153,   153,   153,   154,   154,   154,   155,
     1247     155,   155,   155,   155,   156,   156,   156,   157,   157,   158,
     1248     158,   159,   159,   160,   160,   161,   161,   162,   162,   162,
     1249     162,   163,   164,   164,   164,   165,   165,   166,   166,   166,
     1250     166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
     1251     167,   167,   168,   168,   169,   169,   170,   170,   171,   171,
     1252     171,   171,   171,   171,   171,   171,   171,   172,   173,   173,
     1253     174,   174,   175,   175,   175,   175,   176,   176,   177,   178,
     1254     178,   178,   178,   178,   178,   179,   179,   179,   180,   180,
     1255     181,   181,   182,   182,   183,   184,   184,   185,   185,   186,
     1256     186,   187,   187,   187,   187,   188,   188,   189,   189,   190,
     1257     190,   190,   191,   191,   192,   192,   192,   192,   192,   192,
     1258     192,   192,   192,   192,   193,   193,   193,   194,   194,   194,
     1259     194,   194,   195,   195,   195,   195,   196,   197,   197,   197,
     1260     197,   197,   198,   198,   198,   198,   198,   199,   199,   200,
     1261     200,   201,   201,   202,   202,   203,   203,   203,   204,   204,
     1262     205,   205,   206,   206,   207,   207,   208,   208,   209,   209,
     1263     210,   210,   211,   211,   212,   212,   213,   213,   213,   213,
     1264     213,   214,   214,   214,   215,   215,   215,   216,   216,   216,
     1265     216,   216,   217,   217,   217,   218,   218,   219,   219,   219,
     1266     220,   220,   220,   220,   220,   221,   221,   222,   222,   222,
     1267     222,   223,   223,   224,   224,   224,   224,   225,   225,   225,
     1268     225,   226,   226,   227,   227,   228,   228,   229,   229,   229,
     1269     229,   229,   230,   229,   231,   231,   231,   232,   232,   233,
     1270     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
     1271     235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
     1272     235,   236,   236,   236,   236,   236,   237,   237,   238,   238,
     1273     238,   238,   239,   239,   239,   239,   240,   240,   240,   240,
     1274     241,   241,   241,   242,   242,   242,   242,   243,   243,   243,
     1275     244,   244,   245,   245,   246,   245,   245,   245,   247,   247,
     1276     248,   248,   249,   249,   249,   249,   250,   250,   250,   250,
     1277     251,   251,   252,   252,   252,   252,   252,   253,   253,   254,
     1278     255,   256,   256,   257,   256,   258,   258,   259,   259,   260,
     1279     260,   261,   261,   261,   261,   261,   262,   262,   262,   262,
     1280     263,   263,   264,   264,   265,   265,   266,   266,   266,   266,
     1281     267,   267,   267,   267,   267,   268,   268,   268,   268,   268,
     1282     269,   269,   270,   270,   271,   271,   272,   272,   272,   273,
     1283     273,   273,   274,   274,   274,   275,   275,   275,   276,   276,
     1284     276,   276,   277,   277,   277,   278,   278,   279,   279,   279,
     1285     279,   279,   280,   280,   281,   281,   282,   282,   282,   282,
     1286     282,   283,   283,   283,   283,   284,   284,   284,   285,   286,
     1287     286,   288,   287,   287,   289,   289,   289,   290,   290,   291,
     1288     291,   291,   292,   292,   292,   292,   293,   293,   293,   294,
     1289     294,   295,   295,   296,   297,   296,   298,   298,   299,   299,
     1290     300,   300,   300,   301,   301,   302,   302,   303,   303,   304,
     1291     304,   305,   305,   305,   306,   305,   305,   307,   307,   307,
     1292     308,   308,   308,   308,   308,   308,   308,   308,   308,   309,
     1293     309,   309,   310,   311,   311,   312,   312,   313,   313,   314,
     1294     315,   315,   316,   316,   316,   317,   317,   317,   317,   318,
     1295     318,   318,   318,   319,   319,   320,   320,   320,   321,   321,
     1296     321,   321,   322,   322,   323,   323,   323,   324,   324,   324,
     1297     325,   325,   325,   326,   326,   326,   327,   327,   327,   328,
     1298     328,   328,   329,   329,   329,   330,   330,   330,   331,   331,
     1299     331,   331,   332,   332,   333,   333,   333,   334,   334,   334,
     1300     334,   335,   335,   335,   336,   336,   336,   336,   337,   337,
     1301     337,   338,   338,   338,   338,   339,   339,   339,   340,   340,
     1302     340,   340,   341,   341,   342,   342,   342,   343,   343,   344,
     1303     344,   345,   345,   345,   346,   346,   346,   346,   346,   347,
     1304     347,   347,   347,   348,   348,   348,   349,   349,   349,   350,
     1305     350,   350,   350,   351,   351,   351,   352,   352,   352,   352,
     1306     352,   353,   353,   353,   353,   354,   354,   354,   355,   355,
     1307     355,   356,   356,   356,   356,   356,   356,   357,   357,   357,
     1308     358,   358,   358,   358,   358,   359,   359,   359,   359,   360,
     1309     360,   361,   361,   361,   362,   362,   363,   363,   363,   363,
     1310     363,   363,   364,   364,   364,   364,   364,   364,   364,   364,
     1311     364,   364,   365,   365,   365,   365,   366,   366,   366,   367,
     1312     367,   368,   368,   368,   368,   368,   368,   369,   369,   369,
     1313     369,   369,   369,   370,   371,   371,   371,   372,   372,   373,
     1314     373
    13111315};
    13121316
     
    13171321       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
    13181322       3,     3,     1,     6,     4,     3,     7,     3,     7,     2,
    1319        2,     7,     4,     1,     3,     0,     1,     3,     7,     9,
    1320        1,     3,     1,     3,     7,     3,     7,     1,     1,     1,
    1321        2,     2,     2,     2,     2,     2,     4,     6,     1,     4,
    1322        4,     2,     4,     1,     1,     1,     1,     1,     1,     1,
    1323        1,     4,     4,     1,     3,     3,     3,     1,     3,     3,
    1324        1,     3,     3,     1,     3,     3,     3,     3,     1,     3,
    1325        3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
    1326        3,     1,     5,     4,     5,     1,     1,     3,     3,     2,
    1327        0,     1,     2,     5,     6,     7,     1,     3,     1,     1,
    1328        1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
    1329        0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1330        6,     4,     2,     7,     1,     3,     1,     2,     1,     2,
    1331        1,     2,     2,     5,     7,     5,     9,     5,     9,     1,
    1332        3,     1,     1,     3,     3,     2,     1,     2,     2,     0,
    1333        1,     2,     3,     0,     1,     2,     3,     3,     4,     0,
    1334        1,     1,     2,     5,     7,     6,     6,     4,     3,     4,
    1335        2,     3,     2,     3,     3,     3,     3,     5,     3,     3,
    1336        4,     1,     5,     6,     5,     6,     9,    10,     9,    10,
    1337        2,     1,     2,     2,     2,     1,     6,     8,    10,    12,
    1338       14,     0,     1,     0,     1,     1,     3,     4,     7,     0,
    1339        1,     3,     1,     3,     1,     1,     1,     3,     1,     1,
    1340        1,     3,     0,     1,     3,     4,     1,     3,     1,     1,
    1341        3,     3,     3,     3,     3,     2,     3,     6,     3,     3,
    1342        4,     1,     2,     2,     3,     5,     8,     7,     7,     5,
    1343        9,     2,     2,     5,     3,     5,     4,     3,     4,     4,
    1344        7,     3,     3,     3,     3,     4,     6,     1,     1,     1,
    1345        1,     1,     1,     1,     1,     0,     1,     1,     2,     1,
    1346        1,     1,     1,     1,     1,     1,     0,     5,     1,     2,
    1347        3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
     1323       2,     7,     4,     1,     3,     0,     1,     1,     3,     1,
     1324       3,     7,     3,     7,     1,     1,     1,     2,     2,     2,
     1325       2,     2,     2,     4,     2,     4,     6,     1,     4,     4,
     1326       1,     1,     1,     1,     1,     1,     1,     4,     4,     1,
     1327       3,     3,     3,     1,     3,     3,     1,     3,     3,     1,
     1328       3,     3,     3,     3,     1,     3,     3,     1,     3,     1,
     1329       3,     1,     3,     1,     3,     1,     3,     1,     5,     4,
     1330       5,     1,     1,     3,     2,     0,     1,     1,     1,     1,
     1331       1,     1,     1,     1,     1,     1,     1,     1,     2,     5,
     1332       6,     7,     1,     3,     1,     3,     0,     1,     1,     1,
     1333       1,     1,     1,     1,     1,     1,     6,     4,     2,     7,
     1334       1,     3,     1,     2,     1,     2,     1,     2,     2,     5,
     1335       7,     5,     9,     5,     9,     1,     3,     1,     1,     3,
     1336       3,     2,     1,     2,     2,     0,     1,     2,     3,     0,
     1337       1,     2,     3,     3,     4,     0,     1,     1,     2,     5,
     1338       7,     6,     6,     4,     3,     4,     2,     3,     2,     3,
     1339       3,     3,     3,     5,     3,     3,     4,     1,     5,     6,
     1340       5,     6,     9,    10,     9,    10,     2,     1,     2,     2,
     1341       2,     1,     6,     8,    10,    12,    14,     0,     1,     0,
     1342       1,     1,     3,     4,     7,     0,     1,     3,     1,     3,
     1343       1,     1,     1,     3,     1,     1,     1,     3,     0,     1,
     1344       3,     4,     1,     3,     1,     1,     3,     3,     3,     3,
     1345       3,     2,     3,     6,     3,     3,     4,     1,     2,     2,
     1346       3,     5,     8,     7,     7,     5,     9,     2,     2,     5,
     1347       3,     5,     4,     3,     4,     4,     7,     3,     3,     3,
     1348       3,     4,     6,     1,     1,     1,     1,     1,     1,     1,
     1349       1,     0,     1,     1,     2,     1,     1,     1,     1,     1,
     1350       1,     1,     0,     5,     1,     2,     3,     1,     2,     1,
    13481351       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1349        1,     1,     1,     1,     1,     1,     2,     2,     3,     3,
    1350        1,     3,     1,     2,     2,     2,     4,     4,     4,     4,
    1351        1,     2,     2,     3,     1,     2,     2,     1,     2,     2,
    1352        3,     1,     2,     2,     1,     1,     4,     2,     0,     6,
    1353        7,     2,     2,     2,     0,     2,     2,     3,     2,     3,
    1354        1,     2,     3,     2,     2,     4,     0,     1,     2,     2,
    1355        1,     0,     1,     2,     2,     5,     2,     0,     7,     2,
    1356        4,     0,     2,     0,     1,     1,     1,     5,     5,     5,
    1357        1,     5,     5,     9,     1,     5,     0,     1,     1,     5,
    1358        1,     1,     5,     5,     1,     3,     3,     4,     1,     1,
    1359        1,     1,     2,     1,     3,     3,     1,     2,     1,     3,
    13601352       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1361        1,     2,     1,     1,     1,     2,     0,     2,     2,     1,
    1362        4,     0,     1,     2,     3,     4,     2,     2,     1,     2,
    1363        1,     2,     5,     5,     7,     6,     1,     2,     2,     3,
    1364        1,     2,     2,     4,     2,     4,     0,     4,     2,     1,
    1365        1,     1,     0,     2,     5,     5,    13,     1,     1,     3,
    1366        3,     2,     3,     3,     2,     4,     1,     6,     9,     0,
    1367       11,     1,     3,     3,     3,     1,     1,     5,     2,     5,
    1368        0,     1,     1,     3,     0,     1,     1,     1,     1,     0,
    1369        6,     2,     1,     2,     4,     2,     3,     3,     3,     4,
    1370        5,     5,     5,     6,     1,     1,     1,     3,     0,     5,
    1371        0,     1,     1,     2,     6,     1,     3,     0,     1,     4,
    1372        1,     1,     1,     1,     2,     1,     2,     2,     1,     3,
    1373        2,     3,     3,     2,     4,     4,     3,     8,     3,     2,
    1374        1,     2,     6,     8,     3,     2,     3,     3,     4,     4,
    1375        3,     1,     1,     1,     4,     6,     3,     2,     3,     3,
    1376        4,     4,     3,     2,     1,     2,     2,     1,     3,     2,
    1377        3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
    1378        1,     2,     2,     2,     3,     3,     2,     4,     4,     3,
    1379        6,     8,     3,     2,     1,     2,     2,     1,     1,     2,
    1380        3,     3,     2,     4,     6,     8,     1,     2,     2,     1,
    1381        2,     2,     3,     3,     1,     4,     4,     3,     5,     8,
    1382        3,     2,     3,     1,     5,     5,     6,     6,     1,     2,
    1383        2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
    1384        5,     8,     3,     1,     2,     1,     2,     6,     5,     6,
    1385        7,     7,     1,     2,     2,     1,     2,     2,     3,     3,
    1386        1,     4,     4,     3,     8,     3,     1,     1,     2,     1,
    1387        1,     2,     3,     2,     3,     2,     3,     3,     2,     4,
    1388        3,     2,     3,     2,     4,     3,     2,     6,     6,     6,
    1389        7,     1,     2,     1,     1,     1,     2,     3,     2,     3,
    1390        2,     3,     3,     4,     2,     3,     4,     2,     5,     5,
    1391        6,     6,     0,     1,     0,     2
     1353       1,     1,     2,     2,     3,     3,     1,     3,     1,     2,
     1354       2,     2,     4,     4,     4,     4,     1,     2,     2,     3,
     1355       1,     2,     2,     1,     2,     2,     3,     1,     2,     2,
     1356       1,     1,     4,     2,     0,     6,     7,     2,     2,     2,
     1357       0,     2,     2,     3,     2,     3,     1,     2,     3,     2,
     1358       2,     4,     0,     1,     2,     2,     1,     0,     1,     2,
     1359       2,     5,     2,     0,     7,     2,     4,     0,     2,     0,
     1360       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
     1361       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
     1362       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
     1363       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
     1364       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
     1365       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
     1366       3,     4,     2,     2,     1,     2,     2,     5,     5,     7,
     1367       6,     1,     2,     2,     3,     1,     2,     2,     4,     2,
     1368       4,     0,     4,     2,     1,     1,     1,     0,     2,     5,
     1369       5,    13,     1,     1,     3,     3,     2,     3,     3,     2,
     1370       4,     1,     6,     9,     0,    11,     1,     3,     3,     3,
     1371       1,     1,     5,     2,     5,     0,     1,     1,     3,     0,
     1372       1,     1,     1,     1,     0,     6,     2,     1,     2,     4,
     1373       2,     3,     3,     3,     4,     5,     5,     5,     6,     1,
     1374       1,     1,     3,     0,     5,     0,     1,     1,     2,     6,
     1375       1,     3,     0,     1,     4,     1,     1,     1,     1,     2,
     1376       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
     1377       4,     3,     8,     3,     2,     1,     2,     6,     8,     3,
     1378       2,     3,     3,     4,     4,     3,     1,     1,     1,     4,
     1379       6,     3,     2,     3,     3,     4,     4,     3,     2,     1,
     1380       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
     1381       3,     6,     8,     3,     2,     1,     2,     2,     2,     3,
     1382       3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
     1383       2,     2,     1,     1,     2,     3,     3,     2,     4,     6,
     1384       8,     1,     2,     2,     1,     2,     2,     3,     3,     1,
     1385       4,     4,     3,     5,     8,     3,     2,     3,     1,     5,
     1386       5,     6,     6,     1,     2,     2,     1,     2,     2,     3,
     1387       3,     1,     4,     4,     3,     5,     8,     3,     1,     2,
     1388       1,     2,     6,     5,     6,     7,     7,     1,     2,     2,
     1389       1,     2,     2,     3,     3,     1,     4,     4,     3,     8,
     1390       3,     1,     1,     2,     1,     1,     2,     3,     2,     3,
     1391       2,     3,     3,     2,     4,     3,     2,     3,     2,     4,
     1392       3,     2,     6,     6,     6,     7,     1,     2,     1,     1,
     1393       1,     2,     3,     2,     3,     2,     3,     3,     4,     2,
     1394       3,     4,     2,     5,     5,     6,     6,     0,     1,     0,
     1395       2
    13921396};
    13931397
     
    13971401static const yytype_uint16 yydefact[] =
    13981402{
    1399      295,   295,   316,   314,   317,   315,   318,   319,   301,   303,
    1400      302,     0,   304,   330,   322,   327,   325,   326,   324,   323,
    1401      328,   329,   334,   331,   332,   333,   550,   550,   550,     0,
    1402        0,     0,   295,   221,   305,   320,   321,     7,   361,     0,
    1403        8,    14,    15,    65,     0,     2,    63,    64,   568,     9,
    1404      295,   528,   526,   248,     3,   456,     3,   261,     0,     3,
    1405        3,     3,   249,     3,     0,     0,     0,   296,   297,   299,
    1406      295,   308,   311,   313,   342,   287,   335,   340,   288,   350,
    1407      289,   357,   354,   364,     0,     0,   365,   290,   476,   480,
    1408        3,     3,     0,     2,   522,   527,   532,   300,     0,     0,
    1409      550,   580,   550,     2,   591,   592,   593,   295,     0,   734,
    1410      735,     0,    12,     0,    13,   295,   271,   272,     0,   296,
    1411      291,   292,   293,   294,   529,   306,   394,   551,   552,   372,
    1412      373,    12,   447,   448,    11,   443,   446,     0,   506,   501,
    1413      492,   447,   448,     0,     0,   531,   222,     0,   295,     0,
    1414        0,     0,     0,     0,     0,     0,     0,   295,   295,     2,
    1415        0,   736,   296,   585,   597,   740,   733,   731,   738,     0,
    1416        0,     0,   255,     2,     0,   535,   441,   442,   440,     0,
    1417        0,     0,     0,   550,     0,   637,   638,     0,     0,   548,
    1418      544,   550,   565,   550,   550,   546,     2,   545,   550,   604,
    1419      550,   550,   607,     0,     0,     0,   295,   295,   314,   362,
    1420        2,   295,   262,   298,   309,   343,   355,   481,     0,     2,
    1421        0,   456,   263,   296,   336,   351,   358,   477,     0,     2,
    1422        0,   312,   337,   344,   345,     0,   352,   356,   359,   363,
    1423      448,   295,   374,   367,   371,     0,   396,   478,   482,     0,
    1424        0,     0,     1,   295,     2,   533,   579,   581,   295,     2,
    1425      744,   296,   747,   548,   548,     0,   296,     0,     0,   274,
    1426      550,   546,     2,   295,     0,     0,   295,   553,     2,   504,
    1427        2,   557,     0,     0,     0,     0,     0,     0,    18,    58,
    1428        4,     5,     6,    16,     0,     0,   295,     2,    66,    67,
    1429       68,    69,    48,    19,    49,    22,    47,    70,   295,     0,
    1430       73,    77,    80,    83,    88,    91,    93,    95,    97,    99,
    1431      101,   106,   498,   754,   454,   497,     0,   452,   453,     0,
    1432      569,   584,   587,   590,   596,   599,   602,   361,     0,     2,
    1433      742,     0,   295,   745,     2,    63,   295,     3,   428,     0,
    1434      436,   296,   295,   308,   335,   288,   350,   357,     3,     3,
    1435      410,   414,   424,   429,   476,   295,   430,   709,   710,   295,
    1436      431,   433,   295,     2,   586,   598,   732,     2,     2,   250,
    1437        2,   461,     0,   459,   458,   457,   142,     2,     2,   252,
    1438        2,     2,   251,     2,   282,     2,   283,     0,   281,     0,
    1439        0,     0,     0,     0,     0,     0,     0,     0,   570,   609,
    1440        0,   456,     2,   564,   573,   663,   566,   567,   536,   295,
    1441        2,   603,   612,   605,   606,     0,   277,   295,   295,   341,
    1442      296,     0,   296,     0,   295,   737,   741,   739,   537,   295,
    1443      548,   256,   264,   310,     0,     2,   538,   295,   502,   338,
    1444      339,   284,   353,   360,     0,   295,     0,   752,   401,     0,
    1445      479,   503,   253,   254,   523,   295,   438,     0,   295,   238,
    1446        0,     2,   240,     0,   296,     0,   258,     2,   259,   279,
    1447        0,     0,     2,   295,   548,   295,   489,   491,   490,     0,
    1448        0,   754,     0,   295,     0,   295,   493,   295,   563,   561,
    1449      562,   560,     0,   555,   558,     0,     0,   295,    55,   295,
    1450       70,    50,   295,    61,   295,   295,    53,    54,     2,   128,
    1451        0,     0,   450,     0,   449,   731,   112,   295,    17,     0,
    1452       29,    30,    35,     2,     0,    35,   118,   119,   120,   121,
    1453      122,   123,   124,   125,   126,   127,     0,     0,    51,    52,
     1403     291,   291,   312,   310,   313,   311,   314,   315,   297,   299,
     1404     298,     0,   300,   326,   318,   323,   321,   322,   320,   319,
     1405     324,   325,   330,   327,   328,   329,   545,   545,   545,     0,
     1406       0,     0,   291,   217,   301,   316,   317,     7,   357,     0,
     1407       8,    14,    15,     0,     2,    60,    61,   563,     9,   291,
     1408     523,   521,   244,     3,   452,     3,   257,     0,     3,     3,
     1409       3,   245,     3,     0,     0,     0,   292,   293,   295,   291,
     1410     304,   307,   309,   338,   283,   331,   336,   284,   346,   285,
     1411     353,   350,   360,     0,     0,   361,   286,   471,   475,     3,
     1412       3,     0,     2,   517,   522,   527,   296,     0,     0,   545,
     1413     575,   545,     2,   586,   587,   588,   291,     0,   729,   730,
     1414       0,    12,     0,    13,   291,   267,   268,     0,   292,   287,
     1415     288,   289,   290,   524,   302,   390,   546,   547,   368,   369,
     1416      12,   443,   444,    11,   439,   442,     0,   501,   496,   487,
     1417     443,   444,     0,     0,   526,   218,     0,   291,     0,     0,
     1418       0,     0,     0,     0,     0,     0,   291,   291,     2,     0,
     1419     731,   292,   580,   592,   735,   728,   726,   733,     0,     0,
     1420       0,   251,     2,     0,   530,   437,   438,   436,     0,     0,
     1421       0,     0,   545,     0,   632,   633,     0,     0,   543,   539,
     1422     545,   560,   545,   545,   541,     2,   540,   545,   599,   545,
     1423     545,   602,     0,     0,     0,   291,   291,   310,   358,     2,
     1424     291,   258,   294,   305,   339,   351,   476,     0,     2,     0,
     1425     452,   259,   292,   332,   347,   354,   472,     0,     2,     0,
     1426     308,   333,   340,   341,     0,   348,   352,   355,   359,   444,
     1427     291,   370,   363,   367,     0,   392,   473,   477,     0,     0,
     1428       0,     1,   291,     2,   528,   574,   576,   291,     2,   739,
     1429     292,   742,   543,   543,     0,   292,     0,     0,   270,   545,
     1430     541,     2,   291,     0,     0,   291,   548,     2,   499,     2,
     1431     552,     0,     0,     0,     0,     0,     0,    18,    57,     4,
     1432       5,     6,    16,     0,     0,   291,     2,    62,    63,    64,
     1433      65,    45,    19,    46,    22,    44,    66,   291,     0,    69,
     1434      73,    76,    79,    84,    87,    89,    91,    93,    95,    97,
     1435     102,   493,   749,   450,   492,     0,   448,   449,     0,   564,
     1436     579,   582,   585,   591,   594,   597,   357,     0,     2,   737,
     1437       0,   291,   740,     2,    60,   291,     3,   424,     0,   432,
     1438     292,   291,   304,   331,   284,   346,   353,     3,     3,   406,
     1439     410,   420,   425,   471,   291,   426,   704,   705,   291,   427,
     1440     429,   291,     2,   581,   593,   727,     2,     2,   246,     2,
     1441     457,     0,   455,   454,   453,   138,     2,     2,   248,     2,
     1442       2,   247,     2,   278,     2,   279,     0,   277,     0,     0,
     1443       0,     0,     0,     0,     0,     0,     0,   565,   604,     0,
     1444     452,     2,   559,   568,   658,   561,   562,   531,   291,     2,
     1445     598,   607,   600,   601,     0,   273,   291,   291,   337,   292,
     1446       0,   292,     0,   291,   732,   736,   734,   532,   291,   543,
     1447     252,   260,   306,     0,     2,   533,   291,   497,   334,   335,
     1448     280,   349,   356,     0,   291,     0,   747,   397,     0,   474,
     1449     498,   249,   250,   518,   291,   434,     0,   291,   234,     0,
     1450       2,   236,     0,   292,     0,   254,     2,   255,   275,     0,
     1451       0,     2,   291,   543,   291,   484,   486,   485,     0,     0,
     1452     749,     0,   291,     0,   291,   488,   291,   558,   556,   557,
     1453     555,     0,   550,   553,     0,     0,   291,    52,   291,    66,
     1454      47,   291,    54,   291,   291,    50,    51,     2,   124,     0,
     1455       0,   446,     0,   445,   726,   118,   291,    17,     0,    29,
     1456      30,    35,     2,     0,    35,   108,   109,   110,   111,   112,
     1457     113,   114,   115,   116,   117,   107,     0,    48,    49,     0,
    14541458       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1455        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1456      109,     2,   649,   455,   646,   550,   550,   654,   483,   295,
    1457        2,   588,   589,     0,   600,   601,     0,     2,   743,   746,
    1458      112,   295,     0,     2,   711,   296,   715,   706,   707,   713,
    1459        0,     2,     2,   671,   550,   754,   620,   550,   550,   754,
    1460      550,   634,   550,   550,   685,   437,   668,   550,   550,   676,
    1461      683,   295,   432,   296,     0,     0,   295,   721,   296,   726,
    1462      754,   718,   295,   723,   754,   295,   295,   295,     0,   112,
    1463        0,    18,     5,     2,     0,    19,     0,   462,   752,     0,
    1464        0,   468,   242,     0,   295,     0,     0,     0,   548,   572,
    1465      576,   578,   608,   611,   615,   618,   571,   610,     0,   285,
    1466      661,     0,   295,   278,     0,     0,     0,     0,   276,     2,
    1467        0,   260,   539,   295,     0,     0,   295,     2,   366,   386,
    1468      375,     0,     0,   380,   374,   753,     0,     0,   399,     0,
    1469      296,     3,   417,     3,   421,   420,   594,     0,   534,   295,
    1470       63,     3,   295,   436,   296,     3,   430,   431,     2,     0,
    1471        0,     0,   488,   307,   295,   484,   486,     3,     2,     2,
    1472        0,   505,     3,     0,   557,   130,     0,     0,   223,     0,
    1473        0,     0,     2,     0,     0,    36,     0,     0,   112,   295,
    1474       20,     0,    21,     0,   695,   700,   451,   692,   550,   550,
    1475        0,   110,     3,     2,    27,     2,     0,    33,     0,     2,
    1476       25,     0,   107,   108,    74,    75,    76,    78,    79,    81,
    1477       82,    86,    87,    84,    85,    89,    90,    92,    94,    96,
    1478       98,   100,     0,     0,   755,   295,     0,     0,     0,   650,
    1479      651,   647,   648,   500,   499,   295,     0,   295,   717,   295,
    1480      722,   296,   295,   665,   295,   295,   708,   664,     2,   295,
    1481        0,     0,     0,     0,     0,     0,     0,     0,   686,     0,
    1482      672,   623,   639,   673,     2,   619,   626,   434,   621,   622,
    1483      435,     2,   633,   642,   635,   636,   669,   670,   684,   712,
    1484      716,   714,   754,   269,     2,   748,     2,   425,   720,   725,
    1485      426,     0,   404,     3,     3,     3,     3,   456,     3,     0,
    1486        2,   471,   467,   753,     0,   463,   470,     2,   466,   469,
    1487        0,   295,   243,   265,     3,   273,   275,     0,   456,     2,
    1488      574,   575,     2,   613,   614,     0,   662,   540,     3,   347,
    1489      346,   349,   348,   295,   541,     0,   542,   374,     0,     0,
    1490      295,   295,     0,     0,   695,   384,   387,   391,   550,   391,
    1491      390,   383,   376,   550,   378,   381,   295,   401,   395,   105,
    1492      402,   752,     0,     0,   439,   241,     0,     0,     3,     2,
    1493      671,   432,     0,   530,     0,   754,   492,     0,   295,   295,
    1494      295,     0,   554,   556,   131,     0,     0,   216,     0,     0,
    1495        0,   224,   225,    56,     0,    62,   295,     0,    60,    59,
    1496        0,     2,   129,     0,     0,     0,   696,   697,   693,   694,
    1497      461,    71,    72,   111,   116,     3,   110,     0,     0,     0,
    1498       24,    35,     3,     0,    32,   103,     0,     3,   653,   657,
    1499      660,   652,     3,   595,     3,   719,   724,     2,    63,   295,
    1500        3,     3,   296,     0,     3,   625,   629,   632,   641,   675,
    1501      679,   682,   295,     3,   624,   640,   674,   295,   295,   427,
    1502      295,   295,   749,     0,     0,     0,     0,   257,     0,   105,
    1503        0,     3,     3,     0,   464,     0,   460,     0,     0,   246,
    1504      295,     0,     0,   130,     0,     0,     0,     0,     0,   130,
    1505        0,     0,   110,   110,    18,     2,     0,     0,     3,   132,
    1506      133,     2,   144,   134,   135,   136,   137,   138,   139,   146,
    1507      148,     0,     0,     0,   286,   295,   295,   550,     0,   543,
    1508      295,   377,   379,     0,   393,   696,   388,   392,   389,   382,
    1509      386,   369,   400,     0,   582,     2,   667,   666,     0,   672,
    1510        2,   485,   487,   507,     3,   515,   516,     0,     2,   511,
    1511        3,     3,     0,     0,   559,   223,     0,     0,     0,   223,
    1512        0,     0,     3,    37,   112,   699,   703,   705,   698,   752,
    1513      110,     0,     3,   664,    42,     3,    40,     3,    34,     0,
    1514        3,   102,   104,     0,     2,   655,   656,     0,     0,   295,
    1515        0,     0,     0,     3,   641,     0,     2,   627,   628,     2,
    1516      643,     2,   677,   678,     0,     0,    63,     0,     3,     3,
    1517        3,     3,   412,   411,   415,     2,     2,   751,   750,   113,
    1518        0,     0,     0,     0,     3,   465,     3,     0,   244,   147,
    1519        3,   296,   295,     0,     0,     0,     0,     2,     0,   192,
    1520        0,   190,     0,     0,     0,     0,     0,     0,     0,   550,
    1521      112,     0,   152,   149,   295,     0,     0,   268,   280,     3,
    1522        3,   549,   616,   370,   385,   398,   295,   267,   295,     0,
    1523      518,   495,   295,     0,     0,   494,   509,     0,     0,     0,
    1524      217,     0,   226,    57,   110,     0,     2,   701,   702,     0,
    1525      117,   114,     0,     0,     0,     0,     0,     0,    23,     0,
    1526      658,   295,   583,   266,   727,   728,   729,     0,   680,   295,
    1527      295,   295,     3,     3,     0,   688,     0,     0,     0,     0,
    1528      295,   295,     3,   547,   472,   473,     0,     0,   247,   296,
    1529        0,     0,     0,     0,   295,   193,   191,   188,     0,   194,
    1530        0,     0,     0,     0,   198,   201,   199,   195,     0,   196,
    1531      130,    35,   145,   143,   245,     0,     0,   419,   423,   422,
    1532        0,   512,     2,   513,     2,   514,   508,   295,   229,     0,
    1533      227,     0,   229,     3,   664,   295,    31,   115,     2,    45,
    1534        2,    43,    41,    28,   113,    26,     3,   730,     3,     3,
    1535        3,     0,     0,   687,   689,   630,   644,   270,     2,   409,
    1536        3,   408,     0,   475,   472,   130,     0,     0,   130,     3,
    1537        0,   130,   189,     0,     2,     2,   210,   200,     0,     0,
    1538        0,   141,     0,   577,   617,     2,     0,     0,     2,   230,
    1539        0,     0,   218,     0,     0,     0,     3,     0,     0,     0,
    1540        0,     0,     0,   690,   691,   295,     0,   474,   153,     0,
    1541        0,     2,   166,   130,   155,     0,   183,     0,   130,     0,
    1542        2,   157,     0,     2,     0,     2,     2,     2,   197,    32,
    1543      295,   517,   519,   510,     0,     0,     0,     0,   115,    38,
    1544        0,     3,     3,   659,   631,   645,   681,   413,   130,   159,
    1545      162,     0,   161,   165,     3,   168,   167,     0,   130,   185,
    1546      130,     3,     0,   295,     0,   295,     0,     2,     0,     2,
    1547      140,     2,   231,   232,     0,   228,   219,     0,   704,     0,
    1548        0,   154,     0,     0,   164,   234,   169,     2,   236,   184,
    1549        0,   187,   173,   202,     3,   211,   215,   204,     3,     0,
    1550      295,     0,   295,     0,     0,     0,    39,    46,    44,   160,
    1551      163,   130,     0,   170,   295,   130,   130,     0,   174,     0,
    1552        0,   695,   212,   213,   214,     0,   203,     3,   205,     3,
    1553      295,   220,   233,   150,   171,   156,   130,   237,   186,   181,
    1554      179,   175,   158,   130,     0,   696,     0,     0,     0,     0,
    1555      151,   172,   182,   176,   180,   179,   177,     3,     3,     0,
    1556        0,   496,   178,   206,   208,     3,     3,   207,   209
     1459       0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
     1460       2,   644,   451,   641,   545,   545,   649,   478,   291,     2,
     1461     583,   584,     0,   595,   596,     0,     2,   738,   741,   118,
     1462     291,     0,     2,   706,   292,   710,   701,   702,   708,     0,
     1463       2,     2,   666,   545,   749,   615,   545,   545,   749,   545,
     1464     629,   545,   545,   680,   433,   663,   545,   545,   671,   678,
     1465     291,   428,   292,     0,     0,   291,   716,   292,   721,   749,
     1466     713,   291,   718,   749,   291,   291,   291,     0,   118,     0,
     1467      18,     2,     0,    19,     0,   458,   747,     0,     0,   464,
     1468     238,     0,   291,     0,     0,     0,   543,   567,   571,   573,
     1469     603,   606,   610,   613,   566,   605,     0,   281,   656,     0,
     1470     291,   274,     0,     0,     0,     0,   272,     2,     0,   256,
     1471     534,   291,     0,     0,   291,     2,   362,   382,   371,     0,
     1472       0,   376,   370,   748,     0,     0,   395,     0,   292,     3,
     1473     413,     3,   417,   416,   589,     0,   529,   291,    60,     3,
     1474     291,   432,   292,     3,   426,   427,     2,     0,     0,     0,
     1475     483,   303,   291,   479,   481,     3,     2,     2,     0,   500,
     1476       3,     0,   552,   126,     0,     0,   219,     0,     0,     0,
     1477       0,    36,     0,     0,   118,   291,    20,     0,    21,     0,
     1478     690,   695,   447,   687,   545,   545,     0,   105,     3,     2,
     1479      27,     0,    33,     0,     2,    25,     0,   103,    70,    71,
     1480      72,    74,    75,    77,    78,    82,    83,    80,    81,    85,
     1481      86,    88,    90,    92,    94,    96,     0,     0,   750,   291,
     1482       0,     0,     0,   645,   646,   642,   643,   495,   494,   291,
     1483       0,   291,   712,   291,   717,   292,   291,   660,   291,   291,
     1484     703,   659,     2,   291,     0,     0,     0,     0,     0,     0,
     1485       0,     0,   681,     0,   667,   618,   634,   668,     2,   614,
     1486     621,   430,   616,   617,   431,     2,   628,   637,   630,   631,
     1487     664,   665,   679,   707,   711,   709,   749,   265,     2,   743,
     1488       2,   421,   715,   720,   422,     0,   400,     3,     3,     3,
     1489       3,   452,     3,     0,     2,   466,   463,   748,     0,   459,
     1490       2,   462,   465,     0,   291,   239,   261,     3,   269,   271,
     1491       0,   452,     2,   569,   570,     2,   608,   609,     0,   657,
     1492     535,     3,   343,   342,   345,   344,   291,   536,     0,   537,
     1493     370,     0,     0,   291,   291,     0,     0,   690,   380,   383,
     1494     387,   545,   387,   386,   379,   372,   545,   374,   377,   291,
     1495     397,   391,   101,   398,   747,     0,     0,   435,   237,     0,
     1496       0,     3,     2,   666,   428,     0,   525,     0,   749,   487,
     1497       0,   291,   291,   291,     0,   549,   551,   127,     0,     0,
     1498     212,     0,     0,     0,   220,   221,    53,     0,    55,    58,
     1499      59,     0,     2,   125,     0,     0,     0,   691,   692,   688,
     1500     689,   457,    67,    68,   106,   122,     3,   105,     0,     0,
     1501      24,    35,     3,     0,    32,    99,     0,     3,   648,   652,
     1502     655,   647,     3,   590,     3,   714,   719,     2,    60,   291,
     1503       3,     3,   292,     0,     3,   620,   624,   627,   636,   670,
     1504     674,   677,   291,     3,   619,   635,   669,   291,   291,   423,
     1505     291,   291,   744,     0,     0,     0,     0,   253,     0,   101,
     1506       0,     3,     3,     0,   460,     0,   456,     0,     0,   242,
     1507     291,     0,     0,   126,     0,     0,     0,     0,     0,   126,
     1508       0,     0,   105,   105,    18,     2,     0,     0,     3,   128,
     1509     129,     2,   140,   130,   131,   132,   133,   134,   135,   142,
     1510     144,     0,     0,     0,   282,   291,   291,   545,     0,   538,
     1511     291,   373,   375,     0,   389,   691,   384,   388,   385,   378,
     1512     382,   365,   396,     0,   577,     2,   662,   661,     0,   667,
     1513       2,   480,   482,   502,     3,   510,   511,     0,     2,   506,
     1514       3,     3,     0,     0,   554,   219,     0,     0,     0,   219,
     1515       0,     0,   118,   694,   698,   700,   693,   747,   105,     0,
     1516       3,   659,    39,     3,    37,    34,     0,     3,    98,   100,
     1517       0,     2,   650,   651,     0,     0,   291,     0,     0,     0,
     1518       3,   636,     0,     2,   622,   623,     2,   638,     2,   672,
     1519     673,     0,     0,    60,     0,     3,     3,     3,     3,   408,
     1520     407,   411,     2,     2,   746,   745,   119,     0,     0,     0,
     1521       0,     3,   461,     3,     0,   240,   143,     3,   292,   291,
     1522       0,     0,     0,     0,     2,     0,   188,     0,   186,     0,
     1523       0,     0,     0,     0,     0,     0,   545,   118,     0,   148,
     1524     145,   291,     0,     0,   264,   276,     3,     3,   544,   611,
     1525     366,   381,   394,   291,   263,   291,     0,   513,   490,   291,
     1526       0,     0,   489,   504,     0,     0,     0,   213,     0,   222,
     1527      56,     2,   696,   697,     0,   123,   120,     0,     0,     0,
     1528       0,     0,    23,     0,   653,   291,   578,   262,   722,   723,
     1529     724,     0,   675,   291,   291,   291,     3,     3,     0,   683,
     1530       0,     0,     0,     0,   291,   291,     3,   542,   119,   468,
     1531       0,     0,   243,   292,     0,     0,     0,     0,   291,   189,
     1532     187,   184,     0,   190,     0,     0,     0,     0,   194,   197,
     1533     195,   191,     0,   192,   126,    35,   141,   139,   241,     0,
     1534       0,   415,   419,   418,     0,   507,     2,   508,     2,   509,
     1535     503,   291,   225,     0,   223,     0,   225,   291,    31,   121,
     1536       2,    42,     2,    40,    38,    28,    26,     3,   725,     3,
     1537       3,     3,     0,     0,   682,   684,   625,   639,   266,     2,
     1538     405,     3,   404,     0,   470,   467,   126,     0,     0,   126,
     1539       3,     0,   126,   185,     0,     2,     2,   206,   196,     0,
     1540       0,     0,   137,     0,   572,   612,     2,     0,     0,     2,
     1541     226,     0,     0,   214,     0,     3,     0,     0,     0,     0,
     1542       0,     0,   685,   686,   291,     0,   469,   149,     0,     0,
     1543       2,   162,   126,   151,     0,   179,     0,   126,     0,     2,
     1544     153,     0,     2,     0,     2,     2,     2,   193,    32,   291,
     1545     512,   514,   505,     0,     0,     0,     0,     0,     3,     3,
     1546     654,   626,   640,   676,   409,   126,   155,   158,     0,   157,
     1547     161,     3,   164,   163,     0,   126,   181,   126,     3,     0,
     1548     291,     0,   291,     0,     2,     0,     2,   136,     2,   227,
     1549     228,     0,   224,   215,   699,     0,     0,   150,     0,     0,
     1550     160,   230,   165,     2,   232,   180,     0,   183,   169,   198,
     1551       3,   207,   211,   200,     3,     0,   291,     0,   291,     0,
     1552       0,     0,    43,    41,   156,   159,   126,     0,   166,   291,
     1553     126,   126,     0,   170,     0,     0,   690,   208,   209,   210,
     1554       0,   199,     3,   201,     3,   291,   216,   229,   146,   167,
     1555     152,   126,   233,   182,   177,   175,   171,   154,   126,     0,
     1556     691,     0,     0,     0,     0,   147,   168,   178,   172,   176,
     1557     175,   173,     3,     3,     0,     0,   491,   174,   202,   204,
     1558       3,     3,   203,   205
    15571559};
    15581560
     
    15601562static const yytype_int16 yydefgoto[] =
    15611563{
    1562       -1,   819,   469,   302,    48,   135,   136,   303,   304,   305,
    1563      306,   766,   767,  1145,  1146,   307,   382,   309,   310,   311,
    1564      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
    1565     1040,   519,   984,   323,   985,   547,   954,  1067,  1543,  1069,
    1566     1070,  1071,  1072,  1544,  1073,  1074,  1460,  1461,  1422,  1423,
    1567     1424,  1522,  1523,  1527,  1528,  1563,  1564,  1075,  1380,  1076,
    1568     1077,  1314,  1315,  1316,  1504,  1078,   147,   960,   961,   962,
    1569     1400,  1484,  1496,  1497,   470,   471,   881,   882,  1048,    52,
    1570       53,    54,    55,    56,   348,   160,    59,    60,    61,    62,
    1571       63,   350,    65,    66,   266,    68,    69,   276,   352,   353,
    1572       72,    73,    74,    75,   120,    77,   206,   355,   121,    80,
    1573      122,    82,    83,   456,    84,   455,   690,   691,   692,   915,
    1574     1096,   916,    85,    86,   459,   457,   698,   861,   862,   358,
    1575      359,   701,   702,   703,   360,   361,   362,   363,   467,   341,
    1576      137,   138,   523,   325,   172,   647,   648,   649,   650,   651,
    1577       87,   123,    89,   490,   491,   946,   492,   279,   496,   326,
    1578       90,   139,   140,    91,  1337,  1118,  1119,  1120,  1121,    92,
    1579       93,   719,    94,   275,    95,    96,   189,  1042,   681,   413,
    1580      127,    97,   502,   503,   504,   190,   270,   192,   193,   194,
    1581      271,   100,   101,   102,   103,   104,   105,   106,   197,   198,
    1582      199,   200,   201,   831,   606,   607,   608,   609,   202,   611,
    1583      612,   613,   573,   574,   575,   576,   755,   107,   615,   616,
    1584      617,   618,   619,   620,   977,   757,   758,   759,   596,   366,
    1585      367,   368,   369,   327,   166,   109,   110,   111,   371,   696,
    1586      570
     1564      -1,   813,   468,   301,    47,   134,   135,   302,   303,   304,
     1565     305,   761,   762,  1133,  1134,   306,   381,   308,   309,   310,
     1566     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
     1567    1030,   518,   975,   546,   322,   976,   947,  1057,  1518,  1059,
     1568    1060,  1061,  1062,  1519,  1063,  1064,  1437,  1438,  1401,  1402,
     1569    1403,  1497,  1498,  1502,  1503,  1538,  1539,  1065,  1361,  1066,
     1570    1067,  1298,  1299,  1300,  1480,  1068,   146,   953,   954,   955,
     1571    1381,  1461,  1472,  1473,   469,   470,   874,   875,  1038,    51,
     1572      52,    53,    54,    55,   347,   159,    58,    59,    60,    61,
     1573      62,   349,    64,    65,   265,    67,    68,   275,   351,   352,
     1574      71,    72,    73,    74,   119,    76,   205,   354,   120,    79,
     1575     121,    81,    82,   455,    83,   454,   688,   689,   690,   908,
     1576    1086,   909,    84,    85,   458,   456,   696,   855,   856,   857,
     1577     858,   699,   700,   701,   359,   360,   361,   362,   466,   340,
     1578     136,   137,   522,   324,   171,   645,   646,   647,   648,   649,
     1579      86,   122,    88,   489,   490,   939,   491,   278,   495,   325,
     1580      89,   138,   139,    90,  1321,  1108,  1109,  1110,  1111,    91,
     1581      92,   717,    93,   274,    94,    95,   188,  1032,   679,   412,
     1582     126,    96,   501,   502,   503,   189,   269,   191,   192,   193,
     1583     270,    99,   100,   101,   102,   103,   104,   105,   196,   197,
     1584     198,   199,   200,   825,   605,   606,   607,   608,   201,   610,
     1585     611,   612,   572,   573,   574,   575,   751,   106,   614,   615,
     1586     616,   617,   618,   619,   968,   753,   754,   755,   595,   365,
     1587     366,   367,   368,   326,   165,   108,   109,   110,   370,   694,
     1588     569
    15871589};
    15881590
    15891591/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15901592   STATE-NUM.  */
    1591 #define YYPACT_NINF -1414
     1593#define YYPACT_NINF -1310
    15921594static const yytype_int16 yypact[] =
    15931595{
    1594     4857,  9883, -1414,    35, -1414, -1414, -1414, -1414, -1414, -1414,
    1595    -1414,   142, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1596    -1414, -1414, -1414, -1414, -1414, -1414,    98,    98,    98,  1334,
    1597      684,   153,  7496,   290, -1414, -1414, -1414, -1414, -1414,   204,
    1598    -1414, -1414, -1414, -1414,   901,   229, -1414, -1414, -1414, -1414,
    1599     9565, -1414, -1414, -1414, -1414,   -15,   301, -1414,  1624, -1414,
    1600    -1414, -1414, -1414,   302,  1806,   471,   143,  7613, -1414, -1414,
    1601     9603,  1367, -1414, -1414, -1414,  1721,   510,  3394,  1032,  1137,
    1602     1721,  1303, -1414, -1414,  1174,  1520, -1414,  1721,  1532, -1414,
    1603      385, -1414,   421,   523, -1414, -1414, -1414, -1414,   460,   301,
    1604       98, -1414,    98, -1414, -1414, -1414, -1414, 10414,  1624, -1414,
    1605    -1414,  1624, -1414,   447, -1414, 10444, -1414, -1414,  2082, 10554,
    1606    -1414,   399,   399,   399, -1414, -1414, -1414,    98, -1414, -1414,
    1607    -1414,   544,   555,   575, -1414, -1414, -1414,   617, -1414, -1414,
    1608    -1414, -1414, -1414,   621,   629, -1414, -1414,    11,  9069,  3253,
    1609      578,   492,   499,   631,   635,   642,   647,  9853,  7015,   649,
    1610      656, -1414,  9713, -1414, -1414, -1414, -1414,   661, -1414,   193,
    1611     3453,  3453, -1414,   667,   251, -1414, -1414, -1414, -1414,   692,
    1612      327,   346,   368,    98,   673, -1414, -1414,  1806,  3136,   748,
    1613    -1414,    12, -1414,    98,    98,   301, -1414, -1414,    75, -1414,
    1614       98,    98, -1414,  3167,   711,   722,   399,  6806, -1414, -1414,
    1615      726,  9565, -1414, -1414,  1721, -1414, -1414, -1414,   301, -1414,
    1616     1624,   -15, -1414,  7963, -1414,   399,   399,   399,   301, -1414,
    1617     1334, -1414,  5769, -1414, -1414,   709,   399, -1414,   399, -1414,
    1618      204,  9069, -1414,   763, -1414,   684,   765,   399, -1414,  1334,
    1619      750,   766, -1414,  7496,   705, -1414, -1414, -1414,  9532, -1414,
    1620    -1414, 10864, -1414,   748,    63,  6244, 10554,  2082,  3167, -1414,
    1621       85, -1414, -1414, 10444,  1624,   804,  7644, -1414, -1414,   319,
    1622    -1414, 11778,   782,   851,  4657,   828,  4994, 11639, -1414,   839,
    1623    -1414, -1414, -1414, -1414, 11658, 11658,  8841,   844, -1414, -1414,
    1624    -1414, -1414, -1414, -1414,   869, -1414,   759,  2440,  9183,  4994,
    1625    -1414,   593,   571,   645,   313,   861,   842,   858,   843,   911,
    1626      -20, -1414, -1414,   876,   326, -1414,    83, -1414, -1414,  3253,
    1627    -1414, -1414,   139,   900, -1414,   422,   900,   905,   204, -1414,
    1628    -1414,   909, 10414, -1414,   912,   917,  9297, -1414, -1414,  1382,
    1629     2358,  8427,  6806,  1721, -1414,  1721,   399,   399, -1414, -1414,
    1630    -1414, -1414, -1414, -1414,   399, 10414,  1624, -1414, -1414, 10584,
    1631     1776, -1414, 10304, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1632      936, 11446,  4994, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1633    -1414, -1414, -1414, -1414, -1414, -1414, -1414,  2082, -1414,   836,
    1634      947,   962,   963,   923,   965,   970,   972,  3136, -1414, -1414,
    1635      959,   -15,   975, -1414, -1414,   978, -1414, -1414, -1414,  9532,
    1636    -1414, -1414, -1414, -1414, -1414,  3167, -1414,  9069,  9069, -1414,
    1637      399,  2082,  6926,  1624,  8543, -1414, -1414, -1414, -1414,  9532,
    1638       63, -1414, -1414,  1721,   301, -1414, -1414,  9532, -1414,  6689,
    1639    -1414, -1414,   399,   399,   271, 10023,   907,   977,   960,   988,
    1640      399, -1414, -1414, -1414, -1414, 10980, -1414,   500,  6556, -1414,
    1641      301,   990, -1414,  2082, 11860, 11504, -1414, -1414, -1414, -1414,
    1642      935,  3167, -1414,  8659,   748,  6228, -1414, -1414, -1414,  1482,
    1643      550,   876,   684,  7644,  1180, 10444, -1414,  7644, -1414, -1414,
    1644    -1414, -1414,   561, -1414,   997,   851,   -13,  8841, -1414, 10694,
    1645    -1414, -1414,  8841, -1414,  8955,  8841, -1414, -1414,   996, -1414,
    1646      585,  1003,   455,  1017, -1414, -1414,  9993,  6037, -1414,   419,
    1647    -1414, -1414, 11562, -1414,   469, 11562, -1414, -1414, -1414, -1414,
    1648    -1414, -1414, -1414, -1414, -1414, -1414,  6244,  6244, -1414, -1414,
    1649     4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,
    1650     4994,  4994,  4994,  4994,  4994,  4994,  4994,  4994,  3735,  6244,
    1651    -1414,   326,  1049, -1414, -1414,    98,    98, -1414, -1414,  9069,
    1652    -1414, -1414,   978,   705, -1414,   978, 11581, -1414, -1414, -1414,
    1653     3645,  6037,  1016,  1018, -1414, 10554, -1414, -1414,   661, -1414,
    1654     1020,  1157,  1025,  2611,    95,   876, -1414,    98,    98,   876,
    1655      134, -1414,    98,    98,   978, -1414, -1414,    98,    98, -1414,
    1656      900, 10724,  1624, 12005,    69,   227, 10724, -1414, 10864, -1414,
    1657      876, -1414, 10414, -1414,   218,  8079,  8079,  8079,  1624, -1414,
    1658     5555,  1012,   260,   936,   778,  1021,  1024, -1414,  1026,  3453,
    1659      343, -1414,  1115,  1624,  8079,   705,  2082,   705,   748,   534,
    1660      900, -1414, -1414,   596,   900, -1414, -1414, -1414,   851, -1414,
    1661      900,   301, 10980, -1414,   687,  1042,   700,  1043, -1414,  1044,
    1662      301, -1414, -1414,  9532,   301,  1041, 10694,  1045, -1414,  2066,
    1663    -1414,   408,   416,   684, -1414,   684,  1047,  4994, -1414,   684,
    1664    12005, -1414, -1414,  1053, -1414, -1414, -1414,   705, -1414, 11933,
    1665      917, -1414,  8079,   489,  8427, -1414, -1414,   661,  1055,  1056,
    1666     1482,  3284, -1414, -1414,  7644, -1414, -1414,  1038, -1414, -1414,
    1667     1064, -1414,  1038,  1070, 11778,  6244,    93,  1051,   138,  1074,
    1668     1058,  1075,   844,  1069,  1077, -1414,  1079,  1081, 10133,  6775,
    1669    -1414,  6244, -1414,   455,  1974, -1414, -1414, -1414,    98,    98,
    1670     6104,  6244,  1076, -1414, -1414,   936,   707, -1414,  6244, -1414,
    1671    -1414,   677, -1414, -1414, -1414, -1414, -1414,   593,   593,   571,
    1672      571,   645,   645,   645,   645,   313,   313,   861,   842,   858,
    1673      843,   911,  4994,   847, -1414, 10980,  1083,  1084,  1088,  1049,
    1674    -1414, -1414, -1414, -1414, -1414, 10980,   717,  8079, -1414, 10414,
    1675    -1414,  7135,  9411, -1414, 10304,  7015, -1414, -1414,  1157, 10980,
    1676      945,  1089,  1090,  1095,  1096,  1099,  1100,  1105, -1414,  4392,
    1677     2611, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1678    -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,   978, -1414,
    1679    -1414, -1414,   876, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1680    -1414,  1112, -1414,  1113,  1118, -1414, -1414,   -15,  1076,  5555,
    1681    -1414, -1414, -1414, 11446,  1116, -1414, -1414, -1414, -1414, -1414,
    1682      684,  6369,  1201, -1414, -1414, -1414, -1414,  1103,   -15, -1414,
    1683    -1414,   978, -1414, -1414,   978,   126,   978, -1414, -1414, -1414,
    1684    -1414, -1414, -1414,  9743, -1414,   301, -1414, -1414,   438,   452,
    1685    10584,  7255,  2372,  4994,  2870, -1414, -1414,  1127,    39,  1127,
    1686    -1414,   684, -1414,    98, -1414, -1414, 10163,   960, -1414, -1414,
    1687    -1414,   977,  1143,  1131, -1414, -1414,  1150,  1153, -1414,   489,
    1688     1995, -1414,   363, -1414,  3284,   876, -1414,  1160,  7644, 10834,
    1689     9069,  1161, -1414, -1414,  1151,  1162,  1156, -1414,  4994,   120,
    1690      279,  1163, -1414,  1166,   705,  1166,  6037,  6244, -1414, -1414,
    1691     1166,  1165, -1414,  1176,  1182,  1185,  1974, -1414, -1414, -1414,
    1692    11446, -1414, -1414, -1414, -1414,  1168,  6244,  1188,   705,  5555,
    1693    -1414, 11562, -1414,   705, -1414, -1414,  6244, -1414,   614,   900,
    1694    -1414, -1414, -1414, -1414, -1414, -1414, -1414,   936,   917,  9297,
    1695    -1414, -1414,  7375,  1187, -1414,   758,   900, -1414,   785,   797,
    1696      900, -1414,   399,  5912, -1414, -1414, -1414, 10980, 10980, -1414,
    1697     8543,  8543, -1414,  1186,  1189,  1191,  1199, -1414,  1206,   439,
    1698      119,  1076, -1414,   705, -1414,  3453, -1414,  6244,   480, -1414,
    1699     6655,  1211,  1212, 11388,  1213,  1217,    -6,    58,   117,  6244,
    1700     1221,   301,  6244,  6244,  1215,  1222,   610,  1203, -1414, -1414,
    1701    -1414,  1218, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1702    -1414,   684,  1226,  6244, -1414, 10980, 10980,    98,  1228, -1414,
    1703    10273, -1414, -1414,   864, -1414,  2870, -1414, -1414, -1414, -1414,
    1704     2066, -1414, -1414,  1230, -1414, -1414, -1414, -1414,  1231,  1995,
    1705    -1414, -1414,  1223, -1414,  1038, -1414, -1414,  2082,  1235, -1414,
    1706    -1414, -1414,   744,  1237, -1414,   138,  1245,  4994,  1232,   138,
    1707      138,  1250,  1246, -1414,  9993,   825,   900, -1414, -1414,  1026,
    1708     6244,  1251,  1168,   536,   161,  1261, -1414,  1246, -1414,  1254,
    1709     1261, -1414, -1414,  1257, -1414, -1414,   978,  1270,  1271,  6895,
    1710     1272,  1275,  1280, -1414, -1414,  1283, -1414, -1414,   978, -1414,
    1711    -1414, -1414, -1414,   978,  6244,  6244,   917,  1282, -1414, -1414,
    1712    -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1713     4994,  4994,  1284,  1286,  1261, -1414, -1414,   684, -1414, -1414,
    1714    -1414,  5291, 10834,  6244,  6244,  1335,  6244, -1414,  1263, -1414,
    1715     1267, -1414,  1281,  6244,  1288,  6244,  1039,  1290,    28,    98,
    1716     5165,   856, -1414, -1414,  6369,  1287,   488, -1414, -1414, -1414,
    1717    -1414, -1414, -1414, -1414, -1414, -1414, 11206, -1414,  8659,  1304,
    1718    -1414, -1414, 10834,   490,   498, -1414,  1301,  1306,   851,  1317,
    1719    -1414,   418, -1414, -1414,  6244,  1316, -1414, -1414,   978,  1314,
    1720    -1414, -1414,  1318,   589,   691,   705,  1320,  1322, -1414,  1329,
    1721    -1414, 10980, -1414, -1414, -1414, -1414, -1414,  1330, -1414, 10980,
    1722    10980, 10980, -1414, -1414,  1332, -1414,  1333,  1336,  1339,   517,
    1723     8195,  8311, -1414, -1414,   123, -1414,  1343,  1348, -1414,  8775,
    1724      755,   768,  1342,   770,  6525, -1414, -1414, -1414,   508, -1414,
    1725      777,  1352,  1353,   301,  1403,   933, -1414, -1414,  6244, -1414,
    1726    11388, 11562, -1414, -1414, -1414,  1359,  1364, -1414, -1414, -1414,
    1727     1363, -1414, -1414, -1414, -1414, -1414, -1414, 10834,   851,   273,
    1728    -1414,  1347,   851,  1168,   268, 10980, -1414, -1414, -1414, -1414,
    1729    -1414, -1414, -1414, -1414,  1365, -1414, -1414, -1414, -1414, -1414,
    1730    -1414,  1368,  1371, -1414, -1414, -1414, -1414, -1414, -1414, -1414,
    1731     1375, -1414,  1374, -1414, -1414, 11388,    91,  6244, 11388, -1414,
    1732     1385,  6244, -1414,   288,  1402,  1405, -1414, -1414,  1390,  1393,
    1733     1376, -1414,   882, -1414, -1414, -1414,  1624,  2082,  1388,   869,
    1734      884,  4994, -1414,   803,  1394,  6244, -1414,   705,   705,  1399,
    1735     1406,  1407,  1409, -1414, -1414,  8543,  1397, -1414,  1473,  4994,
    1736     1404, -1414, -1414, 11299, -1414,   811, -1414,  1395, 11388,  1401,
    1737    -1414, -1414,  1410, -1414,  1412, -1414,  1433,  1441, -1414,  1415,
    1738    10834, -1414, -1414, -1414,   851,   705,  1429,  1417,  1436, -1414,
    1739     1446,  1261,  1261, -1414, -1414, -1414, -1414, -1414, 11388,   278,
    1740    -1414,   910, -1414, -1414,  7730, -1414, -1414,  1435,  6244, -1414,
    1741     6244,  7730,   301, 10694,   301, 10694,  1462, -1414,  1463, -1414,
    1742    -1414,  1460,   869, -1414,   812, -1414, -1414,  6244, -1414,  1465,
    1743     1466, -1414,  4994,  4994, -1414, -1414,  1007,    37, -1414, -1414,
    1744     1447, -1414,  1007, -1414, -1414,  2485,   705, -1414, -1414,   301,
    1745    10694,   301, 10694,  1472,  1450,   705, -1414, -1414, -1414, -1414,
    1746    -1414, 11299,  1468,  1007,  7847,  6244, 11210,  1475,  1007,  1477,
    1747     2485,  2994, -1414, -1414, -1414,  1495, -1414, -1414, -1414, -1414,
    1748     9069, -1414, -1414, -1414, 11077, -1414, 11299, -1414, -1414,  1476,
    1749    10984, -1414, -1414, 11210,   301,  2994,   301,  1502,  1506,   813,
    1750    -1414, 11077, -1414, -1414, -1414, 10984, -1414, -1414, -1414,   301,
    1751      301, -1414, -1414, -1414, -1414, -1414, -1414, -1414, -1414
     1596    7316,  8697, -1310,    16, -1310, -1310, -1310, -1310, -1310, -1310,
     1597   -1310,    22, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1598   -1310, -1310, -1310, -1310, -1310, -1310,   101,   101,   101,  1152,
     1599     941,    64,  7548,   141, -1310, -1310, -1310, -1310, -1310,    87,
     1600   -1310, -1310, -1310,   868,   134, -1310, -1310, -1310, -1310,  9158,
     1601   -1310, -1310, -1310, -1310,   149,   144, -1310,  1337, -1310, -1310,
     1602   -1310, -1310,   139,   935,   260,   102,  2892, -1310, -1310,  9196,
     1603     790, -1310, -1310, -1310,   904,   293,  5512,   547,   778,   904,
     1604    1166, -1310, -1310,   554,   624, -1310,   904,  1343, -1310,   187,
     1605   -1310,   308,   336, -1310, -1310, -1310, -1310,   251,   144,   101,
     1606   -1310,   101, -1310, -1310, -1310, -1310,  8923,  1337, -1310, -1310,
     1607    1337, -1310,   337, -1310,  9043, -1310, -1310,  1053,  9381, -1310,
     1608    1729,  1729,  1729, -1310, -1310, -1310,   101, -1310, -1310, -1310,
     1609     410,   413,   418, -1310, -1310, -1310,   433, -1310, -1310, -1310,
     1610   -1310, -1310,   468,   477, -1310, -1310,    37,  8666,  2607,   742,
     1611     369,   496,   509,   523,   530,   535,  8584,  6836,   536,   546,
     1612   -1310,  9234, -1310, -1310, -1310, -1310,   561, -1310,   245,  4633,
     1613    4633, -1310,   562,   361, -1310, -1310, -1310, -1310,   574,   383,
     1614     408,   429,   101,   577, -1310, -1310,   935,  3015,   664, -1310,
     1615      86, -1310,   101,   101,   144, -1310, -1310,    89, -1310,   101,
     1616     101, -1310,  3541,   634,   653,  1729,  6748, -1310, -1310,   623,
     1617    9158, -1310, -1310,   904, -1310, -1310, -1310,   144, -1310,  1337,
     1618     149, -1310,  7737, -1310,  1729,  1729,  1729,   144, -1310,  1152,
     1619   -1310,  5996, -1310, -1310,   642,  1729, -1310,  1729, -1310,    87,
     1620    8666, -1310,   672, -1310,   941,   697,  1729, -1310,  1152,   699,
     1621     702, -1310,  7548,   567, -1310, -1310, -1310,  9125, -1310, -1310,
     1622    4167, -1310,   664,    10,  5116,  9381,  1053,  3541, -1310,    94,
     1623   -1310, -1310,  9043,  1337,   715, 10741, -1310, -1310,    11, -1310,
     1624   10483,   740,   772, 10231,   759, 10288, 10307, -1310,   763, -1310,
     1625   -1310, -1310, -1310, 10364, 10364,  8440,   765, -1310, -1310, -1310,
     1626   -1310, -1310, -1310,   799, -1310,   616,  2256,  8779, 10288, -1310,
     1627     475,   860,   810,   276,   913,   766,   767,   793,   832,    41,
     1628   -1310, -1310,   807,   704, -1310,   331, -1310, -1310,  2607, -1310,
     1629   -1310,   242,   835, -1310,   421,   835,   841,    87, -1310, -1310,
     1630     846,  8923, -1310,   847,   857,  8892, -1310, -1310,  1352,  2069,
     1631    8155,  6748,   904, -1310,   904,  1729,  1729, -1310, -1310, -1310,
     1632   -1310, -1310, -1310,  1729,  8923,  1337, -1310, -1310,  9419,  1457,
     1633   -1310,  7886, -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,
     1634   10098, 10288, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1635   -1310, -1310, -1310, -1310, -1310, -1310,  1053, -1310,   928,   862,
     1636     891,   893,  1023,   916,   937,   951,  3015, -1310, -1310,   942,
     1637     149,   958, -1310, -1310,   970, -1310, -1310, -1310,  9125, -1310,
     1638   -1310, -1310, -1310, -1310,  3541, -1310,  8666,  8666, -1310,  1729,
     1639    1053,  6867,  1337,  8228, -1310, -1310, -1310, -1310,  9125,    10,
     1640   -1310, -1310,   904,   144, -1310, -1310,  9125, -1310,  6513, -1310,
     1641   -1310,  1729,  1729,   382,  5342,   969,   972,   960,  1031,  1729,
     1642   -1310, -1310, -1310, -1310,  9605, -1310,   450,  6629, -1310,   144,
     1643    1033, -1310,  1053, 10565, 10155, -1310, -1310, -1310, -1310,  1039,
     1644    3541, -1310,  8301,   664,  7432, -1310, -1310, -1310,   984,   626,
     1645     807,   941, 10741,   606,  9043, -1310, 10741, -1310, -1310, -1310,
     1646   -1310,   690, -1310,  1044,   772,   255,  8440, -1310,  9457, -1310,
     1647   -1310,  8440, -1310,  8553,  8440, -1310, -1310,  1042, -1310,   722,
     1648    1047,   818,  1048, -1310, -1310,  9310,  6479, -1310,   321, -1310,
     1649   -1310,  5116, -1310,   602,  5116, -1310, -1310, -1310, -1310, -1310,
     1650   -1310, -1310, -1310, -1310, -1310, -1310,  5116, -1310, -1310, 10288,
     1651   10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288,
     1652   10288, 10288, 10288, 10288, 10288, 10288, 10288,  2426,  5116, -1310,
     1653     704,   830, -1310, -1310,   101,   101, -1310, -1310,  8666, -1310,
     1654   -1310,   970,   567, -1310,   970, 10212, -1310, -1310, -1310,  4524,
     1655    6479,  1049,  1054, -1310,  9381, -1310, -1310,   561, -1310,  1056,
     1656     774,  1073,  2515,    95,   807, -1310,   101,   101,   807,    98,
     1657   -1310,   101,   101,   970, -1310, -1310,   101,   101, -1310,   835,
     1658    9490,  1337, 10710,   283,   326,  9490, -1310,  4167, -1310,   807,
     1659   -1310,  8923, -1310,    80,  7852,  7852,  7852,  1337, -1310,  4787,
     1660    1065,   875,   744,  1066,  1067, -1310,  1070,  4633,   333, -1310,
     1661    1134,  1337,  7852,   567,  1053,   567,   664,   494,   835, -1310,
     1662   -1310,   584,   835, -1310, -1310, -1310,   772, -1310,   835,   144,
     1663    9605, -1310,   737,  1083,   750,  1090, -1310,  1089,   144, -1310,
     1664   -1310,  9125,   144,  1088,  9457,  1092, -1310,  1677, -1310,   441,
     1665     448,   941, -1310,   941,  1091, 10288, -1310,   941, 10710, -1310,
     1666   -1310,  1098, -1310, -1310, -1310,   567, -1310, 10638,   857, -1310,
     1667    7852,   853,  8155, -1310, -1310,   561,  1095,  1097,   984,  3316,
     1668   -1310, -1310, 10741, -1310, -1310,  1099, -1310, -1310,  1105, -1310,
     1669    1099,  1111, 10483,  5116,    62,  1102,   167,  1113,  1121,  1129,
     1670    1130, -1310,  1131,  1132,  9348,  6598, -1310,  5116, -1310,   818,
     1671     978, -1310, -1310, -1310,   101,   101,  5540,  5116,  1135, -1310,
     1672   -1310,   757, -1310,  5116, -1310, -1310,   914, -1310, -1310, -1310,
     1673   -1310,   475,   475,   860,   860,   810,   810,   810,   810,   276,
     1674     276,   913,   766,   767,   793,   832, 10288,   282, -1310,  9605,
     1675    1136,  1137,  1140,   830, -1310, -1310, -1310, -1310, -1310,  9605,
     1676     779,  7852, -1310,  8923, -1310,  6955,  9005, -1310,  7886,  6836,
     1677   -1310, -1310,   774,  9605,  1063,  1142,  1143,  1145,  1146,  1147,
     1678    1148,  1154, -1310,  3759,  2515, -1310, -1310, -1310, -1310, -1310,
     1679   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1680   -1310, -1310,   970, -1310, -1310, -1310,   807, -1310, -1310, -1310,
     1681   -1310, -1310, -1310, -1310, -1310,  1156, -1310,  1159,  1160, -1310,
     1682   -1310,   149,  1135,  4787, -1310, -1310, -1310, 10098,  1157, -1310,
     1683   -1310, -1310, -1310,   941,  6225,  1247, -1310, -1310, -1310, -1310,
     1684    1150,   149, -1310, -1310,   970, -1310, -1310,   970,   137,   970,
     1685   -1310, -1310, -1310, -1310, -1310, -1310,  9272, -1310,   144, -1310,
     1686   -1310,   451,   452,  9419,  7074,  2178, 10288,  3429, -1310, -1310,
     1687    1149,    39,  1149, -1310,   941, -1310,   101, -1310, -1310,  8073,
     1688     960, -1310, -1310, -1310,   972,  1168,  1169, -1310, -1310,  1170,
     1689    1172, -1310,   853,  1305, -1310,   359, -1310,  3316,   807, -1310,
     1690    1177, 10741,  9528,  8666,  1180, -1310, -1310,  1175,  1182,  1164,
     1691   -1310, 10288,    56,   233,  1179, -1310,  1183,   567,  1183, -1310,
     1692   -1310,  1183,  1184, -1310,  1189,  1190,  1192,   978, -1310, -1310,
     1693   -1310, 10098, -1310, -1310, -1310, -1310,  1188,  5116,  1193,   567,
     1694   -1310,  5116, -1310,   567, -1310, -1310,  5116, -1310,   595,   835,
     1695   -1310, -1310, -1310, -1310, -1310, -1310, -1310,   875,   857,  8892,
     1696   -1310, -1310,  7193,  1196, -1310,   622,   835, -1310,   644,   649,
     1697     835, -1310,  1729,  4053, -1310, -1310, -1310,  9605,  9605, -1310,
     1698    8228,  8228, -1310,  1194,  1195,  1198,  1199, -1310,  1200,   531,
     1699      27,  1135, -1310,   567, -1310,  4633, -1310,  5116,   453, -1310,
     1700    6359,  1213,  1217, 10041,  1222,  1223,    43,    49,   106,  5116,
     1701    1228,   144,  5116,  5116,  1208,  1237,   142,  1218, -1310, -1310,
     1702   -1310,  1236, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1703   -1310,   941,  1249,  5116, -1310,  9605,  9605,   101,  1252, -1310,
     1704    8810, -1310, -1310,   987, -1310,  3429, -1310, -1310, -1310, -1310,
     1705    1677, -1310, -1310,  1253, -1310, -1310, -1310, -1310,  1254,  1305,
     1706   -1310, -1310,  1239, -1310,  1099, -1310, -1310,  1053,  1258, -1310,
     1707   -1310, -1310,   806,  1262, -1310,   167,  1267, 10288,  1248,   167,
     1708     167,  1273,  9310,   693,   835, -1310, -1310,  1070,  5116,  1274,
     1709    1188,   208,   157,  1269, -1310, -1310,  1278,  1269, -1310, -1310,
     1710    1282, -1310, -1310,   970,  1286,  1288,  6717,  1287,  1289,  1291,
     1711   -1310, -1310,  1290, -1310, -1310,   970, -1310, -1310, -1310, -1310,
     1712     970,  5116,  5116,   857,  1292, -1310, -1310, -1310, -1310, -1310,
     1713   -1310, -1310, -1310, -1310, -1310, -1310, -1310, 10288, 10288,  1294,
     1714    1295,  1269, -1310, -1310,   941, -1310, -1310, -1310,  5073,  9528,
     1715    5116,  5116,  1370,  5116, -1310,  1298, -1310,  1299, -1310,  1302,
     1716    5116,  1306,  5116,  1123,  1307,    30,   101,  5821,  1435, -1310,
     1717   -1310,  6225,  1303,   456, -1310, -1310, -1310, -1310, -1310, -1310,
     1718   -1310, -1310, -1310,  9861, -1310,  8301,  1330, -1310, -1310,  9528,
     1719     463,   481, -1310,  1328,  1314,   772,  1341, -1310,   306, -1310,
     1720   -1310, -1310, -1310,   970,  1332, -1310, -1310,  1342,   753,   834,
     1721     567,  1345, -1310,  1350, -1310,  9605, -1310, -1310, -1310, -1310,
     1722   -1310,  1351, -1310,  9605,  9605,  9605, -1310, -1310,  1359, -1310,
     1723    1362,  1365,  1366,   557,  7925,  8040, -1310, -1310,   420, -1310,
     1724    1368,  1371, -1310,  8374,   815,   844,  1346,   866,  6094, -1310,
     1725   -1310, -1310,   485, -1310,   888,  1369,  1375,   144,  1417,  1051,
     1726   -1310, -1310,  5116, -1310, 10041,  5116, -1310, -1310, -1310,  1377,
     1727    1379, -1310, -1310, -1310,  1376, -1310, -1310, -1310, -1310, -1310,
     1728   -1310,  9528,   772,   195, -1310,  1353,   772,  9605, -1310, -1310,
     1729   -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310, -1310,
     1730   -1310, -1310,  1384,  1388, -1310, -1310, -1310, -1310, -1310, -1310,
     1731   -1310,  1394, -1310,  1397, -1310, -1310, 10041,   217,  5116, 10041,
     1732   -1310,  1400,  5116, -1310,   289,  1421,  1423, -1310, -1310,  1403,
     1733    1415,  1393, -1310,  1001, -1310, -1310, -1310,  1337,  1053,  1412,
     1734     799,   323, 10288, -1310,   953, -1310,   567,   567,  1418,  1425,
     1735    1426,  1428, -1310, -1310,  8228,  1427, -1310,  1497, 10288,  1420,
     1736   -1310, -1310,  9953, -1310,   955, -1310,  1419, 10041,  1424, -1310,
     1737   -1310,  1442, -1310,  1445, -1310,  1461,  1462, -1310,  1430,  9528,
     1738   -1310, -1310, -1310,   772,   567,  1453,  1436,  1459,  1269,  1269,
     1739   -1310, -1310, -1310, -1310, -1310, 10041,   204, -1310,   370, -1310,
     1740   -1310,  3684, -1310, -1310,  1439,  5116, -1310,  5116,  3684,   144,
     1741    9457,   144,  9457,  1463, -1310,  1465, -1310, -1310,  1464,   799,
     1742   -1310,   968, -1310, -1310, -1310,  1460,  1466, -1310, 10288, 10288,
     1743   -1310, -1310,  1075,   122, -1310, -1310,  1444, -1310,  1075, -1310,
     1744   -1310,  2191,   567, -1310, -1310,   144,  9457,   144,  9457,  1472,
     1745    1450,   567, -1310, -1310, -1310, -1310,  9953,  1469,  1075,  7664,
     1746    5116,  9865,  1470,  1075,  1479,  2191,  3509, -1310, -1310, -1310,
     1747    1482, -1310, -1310, -1310, -1310,  8666, -1310, -1310, -1310,  9732,
     1748   -1310,  9953, -1310, -1310,  1468,  9644, -1310, -1310,  9865,   144,
     1749    3509,   144,  1484,  1486,   976, -1310,  9732, -1310, -1310, -1310,
     1750    9644, -1310, -1310, -1310,   144,   144, -1310, -1310, -1310, -1310,
     1751   -1310, -1310, -1310, -1310
    17521752};
    17531753
     
    17551755static const yytype_int16 yypgoto[] =
    17561756{
    1757    -1414,  4377,  3077, -1414,  1645, -1414,   305,   958,   -11, -1414,
    1758      552,  -530,  -487,  -944,  -142,  3604,     0, -1414,  1277,   511,
    1759      529,   298,   549,  1057,  1060,  1054,  1062,  1065, -1414,  -211,
    1760     -327,  5116,  -961,  -725,  -952, -1414,  -200,  -594,   572, -1414,
    1761     1379, -1414,   397, -1413, -1414, -1414,   129, -1414, -1160,  -935,
    1762      246, -1414, -1414, -1414, -1414,    68, -1131, -1414, -1414, -1414,
    1763    -1414, -1414, -1414,   321, -1152,    33, -1414,  -696, -1414,   506,
    1764      296, -1414,   169, -1414,  -339, -1414, -1414, -1414,   558,  -728,
    1765    -1414, -1414,    19,  -974,   177,  2303, -1414, -1414, -1414,   -91,
    1766    -1414,   166,   269,  -194,  1705,  3615, -1414, -1414,    36,   224,
    1767      628,  -235,  1694, -1414,  1557, -1414, -1414,   200,  2163, -1414,
    1768     2278,   185, -1414, -1414, -1414,  -607, -1414,   956,   957,   545,
    1769      725,  -320, -1414, -1414, -1414,   950,   719,  -493, -1414,  -472,
    1770     -355,  1296, -1414, -1414,  -899,  -946,   440,   524,  1067,   168,
    1771    -1414,  1040,   317,  -281,  -198,  -141,   672,   781, -1414,  1005,
    1772    -1414,  2834,    55,  -450,   932, -1414, -1414,   712, -1414,  -228,
    1773    -1414,   104, -1414, -1414, -1414, -1285,   420, -1414, -1414, -1414,
    1774     1178, -1414,    31, -1414, -1414,  -862,   -94, -1364,  -152,  1641,
    1775    -1414,  3733, -1414,   927, -1414,  -170,   493,  -184,  -183,  -181,
    1776        7,   -42,   -36,   -33,  1610,     4,    10,    14,  -143,  -177,
    1777     -172,  -162,  -161,  -319,  -513,  -508,  -498,  -547,  -310,  -528,
    1778    -1414, -1414,  -511,  1101,  1102,  1110,  1575,  4802,  -565,  -560,
    1779     -559,  -541,  -551, -1414,  -506,  -744,  -736,  -732,  -593,  -267,
    1780     -227, -1414, -1414,   624,   294,   -85, -1414,  3753,    44,  -634,
    1781     -173
     1757   -1310,  4585,  3220, -1310,  1680, -1310,    79,   965,  -162, -1310,
     1758     542,  -525,  -472,  -928,   -58,  5006,     0, -1310,   115,   571,
     1759     588,   220,   578,  1041,  1045,  1037,  1040,  1043, -1310,   682,
     1760    -568,  4467,  -949, -1310,  -743,   627,  -136,  -680,   399, -1310,
     1761     364, -1310,   400, -1052, -1310, -1310,   143, -1310, -1280, -1058,
     1762     249, -1310, -1310, -1310, -1310,    74, -1199, -1310, -1310, -1310,
     1763   -1310, -1310, -1310,   317, -1213,    36, -1310,  -398, -1310,   501,
     1764     296, -1310,   175, -1310,  -322, -1310, -1310, -1310,   558,  -827,
     1765   -1310, -1310,    14,  -963,    60,  1949, -1310, -1310, -1310,   -66,
     1766   -1310,    19,  1219,  -202,  1852,  4238, -1310, -1310,    54,    75,
     1767     689,  -242,  1416, -1310,  1975, -1310, -1310,   158,  2131, -1310,
     1768    2701,  1038, -1310, -1310, -1310,  -621, -1310,   944,   946,   541,
     1769     713,  -254, -1310, -1310, -1310,   938,   714,  -169, -1310,  -117,
     1770    -134,  1167, -1310, -1310,  -857,  -878,   837,   910,  1055,    25,
     1771   -1310,   900,   597,   -39,  -190,  -145,   668,   773, -1310,   993,
     1772   -1310,  2728,  1561,  -434,   920, -1310, -1310,   708, -1310,  -238,
     1773   -1310,   241, -1310, -1310, -1310, -1226,   414, -1310, -1310, -1310,
     1774    1165, -1310,    35, -1310, -1310,  -830,  -111, -1309,  -151,  3288,
     1775   -1310,  3069, -1310,   921, -1310,  -170,   169,  -182,  -181,  -166,
     1776       7,   -35,   -33,   -32,   813,     2,    29,    44,  -122,  -165,
     1777    -164,  -158,  -153,  -314,  -519,  -491,  -490,  -538,  -301,  -501,
     1778   -1310, -1310,  -512,  1078,  1084,  1085,  2540,  5063,  -571,  -588,
     1779    -558,  -543,  -557, -1310,  -503,  -733,  -723,  -722,  -570,  -311,
     1780    -274, -1310, -1310,   240,   176,   -77, -1310,  3991,   136,  -632,
     1781    -222
    17821782};
    17831783
     
    17851785   positive, shift that token.  If negative, reduce the rule which
    17861786   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1787 #define YYTABLE_NINF -526
     1787#define YYTABLE_NINF -521
    17881788static const yytype_int16 yytable[] =
    17891789{
    1790       50,   115,   151,   400,   401,   771,   402,    99,   152,   973,
    1791      403,   153,   429,   454,   874,   404,   756,   974,   408,  1080,
    1792      116,   975,   262,   441,   269,   405,   406,   744,   850,   384,
    1793      385,   605,    50,    51,  1142,   982,    70,   411,   833,    99,
    1794      610,   825,   826,   727,   149,   409,   499,   732,   154,  1150,
    1795       50,    31,  1398,   836,   155,  1462,   832,   163,   156,   843,
    1796      827,   800,   282,   145,   188,    51,  1208,   211,    70,   528,
    1797       50,   195,   343,   824,   218,   567,  1200,   228,    31,   597,
    1798      671,  -235,  -235,   400,   401,  1184,   402,   926,   821,   221,
    1799      403,  1318,   170,   822,   168,   404,   520,   737,   408,  1194,
    1800      680,  1217,  1218,   823,   738,   405,   406,   115,   684,   426,
    1801      568,   476,   478,  1550,    31,   115,   171,   124,   268,   273,
    1802      283,   254,   217,   412,    31,   409,  1209,   410,   715,  1462,
    1803     1210,  1182,  1183,  1561,    31,  1419,  1420,    31,   629,   244,
    1804     1565,   955,   633,   865,   866,   151,   675,   677,   308,   149,
    1805      412,   152,  -235,  1079,   153,  1481,   163,   115,   346,   168,
    1806     1319,   884,   211,   863,   863,   863,    64,   472,   973,   374,
    1807      722,   204,   477,    31,   217,   528,   974,    57,   117,  1260,
    1808      975,   853,   863,   920,   420,   854,   412,   188,   188,  1212,
    1809     1211,   154,   328,   578,   482,   163,   412,   155,    64,   579,
    1810       78,   156,   528,   268,   834,  1421,   602,   821,   528,    57,
    1811      956,    50,   822,   669,   731,  1190,   716,   217,   163,   938,
    1812      293,   205,   823,   211,    71,   151,   179,   674,   676,  1127,
    1813      444,   152,    78,   746,   153,  1213,  1087,   666,  -113,  -113,
    1814      863,   308,  1191,   841,   212,   602,  1263,   222,   580,   958,
    1815      412,   125,   216,    50,  -113,   437,    71,   589,   825,   826,
    1816       99,   273,   144,  1466,   667,  1026,   273,   268,   268,   836,
    1817      118,  1152,   506,   115,  1264,   163,   263,   827,   217,   264,
    1818      864,   864,   864,  1025,   464,   328,    51,   343,  1001,    70,
    1819     1013,   214,  1184,   610,   108,   108,   308,  1103,   804,   864,
    1820     1090,   146,  1343,   658,   216,   821,   113,   520,   308,   378,
    1821      822,   666,   520,   148,  1004,   520,   217,   437,   725,   161,
    1822      823,   217,  1199,  1508,   572,   379,   108,   477,   472,   149,
    1823     1200,   673,  1419,  1420,   448,   863,   374,   678,   667,   855,
    1824     -470,   157,   115,   856,   905,  1184,   346,   216,   472,   569,
    1825      603,   621,   168,   461,   597,   528,   472,   864,  1537,   597,
    1826     1539,  1466,  1080,   810,   108,   626,  1466,   388,   793,   626,
    1827      930,  -470,   115,  -470,  1492,   833,   260,  -470,  -113,   825,
    1828      826,   685,  1401,   389,   161,  1405,  1466,   579,   440,  1128,
    1829      599,  1182,  1183,  1466,   715,  1551,  1129,   268,   827,  -113,
    1830      442,  1191,  1430,   557,   558,   859,   217,   188,   216,     8,
    1831        9,    10,    11,    12,   374,   173,   850,   324,   183,    64,
    1832       43,   252,  1566,   876,   473,   268,   340,   308,   308,  1247,
    1833       57,   268,   837,  1251,   626,   571,   840,   412,    31,   559,
    1834      560,   343,   484,   391,    46,    47,   216,   443,   494,   501,
    1835      495,   216,   864,    78,   877,   115,   644,   857,    78,   392,
    1836      878,   860,   393,  1451,  1452,  1214,    34,  1170,  1172,  1184,
    1837     1138,   328,   328,   268,   203,   855,   431,    71,   394,  1110,
    1838      435,   268,   716,   626,   395,    50,   929,   217,   374,   721,
    1839     1200,   112,    99,    98,   736,   115,  1079,  1200,  1114,   499,
    1840      396,   249,    41,    42,  1148,  1259,   888,   308,   875,   115,
    1841      324,  1024,   308,  -291,   308,   308,  1457,   179,    51,   917,
    1842      610,    70,   754,  -521,   921,    98,   115,   346,  1341,   217,
    1843      763,   583,   923,   412,   630,  1342,   216,   150,   634,   328,
    1844      922,   112,   435,    98,  1026,   489,   919,   108,   924,    43,
    1845     1200,  -106,    41,    42,   921,  -106,   715,   191,   328,   466,
    1846       98,  1521,   886,    98,   753,   522,   412,  1526,   923,   254,
    1847     1091,   572,   572,    46,    47,   214,  1381,   161,   265,   308,
    1848      769,   995,  1006,    43,  1092,   473,  1094,   810,  1546,  1138,
    1849      626,   346,   472,  1553,   920,   621,  1197,  1097,   939,  1097,
    1850      602,   603,   331,   603,  1197,   473,  1332,    46,    47,   332,
    1851      706,   588,  1198,   473,  1334,   594,   707,   216,   935,    78,
    1852     1324,   626,  1333,   328,   751,  1024,   626,   812,   621,  1367,
    1853     1335,  1126,   626,  1368,   627,   626,   626,   626,   631,    78,
    1854     1382,   340,    98,   889,   716,   412,  -113,    78,  -113,   713,
    1855      217,    64,  -113,   -10,   626,    98,   268,   895,  1039,   216,
    1856      723,   112,    57,   343,  -444,   851,   724,  -113,  -113,  1037,
    1857      599,   733,    41,    42,   165,  1181,   810,   734,   217,  1029,
    1858      399,   191,   288,   217,  -445,    78,   115,   254,   330,   914,
    1859     1084,   553,   554,    41,    42,   750,   324,   324,   214,   231,
    1860     1348,   751,   929,   232,    98,   892,   236,   412,   238,    71,
    1861     1379,   550,   626,   940,   621,   247,    98,   551,   552,   515,
    1862      721,   721,  1122,  1154,   689,   412,   278,   959,   400,   401,
    1863      280,   402,  1044,   555,   556,   403,  1498,   118,   281,   165,
    1864      404,   333,   597,  1498,   408,   334,    98,   929,   115,   346,
    1865      405,   406,   335,   754,   754,   217,   112,   336,   141,   142,
    1866      480,   372,   489,   112,   324,   373,   489,    41,    42,   217,
    1867      377,   409,  1111,   113,    41,    42,   522,   112,   522,   108,
    1868      216,   522,   386,   324,   522,  1151,   973,  1429,    41,    42,
    1869      852,  1392,   994,   991,   974,   340,  1547,   899,   975,   572,
    1870     1249,   390,  1350,   751,   715,   398,   867,   626,   216,   626,
    1871      901,  1009,   410,   216,   626,   346,   751,   990,   603,   743,
    1872      427,   883,    98,   991,   739,   343,   740,  1003,  1174,   741,
    1873      603,   428,   747,   707,   764,   436,  1039,   743,   433,   770,
    1874      743,   451,   231,   604,   529,   530,   531,   443,   324,   473,
    1875      112,   812,   141,   142,  1245,   781,   782,   783,   784,   808,
    1876      579,    41,    42,  1292,  1293,  1375,   217,  1166,   532,   412,
    1877      533,   751,   534,   535,  1500,   473,  1501,  -368,  1376,  -397,
    1878     1378,   308,   462,    78,   751,   216,   751,  1383,   466,   870,
    1879      849,   505,   716,   751,  1169,   594,   602,   436,   463,   216,
    1880      191,   858,   501,   626,  1195,   704,  1171,   810,   602,    78,
    1881      115,   346,   914,  1447,   914,   713,   929,    70,   485,  1444,
    1882      524,  1467,  1514,  1571,   214,   666,   115,   751,  1515,   579,
    1883      917,  1548,   165,   293,  1256,  1370,   412,   509,   214,   940,
    1884      940,   529,   530,   531,   721,   254,   330,   412,   514,   115,
    1885      308,   528,   667,   561,   562,   689,   526,   919,    49,   114,
    1886      885,   563,   887,   751,   996,   532,   346,   533,  1115,   534,
    1887     1321,   716,   565,    37,   330,   412,   754,    40,    98,   929,
    1888      929,   231,   604,   236,    41,    42,   564,   114,   114,   705,
    1889       49,  1388,  1389,   489,   328,    43,   216,  1439,   991,  1533,
    1890     1444,  1445,    49,  1300,  1301,   566,  1303,   569,    49,   346,
    1891       44,   339,   934,  1308,  -441,  1310,    49,   340,   587,    46,
    1892       47,   694,    49,  1240,   590,    49,  1493,  1494,    49,    -3,
    1893      626,   626,   420,   662,   412,   214,     2,   208,     4,     5,
    1894        6,     7,   114,   114,   482,   330,   412,    64,   639,  1138,
    1895      308,  1419,  1420,   851,   834,   330,   602,   659,    57,     8,
    1896        9,    10,    11,    12,   777,   778,    49,   217,   668,    49,
    1897      143,   231,   660,   661,  1446,   663,    49,   713,  1005,   693,
    1898      664,    78,   665,   808,   779,   780,  1202,   670,    31,   259,
    1899      115,   697,  1459,   695,   820,   914,   604,  1311,  1312,  1313,
    1900      914,    35,   699,    36,  -239,    71,   735,    49,   748,   940,
    1901      785,   786,   704,   752,   959,    49,    34,   268,   959,   959,
    1902       49,  1349,  1351,  1352,   243,   246,  1116,   760,   813,   -12,
    1903      814,   524,   817,   524,   626,   343,   524,   828,   -13,   524,
    1904     -292,   872,   873,    43,   880,    49,    49,     8,     9,    10,
    1905       11,    12,   900,   902,   724,   907,   903,   910,   571,   346,
    1906      412,    49,   928,  -418,    -3,  1519,  1459,    46,    47,    49,
    1907     -525,   943,   808,   950,   964,   108,    31,  1425,    49,   340,
    1908      952,    49,   918,   957,   963,   965,   967,   968,   114,   969,
    1909      929,   970,   986,   998,   999,   689,   705,   216,  1000,  1015,
    1910     1016,   273,   115,   114,    34,  1017,  1018,   114,   929,  1019,
    1911     1020,    49,   114,   820,   604,  1021,   473,   489,  1117,   324,
    1912      115,   221,  1032,  -406,   308,    49,    49,    57,  -405,    37,
    1913     1081,  1046,    49,    40,  1083,   704,   443,  1339,   626,    49,
    1914       41,    42,   115,   108,   913,   704,   112,  1105,   141,   240,
    1915       78,    43,   112,  1104,   141,   142,   217,    41,    42,   704,
    1916       70,  1115,  1106,    41,    42,  1107,   818,   751,   602,  1131,
    1917     1113,  1123,  1124,  1125,    71,    46,    47,  1134,   849,  1130,
    1918      980,   929,   929,   241,  1140,   458,  1135,    49,   242,   728,
    1919      626,   626,  1136,  1144,   729,  1137,   743,  1164,  1144,   273,
    1920     1143,  1187,  1185,  1442,   308,  1186,  -293,    49,    49,  1188,
    1921      693,   820,  1559,     8,     9,    10,    11,    12,  1189,   705,
    1922     1203,  1204,  1206,   604,    49,   713,  1207,  1399,    49,   705,
    1923     1215,  1399,  1219,    -3,  1220,  1222,  1227,   115,  1232,   645,
    1924     1202,  1237,    31,   705,   108,  1235,   400,   401,  1144,   402,
    1925     1241,  1246,   494,   403,   217,    49,  1115,  1248,   404,   689,
    1926     1253,   408,  1254,  1261,  1250,    49,  1268,  1270,   405,   406,
    1927       34,     2,   208,     4,     5,     6,     7,  1265,   212,   222,
    1928     1272,  1273,  1302,    49,  1274,   666,   216,  1275,   409,    49,
    1929       64,    49,  1276,  1278,  1285,  1305,  1294,   268,  1295,  1306,
    1930      230,    57,  1323,   808,   713,  1093,   131,   918,   132,   133,
    1931      134,  1532,   667,  1307,  1330,   626,  1336,    41,    42,  1116,
    1932     1309,   646,  1317,  1338,    78,   214,   114,  1340,  1344,  1346,
    1933     1347,    49,  1353,  1482,  1354,   175,    35,   604,    36,    49,
    1934      115,  1355,  1357,    49,  1363,  1364,  1365,    49,    71,  1366,
    1935      114,  1377,   114,  1068,    37,  1373,   176,   177,    40,  1115,
    1936     1374,  1384,  1385,  1313,   115,    41,    42,   704,   704,  1393,
    1937      473,   115,   645,   115,  1394,   115,   442,  1395,   255,  1402,
    1938     1413,    57,  1405,  1414,   216,  -407,  1417,   114,   151,   340,
    1939      645,   373,   114,   645,   152,  1428,   108,   153,  1432,  1436,
    1940     1202,  1434,  1437,  1443,    78,  1531,  1448,  1202,  1438,  1453,
    1941      115,  1117,   115,  1368,  1116,  1458,  1454,  1455,   108,  1456,
    1942     1472,  1463,  1474,   443,   115,   704,   704,  1468,    71,  1476,
    1943     1531,  1531,   726,  1470,   730,  -294,   108,  1478,   163,  1485,
    1944      308,   114,     8,     9,    10,    11,    12,  1480,    49,  1486,
    1945      693,   705,   705,  1487,    37,  1531,  1488,    76,    40,    49,
    1946     1202,    49,   374,   511,  1441,    41,    42,  1499,  1144,  1144,
    1947     1144,    31,  1509,  1511,   418,  1513,    43,  1517,  1518,  1525,
    1948       49,  1540,  1541,  1545,   328,   548,   549,  1554,   918,    76,
    1949     1552,   720,   112,   918,   141,   142,    49,   438,   108,    34,
    1950       46,    47,   114,    41,    42,  1556,  1117,   446,  1562,   705,
    1951      705,    49,  1569,   114,    49,   114,  1570,  1116,  1221,   789,
    1952      787,  1322,  1520,   548,   788,  1205,   743,   224,   790,  1431,
    1953      473,   108,   791,  1572,   245,  1387,  1252,   473,  1403,  1226,
    1954     1502,    57,   908,   909,  1098,  1234,  1102,    49,    57,   931,
    1955      806,   114,  1139,   114,  1045,   879,   945,   114,  1112,   548,
    1956      164,   953,  1331,   718,    78,   114,     0,   126,   129,   130,
    1957        0,    78,   796,   797,   196,   521,  1328,   219,    49,    49,
    1958      229,   798,     0,     0,   871,     0,     0,     0,    71,     0,
    1959      473,     0,    49,     0,     0,    71,    37,     0,   176,   177,
    1960       40,    57,     0,   178,     0,    67,   119,    41,    42,  1117,
    1961        0,   704,  1144,  1144,   693,   354,     0,     0,     0,   704,
    1962      704,   704,     0,     0,    78,     2,   208,     4,     5,     6,
    1963        7,     0,     0,   925,   108,   927,     0,    67,     0,   458,
    1964        0,   256,  1505,   257,  1505,     0,     0,     0,    71,     0,
    1965     1483,     0,     0,   178,     0,   162,   178,     0,   108,   164,
    1966     1329,   215,     0,     0,     0,   108,   414,     0,     0,     0,
    1967        0,   234,   375,   422,     0,   223,    49,     0,     0,  1505,
    1968        0,  1505,     0,     0,     0,   704,     0,     0,    49,   450,
    1969       35,     0,    36,     0,     0,   705,  1068,     0,   164,     0,
    1970        0,     0,   178,   705,   705,   705,     0,     0,     0,   324,
    1971       76,  1534,   261,   215,     0,    76,     0,     0,   108,     0,
    1972     1542,   164,     0,   682,   397,     0,     0,   774,   775,   776,
    1973        0,   645,     0,   445,   416,   417,     0,     0,   114,   421,
    1974        0,   423,   424,     0,     0,   414,     0,     0,    37,   708,
    1975      176,   177,    40,     0,   329,     0,   215,     0,     0,    41,
    1976       42,    49,   261,   351,     0,   178,     0,     0,     0,   705,
    1977       49,     0,    49,     0,     0,     0,     0,     0,    37,   114,
    1978      185,   186,    40,     0,     0,   377,   521,     0,     0,    41,
    1979       42,   521,  1391,   407,   521,     0,     0,     0,     0,   577,
    1980       43,     0,    49,     0,     0,     0,     0,   581,   425,   224,
    1981      584,   430,   432,   646,     0,   187,   162,   215,     0,   178,
    1982     1049,     0,   114,     0,    46,    47,   178,     0,     0,     0,
    1983        0,     0,     0,     0,     0,     0,     0,   449,   645,   375,
    1984        0,   452,     0,   453,     0,     0,   114,  1418,     0,   645,
    1985     1426,   114,   460,     0,     0,   215,     0,     0,    67,     0,
    1986      215,  1099,     0,   474,     0,     0,     0,     0,   898,     0,
    1987        0,     0,     0,   481,   414,   500,    76,     0,   422,     0,
    1988        0,   432,     0,     0,     8,     9,    10,    11,    12,     0,
    1989        0,   354,     0,     0,   178,  1465,    76,     0,     0,     0,
    1990     1469,   114,     0,     0,    76,     8,     9,    10,    11,    12,
    1991        0,   178,     0,    31,     0,   178,     0,   375,     0,     0,
    1992      646,     0,   354,   480,     0,     0,     0,     0,     0,     0,
    1993     1491,     0,     0,     0,    31,     0,     0,   981,     0,   114,
    1994      354,    34,    76,     0,     0,   215,     0,   261,     0,     0,
    1995      897,   595,     0,    49,     0,   414,     0,   623,    49,   904,
    1996        0,     0,    34,   906,     0,     0,     0,     0,    43,     0,
    1997      628,     0,     0,     0,   628,    49,     0,   261,   178,     0,
    1998        0,     0,     0,   753,   354,   412,     0,     0,     0,    43,
    1999        0,   997,    46,    47,     0,     0,     0,  1506,     0,  1506,
    2000        0,  1002,     0,     0,   939,     0,   602,     0,     0,     0,
    2001        0,     0,     0,    46,    47,  1014,  1560,     0,     0,     0,
    2002        0,  1049,  1560,     0,   474,     0,   215,     0,     0,     0,
    2003        0,     0,     0,  1560,  1506,     0,  1506,  1560,    37,   351,
    2004      185,   186,    40,   215,   474,     0,   577,   577,   354,    41,
    2005       42,     0,   474,     0,    37,   114,   185,   186,    40,     0,
    2006       43,     0,     0,    79,     0,    41,    42,     0,   215,     0,
    2007      700,     0,     0,   432,     0,   912,    43,   412,    49,     0,
    2008        0,     0,     0,   913,    46,    47,     0,     0,   714,     0,
    2009       67,   267,   354,   354,   354,    79,     0,     0,   432,     0,
    2010       46,    47,   432,     0,     0,     0,     0,     0,     0,     0,
    2011        0,   354,     0,     0,     0,     0,   801,   802,     0,     0,
    2012        0,   114,   114,   114,     0,     0,     0,     0,     0,   354,
    2013        0,   261,   351,   225,   890,   178,     0,  1298,   893,     0,
    2014       76,     0,     0,     0,     0,   835,     0,     0,   838,   839,
    2015        0,   842,     0,   844,   845,     0,     0,     0,   846,   847,
    2016        0,     0,     0,     0,     0,     0,    76,   178,     0,   354,
    2017        0,     0,     0,     0,     0,     0,     0,   799,    81,   645,
    2018        0,     0,     0,   178,  1089,     0,   548,     0,     0,   215,
    2019        0,     0,     0,     0,     0,   628,   811,     0,   178,     0,
    2020        0,     0,     0,    58,    58,     0,   354,     0,   830,     0,
    2021       81,     0,     0,     0,     0,     0,     0,   215,     0,     0,
    2022        0,   356,   215,  1179,  1180,     0,   595,   511,     0,     0,
    2023        0,   595,     0,     0,     0,    58,     0,   628,     0,     0,
    2024      351,   351,   351,     0,     0,     0,     0,     0,   226,     0,
    2025        0,     0,   354,     0,    49,    49,     0,     0,     0,   351,
    2026        0,     0,   354,     0,   354,   114,   114,     0,     0,   224,
    2027       58,     0,   354,    58,   577,     0,   354,   700,     0,   178,
    2028        0,  1229,  1230,     0,     0,     0,     0,     0,   474,     0,
    2029        0,     0,     0,     0,   215,     0,     0,     0,     0,   978,
    2030      979,     0,     0,   114,     0,     0,     0,     0,   215,     0,
    2031        0,     0,     0,     0,   474,     0,    79,   351,     0,     0,
    2032        0,    79,     0,     0,     0,     0,   944,     0,   500,   432,
    2033       37,     0,   185,   186,    40,     0,   357,     0,    76,     0,
    2034     1216,    41,    42,     0,    37,     0,   185,   186,    40,     0,
    2035        0,     0,    43,   261,   714,    41,    42,     0,     0,   976,
    2036        0,   349,     0,    49,   114,     0,    43,   601,   354,   602,
    2037        0,     0,     0,   114,     0,     0,    46,    47,     0,     0,
    2038        0,   912,     0,   412,     0,     0,     0,     0,    49,    49,
    2039       46,    47,     0,   414,     0,     0,     0,     0,     0,     0,
    2040      700,     0,     0,     0,     0,   215,     0,     0,     0,     0,
    2041      700,     0,   351,    49,   628,   225,     0,  1012,     0,   628,
    2042      811,     0,     0,   354,   700,     0,    58,     0,     0,     0,
    2043        0,    81,     0,     0,  1023,     0,    81,   536,   537,   538,
    2044      539,   540,   541,   542,   543,   544,   545,     0,   178,     0,
    2045        0,     0,     0,     0,     0,     0,    58,    37,     0,   185,
    2046      186,    40,     0,     0,  1100,     0,     0,  1356,    41,    42,
    2047        0,   546,     0,  1155,     0,  1358,  1359,  1360,     0,    43,
    2048        0,     0,    79,     0,   354,   354,    67,   354,   354,     0,
    2049     1167,     0,     0,     0,  1530,     0,   412,   356,     0,     0,
    2050        0,     0,    79,    46,    47,     0,     0,    76,   628,     0,
    2051       79,     0,     0,     0,     0,   261,   714,     0,     0,  1095,
    2052        0,     8,     9,    10,    11,    12,     0,     0,   356,     0,
    2053      226,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2054        0,  1406,   354,   354,     0,  1109,   356,     0,    79,     0,
    2055       31,     0,     0,   432,   119,     0,     0,     0,     0,     0,
    2056        0,     0,     0,     0,     0,     0,     0,     0,   414,     0,
    2057        0,   351,     0,     0,     0,     0,     0,     0,    34,     0,
    2058        0,     0,     0,    37,     0,   185,   186,    40,     0,     0,
    2059      356,     0,  1386,     0,    41,    42,     0,    81,     0,     0,
    2060        0,     0,     0,     0,     0,    43,   215,     0,     0,     0,
    2061     1257,     0,   357,     0,   595,     0,   354,    81,     0,     0,
    2062      601,     0,   602,     0,     0,    81,     0,   430,  1231,    46,
    2063       47,     0,   700,   700,     0,   351,   351,   349,     0,     0,
    2064        0,     0,     0,   357,     0,     0,     0,     0,     0,     0,
    2065        0,     0,     0,     0,   356,  1201,     0,     0,     0,   224,
    2066        0,   357,     0,    81,     0,     0,     0,     0,     0,     0,
     1790      49,   114,   453,   428,   399,   400,   268,    98,   150,   766,
     1791     151,   152,   819,   973,   868,   115,   964,   407,   752,    63,
     1792     401,   402,   403,   358,   383,   384,   965,   966,   404,   261,
     1793     440,   827,    49,   405,   596,   604,    50,   410,   498,    98,
     1794     357,   740,   820,   148,  1070,   153,   830,  1069,   609,    49,
     1795     844,    63,   837,   948,    69,  1137,   162,   821,   725,   794,
     1796      56,   116,   730,   187,   826,   408,   210,   144,    50,    49,
     1797     194,   919,   154,   217,   409,    70,   227,  1187,    31,   342,
     1798     112,   815,   178,   220,   399,   400,    69,   155,   281,  1439,
     1799     628,   425,    56,  1302,   632,  1379,   669,   407,   123,   818,
     1800     401,   402,   403,  1204,  1205,  1181,   114,    70,   404,   816,
     1801     817,   475,   477,   405,   114,  1195,   678,   267,   272,   476,
     1802     505,  1197,  1443,  1177,   682,    31,   211,   923,    31,   221,
     1803     203,   124,   262,    31,    31,   263,   566,    31,   527,   493,
     1804      31,   213,   494,  1171,   527,   408,   282,   307,   148,  1178,
     1805     411,   150,   145,   151,   152,   162,   114,   345,    77,   519,
     1806    1439,   210,  1303,  1169,  1170,  1117,  -231,  -231,   373,    97,
     1807     567,   714,   964,   143,   720,  1196,   107,   107,  1199,  1245,
     1808     204,  1198,   965,   966,   913,   167,   187,   187,   153,   476,
     1809      77,   471,   949,  1458,   162,   253,   147,   411,   419,   815,
     1810     411,    97,   267,   481,   828,   411,   601,   835,   107,   601,
     1811      49,   568,   149,  1186,   287,   154,  1443,   162,    97,   527,
     1812     667,  1443,   210,  1200,   819,    41,    42,   816,   817,   443,
     1813     155,   150,   190,   151,   152,    97,   664,  -231,    97,  1484,
     1814     307,  1443,  1248,  1139,   439,   107,   156,  1077,  1443,   292,
     1815     167,   514,    49,  1016,   820,   182,   169,   830,   172,    98,
     1816     272,  1398,  1399,   202,   588,   272,   267,   267,   723,   821,
     1817    1249,    63,   114,  1512,   162,  1514,   472,   527,   951,  1080,
     1818     170,   991,   441,   327,   665,   656,  1015,   463,    50,   164,
     1819     672,   674,  1093,   815,   342,   307,  -287,   442,   483,   358,
     1820    1468,   609,  1526,   248,  1382,   500,    69,   307,   251,   596,
     1821     664,  1003,    56,   671,   596,   804,   357,    97,  -119,   676,
     1822    -119,   816,   817,   571,  -119,  1187,  1178,    70,   148,  1541,
     1823      97,  1400,   465,  1398,  1399,   373,  -516,   527,  1084,  -119,
     1824    -119,   114,   734,  1118,   819,   345,   436,  1171,   713,   602,
     1825     620,   579,   471,   411,   164,   398,   190,   853,   665,   898,
     1826     253,   377,   827,  1119,   625,   735,   556,   557,   625,  1201,
     1827     519,   114,   471,   178,   820,   519,   327,   378,   519,    97,
     1828     471,  1070,   831,  1116,  1069,   736,   834,   673,   675,   821,
     1829     629,    97,   358,   111,   633,   847,   267,  1171,   747,   848,
     1830     510,   558,   559,  1409,    41,    42,   187,   851,   436,   357,
     1831      77,   854,   986,   373,  1496,    77,  1325,  1169,  1170,   174,
     1832    1501,    97,   547,   548,   267,   213,   307,   307,   107,   844,
     1833     267,   787,   759,   625,   714,   479,  1326,   472,   849,  1423,
     1834    1521,   577,   850,   167,   870,  1528,   642,   578,   342,  1525,
     1835     435,  1157,  1159,  1424,   114,   729,   358,   472,  1428,  1429,
     1836     547,  1362,   254,   871,  1126,   472,   859,   860,   264,  1536,
     1837     447,   849,   267,   357,   742,  1100,  1540,   387,  1187,   330,
     1838     267,   598,   625,   877,    49,  1187,  1469,   373,   719,   460,
     1839     498,    98,   683,   388,   114,  1244,   547,    97,   578,   390,
     1840    1470,   711,   869,    63,   888,   881,   307,  1104,   114,  1135,
     1841    1014,   307,   435,   307,   307,   391,  1171,   910,   603,   -10,
     1842      50,   750,  -440,   609,   392,   114,   345,  -441,  1016,   996,
     1843     582,  -467,   411,  -467,   804,   523,  1187,  1434,    69,   798,
     1844     393,   931,   277,   879,    56,   394,   112,   164,   213,  1236,
     1845    -467,     2,   207,     4,     5,     6,     7,   914,   417,    70,
     1846     704,   395,   327,   327,   916,   912,   705,   914,   916,  1184,
     1847     571,   571,  1184,   915,   952,   190,    77,   279,   307,  1316,
     1848     917,   437,  1126,  1081,  1082,  1185,   280,   913,  1308,   625,
     1849     345,   445,   549,   714,   620,  1317,    77,  1318,   550,   551,
     1850     602,   747,   602,   882,    77,   411,   331,   760,  1360,  1276,
     1851    1277,   713,   765,  1319,  1474,   471,    35,  1363,    36,   332,
     1852     625,  1474,   804,  1014,  1019,   625,   111,   620,   140,   239,
     1853     327,   625,   994,   333,   625,   625,   625,    41,    42,   111,
     1854     334,   928,    77,  -102,   806,   335,   846,  -102,   371,   327,
     1855      41,    42,   625,    97,   267,   372,  1087,   603,  1087,   520,
     1856     107,   465,   861,   240,   768,   769,   770,   342,   241,  1348,
     1857     376,  1027,  1522,  1349,   111,   358,   876,   385,   111,    -3,
     1858     140,   141,  1408,   389,   114,    41,    42,   907,   596,    41,
     1859      42,  1074,   357,   885,   691,   411,   111,   442,   140,   141,
     1860     472,   528,   529,   530,  1141,  1112,   411,    41,    42,   397,
     1861     625,   933,   620,   764,   327,   726,  1101,  1234,   719,   719,
     1862     727,  1238,  1034,   399,   400,   531,   472,   532,   409,   533,
     1863     534,  1153,   878,   411,   880,   432,   721,   407,   244,   401,
     1864     402,   403,   722,   426,   114,   345,   523,   404,   523,   750,
     1865     750,   523,   405,  1156,   523,   601,   845,   500,  1158,   230,
     1866     601,   598,   427,   231,   711,  1476,   235,  1477,   237,   814,
     1867     713,   603,   964,   213,   450,   246,   775,   776,   777,   778,
     1868    1373,  -288,   965,   966,   927,   408,  -364,   213,     8,     9,
     1869      10,    11,    12,   571,     2,   207,     4,     5,     6,     7,
     1870     731,   625,  1241,   625,   411,   999,   732,   680,   625,   345,
     1871    1161,  -393,   602,   570,  1425,   411,   111,    31,   140,   141,
     1872    1523,    45,    46,   229,   602,   111,   342,    41,    42,   484,
     1873    1436,   461,   746,   706,   462,   714,    41,    42,   747,    77,
     1874       8,     9,    10,    11,    12,    34,    37,   892,   804,   504,
     1875      40,   253,   329,   747,   292,   864,   911,    41,    42,    35,
     1876     894,    36,   163,   806,  1330,    77,   747,   980,   508,    31,
     1877     520,   972,   513,   981,   307,   520,   195,   525,   520,   218,
     1878     213,   527,   228,   812,   562,   601,  1168,   814,   603,   993,
     1879    1182,    45,    46,    63,   563,   705,   625,    34,   554,   555,
     1880    1494,  1436,   230,   114,   345,   907,   111,   907,     2,   207,
     1881       4,     5,     6,     7,   714,   664,  1232,    41,    42,   114,
     1882     910,   564,   578,   711,   691,  1356,   565,   749,    69,   411,
     1883     142,   747,   933,   933,    56,    45,    46,   719,   568,   570,
     1884      37,   411,   114,   307,    40,  1332,   338,    45,    46,    70,
     1885    -437,    41,    42,   952,  1357,   586,  1105,   952,   952,   589,
     1886     747,   163,   932,   665,   601,    48,   113,   750,   912,    -3,
     1887      45,    46,   657,    35,   374,    36,  1359,    43,  1508,   552,
     1888     553,   814,   747,   242,   245,    45,    46,   638,     8,     9,
     1889      10,    11,    12,   603,   113,   113,  1227,    48,  1364,   345,
     1890     163,   658,  1106,   659,   747,   560,   561,    37,    48,   184,
     1891     185,    40,   713,   111,    48,   140,   141,    31,    41,    42,
     1892     625,   625,    48,   163,    41,    42,   661,  1126,    48,   984,
     1893     981,    48,    77,   890,    48,   444,  1121,   253,   329,   411,
     1894     307,   230,   897,   235,   186,    34,   899,   662,   113,   113,
     1895     107,   666,    45,    46,  1284,  1285,    37,  1287,  1132,   472,
     1896      40,   663,  1132,  1426,  1292,  1444,  1294,    41,    42,  1423,
     1897     668,   747,    48,  1323,  1083,    48,   911,   442,  1490,   327,
     1898     114,   258,    48,   692,  1491,   907,  1546,   749,   693,   411,
     1899     907,   695,   578,   718,  1189,    45,    46,   329,   411,   933,
     1900      56,    45,    46,   737,   215,   738,   603,   267,   739,  1369,
     1901    1370,   743,  1132,    48,   547,    70,  1418,   981,   107,  1398,
     1902    1399,    48,   625,   771,   772,    37,    48,   184,   185,    40,
     1903     342,   230,   419,   660,   411,   845,    41,    42,   779,   780,
     1904    1351,   374,   773,   774,   457,   697,   345,  -235,   481,   329,
     1905     411,    48,    48,   733,   744,   510,   215,   748,   756,   691,
     1906    1380,   807,   266,   873,  1380,   711,   808,    48,   811,  -289,
     1907      45,    46,   828,   329,   601,    48,     8,     9,    10,    11,
     1908      12,  1295,  1296,  1297,    48,   822,   867,    48,   272,   114,
     1909    1331,  1333,  1334,   893,   113,   -12,   -13,   866,    77,   215,
     1910     895,   896,   900,   220,   903,    31,   921,   114,  -414,   113,
     1911    -520,   307,   936,   113,   943,   722,   107,    48,   113,   374,
     1912     117,   945,  1404,   956,   130,   625,   131,   132,   133,   114,
     1913      63,    48,    48,    34,   950,    41,    42,   957,    48,   958,
     1914     959,   960,   961,  1105,   711,    48,   988,   989,   211,   221,
     1915     990,   977,  1005,  1006,   911,  1007,  1008,  1009,  1010,   911,
     1916     215,  1459,  1079,   213,  1011,    69,  1022,  1421,   160,  -402,
     1917    -401,    56,  1036,  1058,   625,   625,  1071,  1534,  1094,   906,
     1918     644,  1073,  1096,   272,  1097,  1095,    70,  1103,   307,  1106,
     1919    1113,   747,  1114,    48,  1115,  1120,  1122,   971,   215,  1123,
     1920    1124,   702,  1125,   215,  1128,  1131,  1151,   472,  1174,  1175,
     1921    1172,  1173,  1176,    48,    48,     8,     9,    10,    11,    12,
     1922     691,   114,  1190,   399,   400,   259,  1191,  1132,  1132,  1132,
     1923      48,  1193,  1194,   160,    48,  1105,   407,  1202,  1206,   401,
     1924     402,   403,  1189,   441,    31,   643,  -290,   404,    56,  1207,
     1925    1209,    -3,   405,     8,     9,    10,    11,    12,   442,  1214,
     1926     664,    48,  1219,    70,  1224,   107,   323,   493,  1222,    77,
     1927    1507,    48,    34,  1228,   703,   339,  1233,   922,   267,  1235,
     1928    1237,  1106,    31,  1240,   408,  1250,  1246,   107,   215,    48,
     1929    1252,   724,  1254,   728,   625,    48,  1256,    48,  1257,  1258,
     1930    1262,  1259,  1420,  1260,  1269,   107,  1278,  1279,   665,    37,
     1931      34,   175,   176,    40,   932,  1203,   601,  1286,  1307,   114,
     1932      41,    42,    45,    46,    37,   430,   175,   176,    40,   434,
     1933    1289,  1290,   113,  1105,  1291,    41,    42,    48,  1293,  1301,
     1934    1314,   114,  1192,  1320,  1322,    48,    77,  1328,   114,    48,
     1935     114,  1324,   114,    48,  1329,  1358,   113,  1335,   113,   323,
     1936     472,   372,  1336,  1338,   107,  1132,  1132,   472,   985,   215,
     1937     150,  1344,   151,   152,  1345,  1346,  1347,  1297,  1365,  1106,
     1938    1354,  1506,   214,  1355,  1366,  1383,   114,  1374,   114,  1375,
     1939    1376,   434,   233,   113,   488,  1189,  1392,   107,   113,   114,
     1940    1393,    56,  1189,  1460,  -403,  1506,  1506,   702,    56,  1396,
     1941    1407,   215,  1415,   162,   521,   307,    70,  1411,   472,  1413,
     1942     528,   529,   530,    70,  1416,  1417,   160,  1422,  1430,    37,
     1943    1506,   175,   176,    40,   214,  1431,  1432,   373,  1433,  1435,
     1944      41,    42,   865,  1349,   531,  1029,   532,   113,   533,  1305,
     1945    1440,  1445,  1449,  1189,    48,  1451,  1447,  1453,  1455,    56,
     1946     587,  1509,  1457,  1462,   593,    48,   376,    48,  1463,  1464,
     1947    1517,  1475,  1492,  1485,    70,  1487,  1500,   214,  1493,  1489,
     1948     703,  1515,  1516,   626,  1520,  1527,    48,   630,   922,  1529,
     1949     339,   918,  1531,   920,  1544,   107,  1545,   457,  1208,    77,
     1950    1537,   783,    48,   781,  1130,   784,    77,   113,   782,   785,
     1951    1058,  1306,  1495,  1410,  1547,  1368,    48,   107,   113,    48,
     1952     113,  1239,  1384,  1478,   107,  1088,   702,   216,   901,  1213,
     1953     902,  1221,   215,   922,  1092,   924,   702,   800,   214,  1127,
     1954    1035,   872,   938,  1315,   243,   323,   323,  1102,   790,   716,
     1955     702,   327,    48,   946,   791,   792,   113,    77,   113,     0,
     1956     215,  1367,   113,     0,     0,   215,     0,     0,  1138,     0,
     1957     113,     0,     0,   687,   479,   107,   214,     0,     0,   216,
     1958       0,   214,     0,    48,    48,     0,   117,     0,     0,     0,
     1959    1482,     0,  1482,     0,     0,     0,   499,    48,     0,   703,
     1960       0,     0,     0,  1372,     0,     0,     0,     0,     0,   703,
     1961       0,   488,     0,   323,     0,   488,     0,     0,     0,  1029,
     1962       0,     0,   216,   703,     0,   521,  1482,   521,  1482,     0,
     1963     521,     0,   323,   521,     0,     0,   215,   177,     0,     8,
     1964       9,    10,    11,    12,   339,     0,     0,     0,     0,    37,
     1965     215,   184,   185,    40,     0,  1397,     0,     0,  1405,     0,
     1966      41,    42,     0,     0,     0,     0,   214,   644,    31,     0,
     1967       0,     0,     0,  1039,     0,     0,     0,    48,     0,     0,
     1968       0,     0,     0,   216,     0,     0,   905,   177,   411,    48,
     1969     177,     0,     0,     0,    45,    46,    34,   323,     0,   922,
     1970       0,  1442,     0,     0,     0,     0,  1446,   906,   802,     0,
     1971       0,     0,     0,  1479,  1089,  1483,     0,     0,     0,     0,
     1972       0,   216,     0,     0,     0,     0,   216,     0,     0,     0,
     1973       0,     0,   643,     0,  1467,     0,   177,   891,   113,   843,
     1974       0,     0,     0,   215,   593,     0,     0,   214,     0,  1511,
     1975     852,  1513,    66,   118,   702,   702,     0,     0,     0,   922,
     1976     922,    48,     0,     0,   214,     0,     0,     0,     0,     0,
     1977      48,   644,    48,     0,     0,     0,     0,     0,     0,   113,
     1978       0,     0,     0,     0,    66,     0,     0,     0,     0,   214,
     1979       0,     0,     0,  1542,     0,  1543,     0,     0,     0,   177,
     1980       0,   161,    48,   687,     0,     0,     0,     0,  1550,  1551,
     1981       0,   216,   702,   702,     0,     0,     0,     0,  1535,     0,
     1982       0,   222,   113,     0,  1535,     0,     0,   703,   703,     0,
     1983       0,     0,     0,     0,     0,  1535,   643,     0,     0,  1535,
     1984       0,   488,     0,     0,   113,     0,     0,     0,   113,    57,
     1985      57,     0,     0,   177,     0,     0,   987,     0,   260,     0,
     1986     177,     0,     0,   339,     0,     0,   992,     0,     0,     0,
     1987       0,  1039,     0,     0,     0,    75,     0,     0,     0,     0,
     1988    1004,    57,     0,     0,     0,   703,   703,     0,     0,     0,
     1989       0,     0,   216,     0,     0,     0,     0,     0,   113,     0,
     1990     328,     0,     0,     0,     0,     0,     0,    75,   260,   350,
     1991     214,     0,     0,     0,     0,    57,     0,     0,    57,     0,
     1992       0,     0,   995,     0,     0,     0,     0,   802,   177,     0,
     1993       0,     0,     0,     0,   216,     0,   113,     0,   214,   406,
     1994     215,     0,     0,   214,   223,   177,     0,     0,     0,   177,
     1995      48,     0,     0,     0,   424,    48,     0,   429,   431,     0,
     1996    1312,     0,   161,     0,   922,     0,     0,     0,     0,     0,
     1997       0,     0,    48,     0,     0,     0,     0,     0,     0,     0,
     1998     922,     0,     0,   448,  1282,     0,     0,   451,     0,   452,
     1999       0,     0,   702,     0,     0,     0,     0,     0,   459,     0,
     2000     702,   702,   702,     0,    66,     0,   348,     0,     0,   473,
     2001       0,     0,   177,     0,   214,   802,     0,     0,     0,   480,
     2002       0,     0,   339,     0,     0,     0,     0,   431,   214,     0,
     2003       0,    78,   353,  1313,     0,     0,     0,     0,   687,     0,
     2004       0,    37,     0,   184,   185,    40,     0,     0,   499,   113,
     2005     922,   922,    41,    42,     0,   216,     0,     0,     0,     0,
     2006     488,  1107,   323,    78,   702,   703,     0,     0,     0,     0,
     2007       0,    57,    48,   703,   703,   703,     0,     0,   600,     0,
     2008     601,     0,     0,   216,  1166,  1167,    45,    46,   216,     0,
     2009       0,     0,     0,   260,     0,     0,     0,   594,     0,     0,
     2010     224,    57,     0,   622,     0,     0,   449,     0,     0,     0,
     2011       0,     0,     0,   113,   113,   113,   627,     0,   843,     0,
     2012     627,   214,     0,   260,     0,     0,   215,    75,     0,     0,
     2013       0,     0,    75,     0,     0,     0,     0,   703,     0,     0,
     2014       0,     0,  1216,  1217,     0,     0,     0,     0,     0,     0,
     2015      37,     0,   184,   185,    40,     0,     0,     0,     0,   216,
     2016       0,    41,    42,    37,     0,   184,   185,    40,     0,   177,
     2017     473,     0,     0,   216,    41,    42,     0,     0,     0,     0,
     2018       0,     0,     0,     0,     0,   350,     0,   905,   355,   411,
     2019     473,     0,     0,     0,     0,    45,    46,     0,   473,   687,
     2020    1505,   177,   411,     0,     0,     0,     0,     0,    45,    46,
     2021       0,     0,     0,     0,     0,     0,   698,   177,     0,   431,
     2022       0,   215,     0,     0,     0,     0,   223,     0,     0,     0,
     2023       0,   177,     0,     0,   712,     0,    66,     0,     0,     0,
     2024       0,   802,    48,    48,   431,     0,     0,     0,   431,     0,
     2025       0,   113,   113,   535,   536,   537,   538,   539,   540,   541,
     2026     542,   543,   544,     0,     0,     0,   216,     0,     0,     0,
     2027       0,     0,     0,     0,     0,     0,     0,   260,   350,     0,
     2028       0,     0,   348,    78,     0,     0,     0,   545,    78,   113,
     2029       0,     0,     0,    75,     0,     0,     0,     0,     0,     0,
     2030       0,     0,     0,     0,     0,     0,     0,     0,   353,     0,
     2031       0,     0,   177,    75,     0,     0,     0,     0,   214,     0,
     2032       0,    75,  1337,   793,     0,     0,   339,     0,     0,     0,
     2033    1339,  1340,  1341,    57,     0,     0,     0,     0,     0,   353,
     2034       0,   627,   805,     0,     0,     0,    48,   113,  1107,     0,
     2035       0,     0,     0,     0,   824,     0,   113,   353,     0,    75,
     2036       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
     2037      48,    48,   594,     0,     0,   348,     0,   594,     0,     0,
     2038       0,     0,   224,   627,     0,     0,   350,   350,   350,     0,
     2039       0,     0,   286,     0,  1385,    48,     0,     0,   287,     0,
     2040       0,   353,   288,     0,   350,   289,   290,   291,   292,    41,
     2041      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
     2042       0,     0,   698,     0,     0,     8,     9,    10,    11,    12,
     2043       0,     0,     0,   473,     0,   295,     0,   379,     0,   348,
     2044    1107,     0,     0,    45,    46,   297,   298,   299,   300,    78,
     2045       0,     0,     0,     0,    31,     0,   786,     0,     0,   473,
     2046       0,     0,   350,   216,   355,   353,     0,     0,     0,    78,
     2047       0,   937,     0,     0,   431,     0,   177,    78,     0,     0,
     2048       0,     0,    34,   348,   348,   348,     0,    37,     0,   184,
     2049     185,    40,     0,     0,     0,   355,   260,   712,    41,    42,
     2050       0,   348,   967,     0,   214,     0,     0,     0,     0,   353,
     2051     353,   353,     0,   355,     0,    78,     0,     8,     9,    10,
     2052      11,    12,     0,     0,   600,     0,   601,   353,     0,     0,
     2053       0,     0,    45,    46,     0,     0,     0,     0,  1107,     0,
     2054       0,   698,     0,     0,     0,   353,    31,     0,     0,     0,
     2055       0,   698,     0,   350,     0,   627,    75,   355,  1002,   348,
     2056     627,   805,     0,     0,     0,   698,     0,     0,     0,  1481,
     2057       0,  1481,     0,     0,    34,  1013,     0,     0,     0,    37,
     2058       0,     0,    75,    40,     0,   353,     0,     0,     0,     0,
     2059      41,    42,     0,     0,     0,     0,     0,     0,     0,   214,
     2060       0,    80,     0,     0,     0,  1481,     0,  1481,     0,     0,
     2061       0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
     2062     353,   355,     0,     0,    45,    46,    66,     0,    87,     0,
     2063     413,     0,     0,    80,   323,     0,     0,   421,     0,     0,
     2064       0,     0,     0,     0,     0,     0,     0,     0,   627,   216,
     2065     348,     0,     0,     0,     0,   260,   712,     0,   348,  1085,
     2066      87,     0,     0,     0,   353,   355,   355,   355,     0,     0,
     2067     225,     0,     0,     0,   353,     0,   353,     0,     0,     0,
     2068       0,   223,     0,   355,   353,  1099,     0,     0,   353,     0,
     2069       0,     0,     0,   431,   118,     0,     0,   226,     0,     0,
     2070       0,   355,     0,     0,     0,     0,     0,     0,     0,   413,
     2071       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
     2072       0,     0,     0,    57,     0,     0,     0,     0,     0,     0,
     2073       0,     0,     0,     0,     0,     0,     0,     0,    78,     0,
     2074       0,   355,     0,     0,   216,     0,     0,     0,     0,    75,
     2075       0,   594,     0,     0,     0,     0,     0,     0,   356,     0,
     2076       0,     0,     0,   576,   429,     0,     0,     0,     0,   698,
     2077     698,   580,   350,   350,   583,     0,   355,     0,     0,   353,
     2078       0,     0,     0,     0,     0,   363,     0,   177,     0,     0,
     2079       0,    57,  1188,     0,     0,   206,     2,   207,     4,     5,
     2080       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2081      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2082     355,     0,    26,    27,    28,     0,     0,   698,   698,     0,
     2083     355,    31,   355,     0,     0,     0,     0,   224,   413,     0,
     2084     355,     0,   421,     0,   355,     0,     0,     0,     0,     0,
     2085       0,     0,     0,    80,     0,     0,     0,     0,    80,    34,
     2086       0,    35,     0,    36,    37,     0,   208,    39,    40,   348,
     2087     348,     0,     0,     0,   627,    41,    42,     0,     0,     0,
     2088      87,     0,     0,     0,     0,    87,     0,     0,     0,    57,
     2089       0,     0,   353,   353,     0,   353,   353,     0,   712,     0,
     2090       0,    43,     0,   209,     0,    78,     0,     0,     0,    45,
     2091      46,     0,     0,     0,     0,    75,     0,     0,     0,   413,
     2092       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     2093       0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
     2094       0,  1283,     0,     0,     0,     0,     0,     0,     0,     0,
     2095     353,   353,   225,     0,    31,     0,     0,   177,     0,   260,
     2096       0,     0,     0,    66,     0,     0,     0,     0,     0,     0,
     2097       0,     0,     0,     0,     0,   698,     0,   712,     0,   226,
     2098       0,   118,    34,     0,     0,     0,     0,    37,     0,   184,
     2099     185,    40,     0,     0,     0,   127,   127,   127,    41,    42,
     2100       0,     0,     0,     0,     0,     0,     0,   698,     0,     0,
     2101     576,   576,     0,     0,     0,   698,   698,   698,     0,    80,
     2102       0,   353,     0,     0,   186,     0,   350,   350,     0,     0,
     2103       0,     0,    45,    46,   356,     0,     0,    57,    57,    80,
     2104    1188,     0,     0,     0,     0,     0,    87,    80,   355,   355,
     2105       0,   355,   355,     0,     0,     0,     0,     0,     0,     0,
     2106      57,   363,     0,     0,   223,   356,    87,     0,   127,     0,
     2107     127,    78,     0,   118,    87,     0,     0,     0,    57,   698,
     2108       0,     0,     0,   356,     0,    80,    75,     0,     0,     0,
     2109       0,     0,   363,     0,     0,   276,     0,   883,   353,     0,
     2110     353,   886,     0,     0,     0,     0,   355,   355,     0,     0,
     2111     363,     0,    87,     0,     0,     0,     0,     0,     0,     0,
     2112       0,     0,     0,   348,   348,     0,     0,   356,     0,     0,
     2113     353,     0,    57,     0,     0,     0,     0,    57,   353,   353,
     2114     353,     0,     0,     0,     0,     0,   350,     0,     0,   353,
     2115     353,   127,     0,     0,   363,     0,     0,     0,     0,   127,
     2116       0,   127,   127,    75,     0,     0,   127,     0,   127,   127,
     2117      57,   118,     0,   168,     0,   173,     0,   355,   179,   180,
     2118     181,     0,   183,     0,     0,     0,     0,     0,     0,     0,
     2119       0,   356,     0,  1188,     0,     0,     0,   234,     0,     0,
     2120    1188,     0,   353,     0,     0,     0,     0,     0,     0,   249,
     2121     250,     0,     0,     0,   125,   128,   129,     0,   363,     0,
     2122     224,     0,     0,     0,     0,     0,     8,     9,    10,    11,
     2123      12,     0,     0,   576,     0,   356,   356,   356,   127,     0,
     2124       0,     0,    78,   348,     0,     0,     0,     0,     0,     0,
     2125       0,  1188,     0,   356,   355,    31,   355,     0,  1530,     0,
     2126       0,     0,   363,   363,   363,     0,     0,     0,    57,   353,
     2127       0,   356,     0,     0,     0,     0,     0,     0,     0,     0,
     2128     363,     0,    80,    34,     0,     0,   355,   255,    37,   256,
     2129      57,     0,    40,     0,   355,   355,   355,    57,   363,    41,
     2130      42,     0,     0,     0,     0,   355,   355,     0,    80,    87,
     2131       0,   356,     0,     0,     0,     0,    75,     0,     0,    78,
     2132       0,     0,     0,    75,     0,   718,     0,     0,     0,     0,
     2133       0,     0,     0,    45,    46,    87,     0,     0,   363,     8,
     2134       9,    10,    11,    12,     0,     0,   356,     0,    57,     0,
     2135       0,   413,     0,     0,     0,     0,     0,     0,   355,     0,
     2136       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
     2137     396,     0,     0,   363,    75,     0,     0,     0,     0,     0,
     2138     415,   416,     0,     0,     0,   420,     0,   422,   423,     0,
     2139     356,     0,     0,     0,     0,     0,    34,     0,     0,     0,
     2140     356,    37,   356,   184,   185,    40,     0,   225,     0,     0,
     2141     356,     0,    41,    42,   356,     0,     0,   363,     0,     8,
     2142       9,    10,    11,    12,     0,   355,     0,   363,  1142,   363,
     2143       0,     0,     0,     0,   226,     0,     0,   363,   905,     0,
     2144     411,   363,     0,     0,     0,  1154,    45,    46,    31,     0,
     2145       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
     2146       0,     0,     0,     0,   591,     0,   599,     0,     0,     0,
     2147       0,     0,    78,     0,     0,    80,    34,   623,   624,    78,
     2148      31,    37,     0,   184,   185,    40,     0,     0,     0,     0,
     2149       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
     2150       0,     0,    87,     0,     0,   356,     0,     0,    34,     0,
     2151       0,     0,     0,    37,     0,   184,   185,    40,  1505,     0,
     2152     411,     0,     0,   413,    41,    42,    45,    46,     0,     0,
     2153      78,     0,   363,     0,     0,     0,     0,     0,     0,     0,
     2154       0,     0,     0,   127,   127,     0,     0,     0,     0,     0,
     2155     266,     0,     0,     0,     0,     0,     0,     0,    45,    46,
     2156       0,     0,     0,  1242,     0,     0,     0,     0,     0,     0,
     2157       0,     0,   127,     0,     0,   127,   127,     0,   127,     0,
     2158     127,   127,     0,     0,     0,   127,   127,     1,     2,   207,
     2159       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2160      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2161      24,    25,  -291,     0,    26,    27,    28,    29,   356,   356,
     2162      30,   356,   356,    31,     0,     0,     0,     0,     0,     0,
    20672163       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2068        0,    76,     0,     0,     0,     0,     0,     0,    58,     0,
    2069      700,   700,     0,   354,     0,   354,     0,     0,   356,   356,
    2070      356,     0,     0,     0,     0,   357,     0,     0,     0,     0,
    2071        0,     0,     0,     0,     0,     0,     0,   356,     0,     0,
    2072        0,     0,     0,     0,     0,     0,     0,     0,   354,     0,
    2073      349,     0,     0,     0,    88,   356,   354,   354,   354,   628,
    2074        0,     0,     0,     0,     0,     0,    79,   354,   354,     0,
    2075        0,  1503,     0,  1507,     0,     0,     0,     0,     0,     0,
    2076     1320,    76,     0,     0,   714,   178,    88,     0,     0,   357,
    2077        0,     0,    79,     0,     0,   356,     0,     0,     0,     0,
    2078        8,     9,    10,    11,    12,     0,     0,     0,  1536,     0,
    2079     1538,     0,     0,     0,   349,   215,     0,     0,     0,     0,
    2080        0,     0,   354,     0,   227,     0,     0,  1299,     0,    31,
    2081        0,     0,   356,   357,   357,   357,     0,     0,     0,     0,
    2082        0,     0,     0,     0,     0,   261,     0,     0,     0,    67,
    2083        0,     0,   357,  1567,     0,  1568,     0,    34,   349,   349,
    2084      349,   700,    37,   714,   185,   186,    40,   119,  1575,  1576,
    2085      357,     0,     0,    41,    42,     0,     0,   349,   356,     0,
    2086        0,    81,     0,     0,    43,     0,     0,     0,   356,     0,
    2087      356,     0,   354,     0,     0,   225,   700,     0,   356,   912,
    2088        0,   412,   356,     0,   700,   700,   700,    81,    46,    47,
    2089      357,     0,   364,   215,     0,   351,   351,     0,     0,     0,
    2090        0,     0,     0,     0,     8,     9,    10,    11,    12,  1201,
    2091        0,     0,     0,     0,     0,   349,     0,     0,     0,     0,
    2092        0,    76,     0,     0,     0,     0,     0,   357,    76,     0,
    2093        0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
    2094        0,   178,   119,     0,    79,     0,     0,     0,     0,     0,
    2095      700,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2096        0,    34,     0,     0,     0,     0,    37,     0,   185,   186,
    2097       40,     0,     0,   357,   356,     0,     0,    41,    42,     0,
    2098        0,    76,     0,   357,     0,   357,     0,    88,    43,     0,
    2099      226,     0,    88,   357,     0,     0,     0,   357,     0,     0,
    2100        0,     0,     0,  1530,     0,   412,     0,     0,     0,     0,
    2101      349,     0,    46,    47,     0,     0,     0,     0,   349,     0,
    2102      351,     0,     0,     0,     0,     0,     0,     0,     0,   356,
    2103        0,   169,     0,   174,     0,     0,   180,   181,   182,     0,
    2104      184,     0,     0,     0,     0,   119,     8,     9,    10,    11,
    2105       12,     0,     0,     0,     0,   235,     0,     0,     0,    81,
    2106        0,     0,     0,     0,     0,     0,     0,   250,   251,  1201,
    2107        0,     0,     0,     0,     0,    31,  1201,     8,     9,    10,
    2108       11,    12,     0,     0,    58,     0,   227,     0,     0,   357,
    2109      356,   356,     0,   356,   356,     0,     0,     0,     0,     0,
    2110        0,     0,     0,    34,     0,     0,    31,     0,    37,     0,
    2111      185,   186,    40,    79,     0,     0,     0,     0,     0,    41,
    2112       42,     0,     0,     0,     0,     0,     0,     0,     0,  1201,
    2113       43,     0,     0,     0,    34,     0,  1555,     0,     0,    37,
    2114        0,   185,   186,    40,   357,   187,     0,     0,   356,   356,
    2115       41,    42,    58,    88,    46,    47,     0,     0,     0,     0,
    2116        0,    43,     0,     8,     9,    10,    11,    12,   364,   349,
    2117        0,     0,     0,    88,     0,     0,   267,     0,     0,     0,
    2118        0,    88,     0,     0,     0,    46,    47,     0,     0,     0,
    2119        0,     0,    31,     0,     8,     9,    10,    11,    12,   364,
    2120        0,     0,     0,     0,     0,   357,   357,     0,   357,   357,
    2121        0,     0,     0,     0,     0,     0,     0,   364,     0,    88,
    2122       34,     0,   356,    31,     0,    37,     0,     0,    81,    40,
    2123        0,     0,     0,   349,   349,     0,    41,    42,     0,     0,
    2124        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2125        0,    34,     0,    58,     0,     0,    37,     0,     0,     0,
    2126       40,   364,    44,   357,   357,   225,     0,    41,    42,     0,
    2127        0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
    2128        0,     0,     0,     0,     0,     0,     0,    79,     0,     0,
    2129        0,     0,     0,   720,     0,     0,     0,     0,     0,   356,
    2130        0,   356,    46,    47,     8,     9,    10,    11,    12,    13,
     2164       0,    80,     0,     0,     0,   363,   363,     0,   363,   363,
     2165       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
     2166       0,     0,  -291,     0,     0,     0,  1012,     0,    87,     8,
     2167       9,    10,    11,    12,     0,     0,   356,   356,     0,     0,
     2168       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2169       0,     0,     0,     0,     0,    44,   283,   284,    31,   285,
     2170       0,    45,    46,   363,   363,     0,     0,     0,     0,     0,
     2171       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2172       0,     0,     0,   127,   127,   286,    34,     0,     0,     0,
     2173       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
     2174     291,   292,    41,    42,     0,   293,   294,   356,     0,     0,
     2175       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2176       0,     0,   795,   796,     0,     0,     0,     0,   295,     0,
     2177     379,     0,     0,     0,   363,     0,   344,    46,   297,   298,
     2178     299,   300,     0,     0,     0,     0,     0,     0,     0,     0,
     2179     225,   829,     0,     0,   832,   833,     0,   836,     0,   838,
     2180     839,     0,     0,     0,   840,   841,     0,     0,     0,     0,
     2181       0,     0,    80,     0,     0,     0,     0,   226,     0,   925,
     2182       0,   926,     0,     0,   356,     0,   356,     0,   929,   930,
     2183       0,     0,     0,   935,     0,     0,     0,     0,     0,    87,
     2184       0,     0,     0,     0,     0,   940,     0,     0,     0,     0,
     2185     944,   363,     0,   363,     0,     0,   356,     0,     0,     0,
     2186       0,     0,     0,     0,   356,   356,   356,     0,     0,     0,
     2187       0,     0,     0,     0,     0,   356,   356,     0,   978,     0,
     2188     127,     0,     0,   363,     0,   127,     0,     0,     0,    80,
     2189       0,   363,   363,   363,     0,     0,     0,     0,     0,     0,
     2190       0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
     2191       0,     0,     0,     0,     0,     0,    87,     0,     0,     0,
     2192       0,     0,     0,     0,     0,     0,     0,     0,   356,     0,
     2193       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2194     166,     0,   969,   970,     0,     0,     0,     0,     0,     0,
     2195       0,     0,     0,     0,     0,   363,     0,   219,     0,     0,
     2196    1162,     0,     0,     8,     9,    10,    11,    12,     0,     0,
     2197       0,     0,     0,     0,     0,     0,     0,  1023,  1024,  1025,
     2198    1026,     0,  1028,     0,     0,     0,     0,     0,     0,     0,
     2199     283,   284,    31,   285,     0,   356,     0,  1072,     0,     0,
     2200       0,     0,     0,     0,     0,   166,     0,     0,     0,   273,
     2201       0,  1078,     0,     0,     0,     0,     0,     0,     0,   286,
     2202      34,     0,   363,     0,     0,   287,     0,     0,     0,   288,
     2203       0,     0,   289,   290,   291,   292,    41,    42,   166,   293,
     2204     294,     0,    80,     0,     0,     0,   127,     0,   369,    80,
     2205       0,  1098,   375,     0,     0,     0,     0,     0,     0,     0,
     2206       0,     0,   295,     0,   379,     0,     0,     0,     0,    87,
     2207    1163,    46,   297,   298,   299,   300,    87,     8,     9,    10,
     2208      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2209      21,    22,    23,    24,    25,     0,  1129,    26,    27,    28,
     2210      80,   166,  1136,     0,  1090,     0,    31,  1140,     0,     0,
     2211       0,     0,  1144,   219,  1145,     0,     0,     0,  1147,     0,
     2212    1148,  1149,     0,     0,  1152,     0,     0,    87,     0,     0,
     2213       0,   166,     0,  1164,    34,     0,     0,     0,     0,     0,
     2214       0,   208,    39,     0,     0,     0,     0,     0,     0,     0,
     2215       0,  1179,  1180,     0,     0,     0,   375,     0,     0,     0,
     2216       0,     0,     0,   166,     0,     0,     0,     0,     0,     0,
     2217       0,     0,     0,     0,     0,   127,     0,     0,  1210,     0,
     2218       0,  1212,     0,     0,    45,    46,   524,     0,     0,     0,
     2219       0,     0,     0,     0,     0,     0,     0,     0,   166,     0,
     2220       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
     2221       0,     0,     0,     0,   232,     0,   236,     0,   238,     0,
     2222       0,     0,     0,     0,  1226,   247,     0,     0,     0,     0,
     2223    1230,  1231,     0,     0,     0,     0,   597,     0,     0,     0,
     2224       0,   621,     0,     0,     0,     0,     0,     0,     0,     0,
     2225    1247,     0,     0,  1251,     0,     0,   212,  1253,   236,   238,
     2226     247,     0,     0,     0,     0,  1218,     0,     0,     0,     0,
     2227    1261,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2228       0,     0,     0,  1268,     0,  1270,  1271,  1272,  1273,     0,
     2229       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
     2230       0,  1280,     0,  1281,     0,     0,     0,   173,     0,     0,
     2231       0,     0,     0,     0,     0,     0,     0,   166,   166,     0,
     2232       0,     0,     0,     0,   369,     0,     0,     0,     0,     0,
     2233       0,     0,     0,     0,     0,     0,  1309,  1310,     0,     0,
     2234       0,     0,     0,     0,     0,   524,     0,     0,     0,     0,
     2235       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2236     212,     0,   236,   238,   247,     0,     0,     0,     0,     0,
     2237       0,     0,     0,   715,     0,     0,     0,     0,     0,     0,
     2238       0,     0,     0,     0,     0,   166,  1342,  1343,     0,     0,
     2239       0,     0,     0,     0,  1304,     0,  1353,   524,   212,   524,
     2240       0,     0,   524,   212,   166,   524,     0,     0,     0,     0,
     2241       0,     0,     0,     0,     0,     0,     0,   369,   497,     0,
     2242       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2243       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
    21312244      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2132       24,    25,   592,     0,   600,   364,     0,     0,     0,     0,
    2133        0,     0,     0,    31,   356,   624,   625,   357,     0,     0,
    2134        0,     0,   356,   356,   356,     0,     0,     0,     0,     0,
    2135        0,     0,     0,   356,   356,     0,     0,     0,     0,     0,
    2136        0,    34,     0,     0,     0,     0,     0,    79,     0,   364,
    2137      364,   364,     0,     0,     0,     0,     0,     0,     0,     0,
    2138      226,     0,     0,     0,     0,     0,     0,     0,   364,     0,
    2139      284,   285,     0,   286,     0,     0,     0,     0,     0,     0,
    2140        0,     0,    81,     0,    58,    58,   364,     0,   356,     0,
    2141        0,     0,     0,     0,   357,     0,   357,    88,     0,   287,
    2142        0,     0,     0,     0,     0,   288,     0,    58,     0,   289,
    2143        0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
    2144      295,     0,     0,    88,     0,    58,   364,    43,     0,   357,
    2145        0,     0,     0,     0,     0,     0,     0,   357,   357,   357,
    2146        0,     0,   296,     0,   380,     0,     0,   381,   357,   357,
    2147        0,    46,    47,   298,   299,   300,   301,     0,   356,     0,
    2148        0,     0,    81,   364,     0,     0,     0,     0,     0,     0,
    2149        0,     0,     0,   349,   349,     0,     0,     0,     0,     0,
    2150        0,     0,    58,     0,     0,     0,     0,    58,     0,     0,
     2245      24,    25,  -291,     0,    26,    27,    28,  1388,     0,  1389,
     2246    1390,  1391,     0,    31,     0,     0,   212,     0,     0,   166,
     2247       0,  1395,     0,     0,     0,     0,     0,     0,     0,     0,
     2248    1406,   369,     0,     0,     0,   810,     0,     0,   212,     0,
     2249       0,    34,     0,   236,   238,     0,    37,     0,   336,   337,
     2250      40,   247,  -291,     0,     0,  1427,     0,    41,    42,     0,
     2251       0,   597,     0,     0,   321,     0,   597,     0,     0,     0,
     2252       0,     0,     0,     0,   346,   369,   369,   369,     0,   157,
     2253       0,     0,     0,   634,     0,   338,   382,   382,     0,     0,
     2254       0,    45,    46,   369,   212,     0,     0,     0,  1465,  1466,
    21512255       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2152        0,     0,     0,   357,     0,     0,     0,    79,     0,   364,
    2153        0,     0,     0,     0,    79,     0,     0,     0,     0,   364,
    2154       58,   364,     0,     0,     0,     0,   227,     0,     0,   364,
    2155        0,     0,     0,   364,     0,     8,     9,    10,    11,    12,
     2256       0,  1471,   212,     0,     0,     0,     0,   212,  1471,   212,
     2257     283,   284,     0,   285,     0,   524,     0,   252,     0,     0,
     2258       0,     0,     0,     0,     0,     0,   212,   257,     0,   212,
     2259     212,     0,     0,     0,     0,     0,     0,   212,     0,   286,
     2260    1504,   369,     0,   934,  1510,   287,     0,   321,     0,   288,
     2261       0,   212,   289,   290,   291,   292,    41,    42,   212,   293,
     2262     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2263       0,   478,  1532,     0,  1533,     0,   715,     0,     0,     0,
     2264       0,     0,   295,   157,   379,     0,     0,   380,     0,     0,
     2265      45,    46,   297,   298,   299,   300,     0,   386,     0,     0,
     2266       0,     0,  1548,  1549,     0,     0,     0,     0,     0,     0,
     2267    1552,  1553,     0,     0,     0,     0,     0,     0,     0,     0,
     2268     418,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2269       0,     0,   369,     0,   433,     0,   621,     0,     0,     0,
     2270     369,     0,     0,   438,     0,     0,     0,     0,     0,     0,
     2271       0,     0,     0,   446,     0,     0,     0,     0,     0,     0,
     2272       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
     2273       0,     0,   212,     0,     0,     0,     0,     0,   464,     0,
     2274       0,     0,     0,   474,     0,     0,     0,   382,     0,     0,
     2275       0,     0,     0,   286,     0,     0,   482,     0,     0,   287,
     2276     212,     0,   492,   288,   496,   212,   289,   290,   291,   292,
     2277      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
     2278       0,   526,     0,     0,     0,     0,     0,     0,     0,     0,
     2279       0,     0,     0,     0,     0,   715,   295,     0,   379,     0,
     2280       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
     2281     524,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2282       0,     0,     0,   585,     0,     0,     0,     0,   590,     0,
     2283       0,     0,     0,     0,   166,     0,   212,     0,     0,     0,
     2284       0,   709,     0,     0,     0,     0,     0,     0,     0,     0,
     2285     212,     0,     0,     0,     0,     0,     0,   635,     0,     0,
     2286       0,   636,   637,     0,   639,     0,     0,     0,     0,     0,
     2287     497,   650,   651,     0,   652,   653,     0,   654,     0,   655,
     2288     741,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2289     597,     0,     0,   758,     0,     0,   585,     0,   741,     0,
     2290       0,   741,     0,     0,   670,     0,     0,     0,     0,     0,
     2291       0,   369,   369,   767,     0,     0,     0,     0,     0,     0,
     2292       0,     0,     0,     0,     0,     0,     0,     0,     0,   681,
     2293       0,   212,     0,     0,     0,   788,     0,     0,     0,     0,
     2294       0,     0,     0,   212,     0,   797,     0,     0,     0,     0,
     2295       0,     0,   346,     0,     0,   707,     0,   758,     0,     0,
     2296       0,   710,   212,     0,     0,     0,   464,     0,     0,     0,
     2297       0,   524,     0,     0,     0,     0,   206,     2,   207,     4,
     2298       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2299      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2300      25,     0,   745,    26,    27,    28,   862,     0,     0,     0,
     2301       0,     0,    31,     0,   382,     0,     0,   763,     0,     0,
     2302       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2303       0,     0,     0,     0,     0,     0,     0,   715,     0,     0,
     2304      34,     0,    35,     0,    36,     0,     0,   208,    39,     0,
     2305       0,     0,     0,   283,   284,   789,   285,     0,     0,     0,
     2306       0,     0,     0,     0,   799,     0,     0,     0,     0,     0,
     2307       0,   801,     0,     0,     0,   212,     0,   809,     0,   219,
     2308       0,     0,   286,     0,   209,     0,   823,     0,   287,     0,
     2309      45,    46,   288,     0,     0,   289,   290,   291,   292,    41,
     2310      42,     0,   293,   294,     0,   212,     0,     0,     0,     0,
     2311       0,     0,   758,     0,   963,     0,   715,     0,     0,   341,
     2312     364,     0,     0,     0,   974,   295,   863,   379,     0,     0,
     2313     982,     0,     0,    45,    46,   297,   298,   299,   300,     0,
     2314     212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2315       0,   212,     0,   414,     0,     0,     0,     0,     0,     0,
     2316     414,     0,   809,     0,     0,   369,   369,     0,     0,     0,
     2317     904,     0,  1000,  1001,   219,     0,   346,     0,     0,     0,
     2318       0,     0,     0,     0,     0,     0,     0,     0,     0,   507,
     2319     346,   509,   512,     0,     0,     0,     0,     0,     0,   515,
     2320     516,   252,     0,     0,     0,     0,     0,     0,     0,     0,
     2321       0,   941,   942,   509,   509,     0,     0,     0,     0,     0,
     2322       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
     2323    1031,     0,   414,     0,   382,     0,     0,   212,     0,     0,
     2324       0,     0,     0,     0,   979,     0,     0,     0,     0,   983,
     2325       0,   509,     8,     9,    10,    11,    12,    13,    14,    15,
     2326      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2327       0,   346,    26,    27,    28,     0,     0,     0,     0,     0,
     2328       0,    31,   684,     0,     0,   369,   414,   509,     0,     0,
     2329       0,     0,     0,     0,   414,   581,     0,   414,   584,     0,
     2330       0,     0,     0,     0,     0,     0,     0,     0,   364,    34,
     2331     321,     0,   613,  1017,     0,     0,    38,    39,     0,     0,
     2332    1018,     0,     0,     0,     0,     0,   212,     0,     0,     0,
     2333       0,   631,     0,  1020,   341,  1021,     0,     0,   382,     0,
     2334       0,   524,     0,   524,   974,     0,     0,     0,   741,  1033,
     2335       0,     0,     0,   685,     0,  1037,     0,   686,     0,    45,
     2336      46,   414,     0,     0,     0,   414,     0,  1075,     0,  1150,
     2337    1076,     0,     0,     0,     0,     0,     0,   524,     0,   524,
     2338    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2339       0,     0,     0,     0,     0,     0,   364,     0,     0,     0,
     2340       0,     0,   382,     0,  1183,     0,   166,     0,     0,     0,
     2341       0,     0,     0,     0,     0,     0,     0,     0,     0,   974,
     2342     974,   212,     8,     9,    10,    11,    12,    13,    14,    15,
     2343      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2344    1215,     0,   414,     0,     0,   364,     0,   590,     0,     0,
     2345       0,    31,     0,     0,     0,   509,   509,   509,   509,   509,
     2346     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
     2347     509,   509,   509,     0,     0,     0,     0,   283,   284,    34,
     2348     285,     0,  1146,     0,   414,     0,     0,     0,   341,   364,
     2349       0,     0,     0,     0,     0,   974,     0,     0,     0,     0,
     2350       0,     0,     0,     0,     0,     0,   286,     0,     0,     0,
     2351       0,     0,   287,   862,     0,     0,   288,     0,     0,   289,
     2352     290,   291,   292,    41,    42,     0,   293,   294,  1266,  1267,
     2353       0,     0,     0,   414,   414,     0,     0,     0,     0,     0,
     2354     526,     0,     0,     0,     0,     0,  1211,     0,     0,   295,
     2355       0,   379,   803,   364,   971,     0,     0,    45,    46,   297,
     2356     298,   299,   300,   613,     0,   613,   613,     0,     0,     0,
     2357       0,     0,   613,     0,     0,     0,     0,     0,     0,     0,
     2358    1223,     0,   842,   364,     0,  1225,     0,     0,   364,     0,
     2359       0,     0,     0,  1229,     0,     0,     0,   364,   364,   364,
     2360       0,   509,     0,     0,     0,     0,     0,     0,     0,     0,
     2361       0,     0,     0,     0,     0,   364,     0,     0,     0,     0,
     2362     414,   884,     0,     0,   414,   887,  1255,     0,     0,     0,
     2363       0,   889,     0,     0,     0,     0,     0,     0,  1263,     0,
     2364       0,  1264,     0,  1265,     0,     0,     0,     0,     0,     0,
     2365     414,     0,     0,     0,     0,     0,     0,  1274,  1275,     0,
     2366       0,     0,   509,     0,     0,     0,     0,     0,   212,  1371,
     2367       0,     0,   741,   364,   613,     0,     0,     0,     0,  1288,
     2368       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2369       0,     0,   509,     0,     0,     0,     0,     0,     0,     0,
     2370       0,     0,     0,     0,     0,     0,     0,   341,   364,     0,
     2371       0,     0,   414,   414,     0,     0,     0,     0,     0,     0,
     2372       0,     0,     0,     0,     0,     0,  1327,     0,     0,     0,
     2373       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2374      17,    18,    19,    20,    21,    22,    23,    24,    25,  -291,
     2375       0,    26,    27,    28,     0,     0,   414,     0,     0,     0,
     2376      31,     0,     0,     0,   364,     0,     0,     0,     0,     0,
     2377       0,   803,   364,     0,     0,   613,     0,   613,     0,     0,
     2378       0,     0,     0,     0,     0,     0,     0,   613,    34,     0,
     2379       0,     0,     0,    37,     0,   336,   337,    40,     0,  -291,
     2380       0,  1377,     0,  1378,    41,    42,     0,     0,     0,     0,
     2381       0,     0,   509,     0,     0,  1386,     0,  1387,     0,     0,
     2382       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2383       0,     0,   338,     0,  1394,     0,     0,     0,    45,    46,
     2384       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2385    1412,  1414,     0,     0,     0,     0,     0,   509,     0,   803,
     2386       0,  1419,     0,     0,  1229,     0,   341,   364,   414,     0,
     2387     414,     0,     0,     0,   414,     0,     0,     0,     0,     0,
     2388       0,     0,   321,     0,     0,  1441,     0,     0,     0,     0,
     2389       0,     0,   509,     0,  1448,   613,   613,  1450,     0,  1452,
     2390    1454,  1456,     0,     0,     0,   509,     8,     9,    10,    11,
     2391      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2392      22,    23,    24,    25,  -291,     0,     0,     0,     0,     0,
     2393     414,     0,     0,     0,     0,    31,     0,     0,     0,  1486,
     2394       0,  1488,     0,  1229,     0,     0,   509,     0,     0,     0,
     2395       0,   414,  1143,     0,     0,     0,     0,     0,  1499,     0,
     2396       0,     0,   364,    34,     0,     0,     0,     0,   414,  1155,
     2397       0,   613,   613,  1160,  -291,     0,     0,     0,     0,     0,
     2398       0,     0,     0,   364,   364,     0,     0,     0,     0,     0,
     2399       0,     0,     0,     0,     0,     0,     0,     1,     2,   207,
     2400       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2401      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2402      24,    25,     0,   509,    26,    27,    28,    29,     0,     0,
     2403      30,   283,   284,    31,   285,     0,     0,     0,     0,     0,
     2404       0,     0,     0,     0,     0,     0,   414,     0,   414,     0,
     2405       0,     0,     0,   414,     0,     0,     0,     0,     0,     0,
     2406     286,    34,   613,    35,     0,    36,   287,     0,    38,    39,
     2407     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
     2408     293,   294,     0,   509,   509,   803,   414,  1243,     0,     0,
     2409       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2410       0,     0,     0,   295,     0,  1055,     0,     0,     0,   364,
     2411       0,    45,    46,   297,   298,   299,   300,     0,     0,     0,
     2412       0,     0,     0,     0,     0,     0,  -126,     0,     1,     2,
     2413     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    21562414      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2157       23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
    2158        0,     0,   213,     0,    31,     0,     0,    79,     0,     0,
    2159        0,     0,   233,   357,   237,     0,   239,     0,     0,     0,
    2160        0,     0,     0,   248,     0,     0,     0,     0,     0,     0,
    2161        0,     0,    34,     0,     0,    88,     0,    37,   349,   337,
    2162      338,    40,     0,  -295,     0,     0,     0,     0,    41,    42,
    2163        0,     0,     0,     0,   213,     0,   237,   239,   248,    43,
    2164        0,     0,    81,    58,     0,   364,     0,     0,     0,    81,
    2165        0,     0,     0,     0,   635,     0,   339,     0,     0,   128,
    2166      128,   128,     0,    46,    47,     0,     0,    58,     0,     0,
    2167        0,     0,   284,   285,    58,   286,     0,   213,   932,     0,
    2168      933,     0,     0,     0,     0,     0,     0,   936,   937,     0,
    2169        0,     0,   942,     0,     0,     0,     0,     0,     0,     0,
    2170      364,   287,    81,   167,   947,     0,     0,   288,     0,   951,
    2171        0,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2172      220,   294,   295,     0,     0,     0,     0,    58,     0,    43,
    2173        0,     0,     0,   128,     0,   128,     0,     0,   213,   987,
    2174      237,   239,   248,     0,   296,     0,   380,     0,     0,     0,
    2175        0,     0,   792,    46,    47,   298,   299,   300,   301,     0,
    2176      277,   364,   364,     0,   364,   364,     0,     0,   167,     0,
    2177        0,     0,   274,     0,     0,     0,   213,     0,     0,     0,
    2178        0,   213,     0,     0,    88,     0,     0,     0,   508,     0,
    2179      510,   513,     0,     0,     0,     0,   498,     0,   516,   517,
    2180        0,   167,     0,     0,     0,     0,     0,     0,     0,     0,
    2181        0,   370,   510,   510,     0,   376,   128,     0,     0,   364,
    2182      364,     0,     0,     0,   128,     0,   128,   128,     0,     0,
    2183        0,   128,     0,   128,   128,     0,     0,     0,     0,     0,
    2184     1033,  1034,  1035,  1036,   213,  1038,     0,     0,     0,     0,
    2185      510,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2186        0,  1082,     0,     0,   167,     0,   213,     0,     0,     0,
    2187        0,   237,   239,     0,     0,  1088,   220,     0,     0,   248,
    2188        0,     0,     0,     0,     0,     0,   510,     0,     0,     0,
    2189        0,     0,     0,   364,   167,     0,     0,     0,     0,     0,
    2190        0,     0,     0,   128,     0,     0,     0,     0,     0,     0,
    2191        0,     0,     0,     0,     0,  1108,     0,     0,     0,   376,
    2192        0,     0,   213,     0,     0,     0,   167,     0,     0,     0,
    2193        0,     0,     0,     0,     0,     0,   227,     0,     0,     0,
    2194      213,     0,     0,     0,     0,   213,     0,   213,     0,   525,
    2195        0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
    2196        0,   167,  1141,     0,   213,     0,     0,   213,   213,  1149,
    2197      364,     0,   364,     0,  1153,   213,     0,     0,     0,  1157,
    2198        0,  1158,     0,     0,     0,  1160,     0,  1161,  1162,   213,
    2199        0,  1165,     0,     0,     0,     0,   213,     0,     0,   598,
    2200     1177,     0,     0,     0,   622,   364,     0,     0,     0,     0,
    2201        0,     0,     0,   364,   364,   364,     0,     0,  1192,  1193,
    2202        0,     0,     0,     0,   364,   364,     0,     0,     0,     0,
    2203        0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
    2204        0,     0,     0,     0,     0,  1223,     0,     0,  1225,     0,
    2205        0,     0,     0,     0,   510,   510,   510,   510,   510,   510,
    2206      510,   510,   510,   510,   510,   510,   510,   510,   510,   510,
    2207      510,   510,     0,     0,     0,     0,     0,     0,     0,   364,
    2208      167,   167,     0,     0,     0,     0,     0,   370,     0,     0,
    2209        0,  1239,     0,     0,     0,     0,     0,  1243,  1244,     0,
    2210        0,     0,     0,     0,     0,     0,     0,     0,   525,  1255,
    2211      213,     0,     0,     0,     0,     0,     0,     0,     0,  1262,
    2212        0,     0,  1266,     0,  1267,     0,     0,  1269,     0,     0,
    2213        0,     0,     0,     0,     0,     0,   717,     0,   213,     0,
    2214     1277,     0,     0,   213,     0,     0,     0,     0,   167,   364,
    2215        0,     0,     0,  1284,     0,  1286,  1287,  1288,  1289,     0,
    2216      525,     0,   525,     0,     0,   525,     0,   167,   525,     0,
    2217        0,  1296,     0,  1297,     0,     0,     0,   174,     0,     0,
    2218      370,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2219        0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
    2220        0,   510,     0,     0,     0,    88,  1325,  1326,   128,   128,
    2221        0,     0,     0,     0,     0,   213,     0,     0,     0,     0,
    2222        0,     0,     0,     0,     0,     0,     0,     0,     0,   213,
    2223        0,     0,   167,     0,     0,     0,     0,   128,     0,     0,
    2224      128,   128,     0,   128,   370,   128,   128,     0,   816,   498,
    2225      128,   128,     0,     0,     0,     0,     0,     0,    88,  1361,
    2226     1362,     0,     0,     0,   510,     0,     0,     0,     0,  1372,
    2227        0,     0,     0,     0,   598,     0,     0,     0,     0,   598,
    2228        0,     0,     0,     0,     0,     0,     0,     0,   370,   370,
    2229      370,     0,     0,     0,     0,     0,   510,     0,     0,  1022,
    2230        0,     0,     8,     9,    10,    11,    12,   370,     0,     0,
    2231        0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
    2232     1404,     0,   158,     0,     0,     0,   213,     0,     0,   284,
    2233      285,    31,   286,  1409,     0,  1410,  1411,  1412,     0,   525,
    2234        0,     0,     0,     0,     0,   213,     0,  1416,     0,     0,
    2235        0,     0,     0,     0,     0,     0,  1427,     0,   287,    34,
    2236        0,     0,     0,     0,   288,   370,     0,   941,   289,     0,
    2237      253,   290,   291,   292,   293,    41,    42,     0,   294,   295,
    2238      258,     0,     0,  1450,     0,     0,    43,     0,     0,     0,
    2239        0,   128,   128,     0,     0,     0,     0,     0,     0,     0,
    2240        0,   296,   717,   380,     0,     0,     0,     0,     0,     0,
    2241      345,    47,   298,   299,   300,   301,     0,   510,     0,     0,
    2242        0,     0,     0,     0,     0,     0,     0,     0,  1489,  1490,
    2243        0,     0,     0,     0,     0,     0,   158,     0,     0,     0,
    2244        0,  1495,     0,     0,     0,     0,     0,     0,  1495,     0,
    2245      387,     0,     0,     0,     0,     0,     0,     0,     0,   213,
    2246      370,     0,   510,     0,   622,     0,     0,     0,   370,     0,
    2247        0,     0,     0,   419,     0,     0,     0,     0,     0,     0,
    2248        0,  1529,     0,     0,     0,  1535,     0,   434,     0,     0,
    2249        0,   213,     0,     0,     0,     0,   439,     0,     0,     0,
    2250      510,     0,     0,     0,     0,     0,   447,     0,     0,     0,
    2251        0,     0,     0,   510,  1557,     0,  1558,     0,     0,     0,
    2252        0,     0,     0,     0,     0,     0,     0,   213,     0,     0,
    2253        0,   465,     0,     0,     0,     0,   475,     0,   213,     0,
    2254        0,     0,     0,     0,  1573,  1574,     0,     0,     0,   483,
    2255        0,   128,  1577,  1578,   510,   493,   128,   497,     0,     0,
    2256        0,     0,     0,     0,   717,     0,     0,     0,     0,     0,
    2257        0,     0,     0,     0,   527,     0,     0,     0,     0,   525,
     2415      23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
     2416       0,    30,   283,   284,    31,  1040,  1041,     0,  1042,     0,
     2417     341,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
     2418       0,     0,  1051,     0,     0,     0,  1052,  1053,   364,    33,
     2419       0,   286,    34,     0,    35,     0,    36,  1054,     0,    38,
     2420      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
     2421       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
    22582422       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2259        0,     0,     0,     0,   284,   285,     0,   286,     0,     0,
    2260        0,     0,     0,   167,     0,     0,     0,     0,     0,     0,
    2261      213,     0,     0,     0,     0,     0,   586,     0,     0,   370,
    2262        0,   591,     0,   287,   213,     0,     0,     0,     0,   288,
    2263        0,   510,     0,   289,     0,     0,   290,   291,   292,   293,
    2264       41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
    2265      636,    43,     0,     0,   637,   638,     0,   640,     0,     0,
    2266        0,     0,   598,     0,   652,   653,   507,   654,   655,     0,
    2267      656,     0,   657,     0,     0,    46,    47,   298,   299,   300,
    2268      301,     0,     0,   370,   370,     0,     0,     0,     0,   586,
    2269        0,     0,     0,     0,   510,   510,     0,   672,     0,     0,
     2423       0,     0,     0,     0,   295,     0,  1055,   364,   364,   172,
     2424       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
     2425       0,     0,  1056,     0,     0,     0,     0,  -126,     0,     0,
     2426       0,     0,     1,     2,   207,     4,     5,     6,     7,     8,
     2427       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2428      19,    20,    21,    22,    23,    24,    25,     0,   509,    26,
     2429      27,    28,    29,     0,     0,    30,   283,   284,    31,   285,
     2430       0,     0,     0,     0,   509,     0,     0,     0,     0,     0,
    22702431       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2271        0,     0,     0,     0,     0,     0,   213,     0,     0,     0,
    2272      128,     0,   683,     0,     0,     0,     0,     0,     0,     0,
     2432       0,     0,     0,     0,     0,   286,    34,     0,    35,     0,
     2433      36,   287,     0,    38,    39,   288,     0,     0,   289,   290,
     2434     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
     2435       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
     2436       0,     0,     0,     0,     0,     0,     0,     0,   295,     0,
     2437      44,     0,     0,     0,   509,   509,    45,    46,   297,   298,
     2438     299,   300,     0,     2,   207,     4,     5,     6,     7,     8,
     2439       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2440      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2441      27,    28,     0,     0,     0,     0,   283,   284,    31,   285,
     2442       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2443      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2444      25,  -292,     0,     0,   414,   286,    34,     0,    35,     0,
     2445      36,   287,    31,    38,    39,   288,     0,     0,   289,   290,
     2446     291,   292,    41,    42,     0,   293,   294,     0,   414,   414,
    22732447       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2274        0,     0,     0,   525,     0,     0,     0,     0,   709,     0,
    2275        0,     0,     0,     0,   712,     0,     0,  -520,     0,   465,
    2276        1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
     2448      34,     0,     0,     0,     0,     0,     0,     0,   295,     0,
     2449     343,  -292,     0,   414,     0,   757,   344,    46,   297,   298,
     2450     299,   300,     2,   207,     4,     5,     6,     7,     8,     9,
     2451      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2452      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2453      28,     0,     0,     0,     0,   283,   284,    31,   285,     8,
     2454       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2455      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
     2456      27,    28,     0,     0,   286,    34,     0,    35,    31,    36,
     2457     287,     0,    38,    39,   288,     0,     0,   289,   290,   291,
     2458     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
     2459       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
     2460       0,   111,     0,    38,    39,     0,     0,   295,     0,   962,
     2461       0,     0,    41,    42,   757,   344,    46,   297,   298,   299,
     2462     300,     2,   207,     4,     5,     6,     7,     8,     9,    10,
    22772463      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    22782464      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2279       29,     0,     0,    30,     0,   749,    31,    32,     0,     0,
    2280        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2281      768,     0,   717,     0,   213,     0,     0,     0,     0,     0,
    2282        0,    33,     0,     0,    34,     0,    35,     0,    36,    37,
    2283        0,    38,    39,    40,     0,     0,     0,     0,     0,     0,
    2284       41,    42,     0,     0,     0,     0,     0,     0,   795,     0,
    2285        0,    43,   128,     0,   220,     0,     0,   805,     0,   342,
    2286      365,     0,     0,     0,   807,     0,    44,     0,    45,     0,
    2287      815,     0,     0,     0,     0,    46,    47,     0,     0,   829,
    2288        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2289        0,   717,     0,   415,     0,     0,     0,     0,     0,     0,
    2290      415,     0,     0,     0,     0,   510,     0,     0,     0,     0,
    2291        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2292      869,     0,     0,   510,     0,     0,     0,     0,     0,     0,
    2293        0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
    2294        0,     0,     0,   370,   370,     0,     0,     0,     0,     0,
    2295        0,     0,   220,     0,     0,     0,   815,     0,     0,     0,
    2296      287,     0,     0,     0,   911,     0,   288,     0,     0,     0,
    2297      289,     0,   415,   290,   291,   292,   293,    41,    42,     0,
    2298      294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
    2299        0,     0,     0,     0,     0,   253,   510,   510,     0,     0,
    2300        0,     0,     0,   296,     0,   948,   949,     0,     0,     0,
    2301        0,     0,    46,    47,   298,   299,   300,   301,     0,   966,
    2302        0,     0,     0,     0,     0,     0,   415,     0,     0,     0,
    2303        0,     0,     0,     0,   415,   582,     0,   415,   585,     0,
    2304      988,     0,   989,     0,     0,     0,   993,     0,   365,     0,
    2305        0,     0,   614,     0,     0,     0,     0,     0,     0,     0,
    2306        0,     0,     0,     0,     0,     0,     0,     0,   370,     0,
    2307      213,   632,     0,     0,   342,     8,     9,    10,    11,    12,
    2308       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2309       23,    24,    25,  -295,     0,    26,    27,    28,     0,     0,
    2310        0,   415,     0,     0,    31,   415,     0,     0,     0,     0,
    2311        0,  1027,     0,     0,     0,     0,     0,     0,  1028,     0,
    2312        0,     0,     0,     0,     0,     0,   525,     0,   525,     0,
    2313        0,  1030,    34,  1031,     0,     0,   365,    37,     0,   337,
    2314      338,    40,     0,  -295,     0,     0,     0,  1043,    41,    42,
    2315        0,     0,     0,     0,  1047,     0,     0,     0,     0,    43,
    2316        0,     0,     0,   525,   322,   525,  1085,     0,     0,  1086,
    2317        0,     0,     0,     0,   347,     0,   339,     0,     0,     0,
    2318        0,     0,   415,    46,    47,   365,   383,   383,     0,     0,
    2319        0,     0,     0,   167,   207,     2,   208,     4,     5,     6,
    2320        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2321       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2322        0,    26,    27,    28,   415,     0,     0,     0,   342,   365,
    2323       31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2324        0,     0,     0,     0,     0,     0,     0,     0,   591,     0,
    2325        0,     0,     0,     0,     0,     0,     0,   322,    34,     0,
    2326       35,     0,    36,     0,     0,   209,    39,     0,     0,     0,
    2327        0,     0,     0,   415,   415,     0,     0,     0,     0,     0,
    2328        0,   479,     0,     0,  1159,    43,     0,     0,     0,     0,
    2329        0,     0,   809,   365,     0,     0,     0,     0,     0,     0,
    2330        0,     0,   210,   614,     0,   614,   614,     0,     0,    46,
    2331       47,     0,   614,     0,     0,     0,     0,     0,     0,     0,
    2332        0,     0,   848,   365,     0,     0,     0,     0,   365,     0,
    2333        0,     0,     0,     0,     0,     0,     0,   365,   365,   365,
    2334        0,     0,   527,     0,     0,     0,     0,     0,  1224,     0,
    2335        0,     0,     0,     0,     0,     0,   365,     0,     0,     0,
    2336        0,   415,   891,     0,     0,   415,   894,     0,     0,     0,
    2337        0,     0,   896,     0,     0,     0,     0,     0,     0,     0,
    2338        0,     0,  1236,     0,     0,     0,     0,  1238,     0,     0,
    2339        0,   415,     0,     0,     0,  1242,     0,   383,     0,     0,
    2340        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2341        0,     0,     0,     0,   365,   614,     0,     0,     0,     0,
    2342        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2343        0,  1271,     0,     0,     0,     0,     0,     0,     0,     0,
    2344        0,     0,     0,  1279,     0,     0,  1280,     0,  1281,     0,
    2345      342,   365,     0,     0,     0,   415,   415,     0,     0,     0,
    2346        0,     0,  1290,  1291,     0,     0,     0,     0,     0,     0,
    2347        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2348        0,     0,     0,     0,  1304,     0,     0,     0,     0,     0,
    2349        0,   711,   284,   285,     0,   286,     0,     0,     0,     0,
    2350        0,   415,     0,     0,     0,     0,     0,     0,     0,   365,
    2351        0,     0,     0,     0,     0,     0,   809,   365,     0,     0,
    2352      614,   287,   614,     0,     0,     0,     0,   288,     0,     0,
    2353      745,   289,   614,  1345,   290,   291,   292,   293,    41,    42,
    2354        0,   294,   295,   762,     0,     0,     0,     0,   745,    43,
    2355        0,   745,     0,     0,     0,     0,     0,     0,     0,     0,
    2356        0,     0,   772,   773,   296,     0,   380,     0,     0,     0,
    2357        0,   761,     0,    46,    47,   298,   299,   300,   301,     0,
    2358        0,     0,     0,     0,     0,   794,     0,     0,     0,     0,
    2359        0,     0,     0,     0,     0,   803,     0,     0,     0,     0,
    2360        0,     0,   347,     0,     0,   809,     0,   762,     0,  1396,
    2361        0,  1397,   342,   365,   415,     0,   415,     0,     0,     0,
    2362      415,     0,     0,     0,     0,  1407,     0,  1408,     0,     0,
    2363        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2364        0,   614,   614,     0,     0,  1415,     0,     0,     0,     0,
    2365        0,     0,     0,     0,     0,     0,   868,     0,     0,     0,
    2366        0,  1433,  1435,     0,     0,   383,     0,     0,   365,     0,
    2367        0,     0,  1440,     0,     0,  1242,     0,     0,   415,     8,
    2368        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2369       19,    20,    21,    22,    23,    24,    25,  -295,  1464,     0,
    2370      415,  1156,     0,     0,     0,     0,     0,  1471,    31,     0,
    2371     1473,   365,  1475,  1477,  1479,     0,     0,   415,  1168,     0,
    2372      614,   614,  1173,     0,     0,     0,     0,     0,     0,     0,
    2373        0,     0,   365,   365,     0,     0,    34,     0,     0,     0,
    2374        0,     0,     0,     0,     0,     0,     0,  -295,     0,     0,
    2375        0,     0,     0,     0,  1510,     0,  1512,     0,  1242,     0,
    2376        0,     0,     0,     0,     0,   762,     0,   972,     0,     0,
    2377        0,     0,     0,     0,  1524,     0,     0,   983,     0,     0,
    2378        0,     0,     0,     0,   992,     0,     0,     0,     0,     0,
    2379        0,     0,     0,     0,     0,   415,     0,   415,     0,     0,
    2380        0,     0,   415,     0,     0,     0,     0,     0,     0,     0,
    2381        0,   614,     0,     0,     0,     0,     0,     0,     0,  1175,
    2382        0,     0,     8,     9,    10,    11,    12,  1010,  1011,     0,
    2383        0,   347,     0,     0,     0,     0,   809,   415,  1258,     0,
    2384        0,     0,     0,     0,     0,   347,     0,     0,     0,   284,
    2385      285,    31,   286,     0,     0,     0,     0,     0,     0,     0,
    2386        0,   365,     0,     0,     0,     0,     0,     0,     0,     0,
    2387        0,     0,     0,     0,     0,     0,     0,     0,   287,    34,
    2388        0,     0,     0,     0,   288,  1041,     0,     0,   289,   383,
    2389        0,   290,   291,   292,   293,    41,    42,     0,   294,   295,
    2390        0,     0,     0,     0,     0,     0,    43,     0,     0,     0,
    2391        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2392        0,   296,   342,   380,     0,     0,     0,   347,     0,     0,
    2393     1176,    47,   298,   299,   300,   301,     0,     0,     0,     0,
    2394      365,     2,   208,     4,     5,     6,     7,     8,     9,    10,
    2395       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2396       21,    22,    23,    24,    25,     0,   322,    26,    27,    28,
    2397        0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
    2398        0,     0,  1132,  1133,     0,     0,     0,     0,     0,     0,
    2399        0,     0,   365,   365,     0,     0,   383,     0,     0,     0,
    2400        0,     0,   983,   287,    34,  1147,    35,   745,    36,   288,
    2401        0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
    2402       41,    42,     0,   294,   295,     0,     0,     0,  1163,     0,
    2403        0,    43,     0,     0,     0,     0,     0,     0,     0,  1178,
    2404        0,   284,   285,     0,   286,     0,   296,     0,   344,     0,
    2405        0,     0,     0,   761,     0,   345,    47,   298,   299,   300,
    2406      301,   383,     0,  1196,     0,     0,     0,     0,     0,     0,
    2407      287,     0,     0,     0,     0,     0,   288,     0,   983,   983,
    2408      289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
    2409      294,   295,     0,     0,     0,     0,     0,     0,    43,  1228,
    2410        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2411        0,     0,     0,   296,     0,   380,     0,   365,   980,     0,
    2412        0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
    2413        0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
     2465       0,     0,     0,     0,   283,   284,    31,   285,     8,     9,
    24142466      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2415       20,    21,    22,    23,    24,    25,   983,     0,    26,    27,
    2416       28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
    2417        0,     0,     0,     0,     0,   868,     0,     0,     0,     0,
    2418        0,   284,   285,     0,   286,     0,     0,     0,     0,     0,
    2419     1282,  1283,    33,     0,     0,    34,     0,    35,     0,    36,
    2420       37,     0,    38,    39,    40,     0,     0,   415,     0,     0,
    2421      287,    41,    42,     0,     0,     0,   288,     0,     0,     0,
    2422      289,     0,    43,   290,   291,   292,   293,    41,    42,     0,
    2423      294,   295,   415,   415,     0,     0,     0,    44,    43,    45,
    2424        0,     0,     0,  -524,     0,     0,    46,    47,     0,     0,
    2425        0,     0,     0,   296,     0,   380,     0,   415,     0,     0,
    2426        0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
    2427      983,     0,     1,     2,   208,     4,     5,     6,     7,     8,
    2428        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2429       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2430       27,    28,    29,     0,     0,    30,   284,   285,    31,  1050,
    2431     1051,     0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,
    2432     1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
    2433     1062,  1063,     0,    33,  1390,   287,    34,   745,    35,     0,
    2434       36,  1064,     0,    38,    39,   289,     0,     0,   290,   291,
    2435      292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
    2436        0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
    2437        0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
    2438     1065,     0,     0,   173,     0,     0,     0,    46,    47,   298,
    2439      299,   300,   301,     0,     0,     0,     0,  1066,     0,     0,
    2440        0,  -130,     0,     0,     0,     0,     0,     0,     0,     0,
    2441        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2442        0,  1449,     0,     0,     0,     0,     0,     0,     1,     2,
    2443      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2444       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2445       23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
    2446        0,    30,   284,   285,    31,   286,     8,     9,    10,    11,
     2467      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2468      28,     0,     0,   286,    34,     0,    35,    31,    36,   287,
     2469       0,    38,    39,   288,     0,     0,   289,   290,   291,   292,
     2470      41,    42,     0,   293,   294,     0,     0,     0,     0,     0,
     2471       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
     2472       0,     0,    38,    39,     0,     0,   295,     0,   962,     0,
     2473       0,     0,     0,   757,    45,    46,   297,   298,   299,   300,
     2474       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
    24472475      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    24482476      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2449        0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
    2450       39,   289,     0,  1516,   290,   291,   292,   293,    41,    42,
    2451        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
    2452        0,     0,     0,    34,     0,     0,     0,     0,   112,     0,
    2453       38,    39,     0,     0,   296,     0,  1065,     0,     0,    41,
    2454       42,     0,     0,    46,    47,   298,   299,   300,   301,     0,
    2455        0,     0,     0,     0,     0,     0,   322,  -130,     1,     2,
    2456      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2457       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2458       23,    24,    25,     0,     0,    26,    27,    28,    29,     0,
    2459        0,    30,   284,   285,    31,   286,     0,     0,     0,     8,
    2460        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2461       19,    20,    21,    22,    23,    24,    25,  -296,     0,     0,
    2462        0,   287,    34,     0,    35,     0,    36,   288,    31,    38,
    2463       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2464        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
    2465        0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
    2466        0,     0,     0,     0,   296,     0,    45,  -296,     0,     0,
    2467        0,     0,     0,    46,    47,   298,   299,   300,   301,     2,
    2468      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2477       0,     0,     0,   283,   284,    31,   285,     8,     9,    10,
     2478      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2479      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2480       0,     0,   286,    34,     0,    35,    31,    36,   287,     0,
     2481      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
     2482      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
     2483       0,     0,     0,     0,    34,     0,     0,     0,     0,     0,
     2484       0,   208,    39,     0,     0,   295,     0,   343,     0,     0,
     2485       0,     0,     0,   344,    46,   297,   298,   299,   300,     2,
     2486     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    24692487      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    24702488      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2471        0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
    2472       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2473       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2474        0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
    2475       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2476        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
    2477        0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
    2478       38,    39,     0,     0,   296,     0,   971,     0,     0,     0,
    2479        0,   761,     0,   345,    47,   298,   299,   300,   301,     2,
    2480      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2481       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2482       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2483        0,     0,   284,   285,    31,   286,     8,     9,    10,    11,
    2484       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2485       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2486        0,   287,    34,     0,    35,    31,    36,   288,     0,    38,
    2487       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2488        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
    2489        0,     0,     0,    34,     0,     0,     0,     0,     0,     0,
    2490      209,    39,     0,     0,   296,     0,   971,     0,     0,     0,
    2491        0,   761,     0,    46,    47,   298,   299,   300,   301,     2,
    2492      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2493       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2494       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2495        0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
     2489       0,     0,   283,   284,    31,   285,     0,     0,     0,     0,
    24962490       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    24972491       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2498        0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
    2499       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2500        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
     2492       0,   286,    34,     0,    35,     0,    36,   287,     0,   208,
     2493      39,   288,     0,     0,   289,   290,   291,   292,    41,    42,
     2494       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
    25012495       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2502        0,     0,     0,     0,   296,     0,   344,     0,     0,     0,
    2503        0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
    2504      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2505       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2506       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2507        0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
     2496       0,     0,     0,     0,   295,     0,   997,     0,     0,     0,
     2497       0,     0,   998,    46,   297,   298,   299,   300,     2,   207,
     2498       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2499      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2500      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
     2501       0,   283,   284,    31,   285,     0,     0,     0,     0,     0,
    25082502       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25092503       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2510        0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
    2511       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2512        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
     2504     286,    34,     0,    35,     0,    36,   287,     0,    38,    39,
     2505     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
     2506     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
    25132507       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2514        0,     0,     0,     0,   296,     0,  1007,     0,     0,     0,
    2515        0,     0,     0,  1008,    47,   298,   299,   300,   301,     2,
    2516      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2517       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2518       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2519        0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
     2508       0,     0,     0,   295,     0,   962,     0,     0,     0,     0,
     2509       0,   344,    46,   297,   298,   299,   300,     2,   207,     4,
     2510       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2511      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2512      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2513     283,   284,    31,   285,     0,     0,     0,     0,     0,     0,
    25202514       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2515       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
     2516      34,     0,    35,     0,    36,   287,     0,   208,    39,   288,
     2517       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
     2518     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25212519       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2522        0,   287,    34,     0,    35,     0,    36,   288,     0,    38,
    2523       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2524        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
    2525        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2526        0,     0,     0,     0,   296,     0,   971,     0,     0,     0,
    2527        0,     0,     0,   345,    47,   298,   299,   300,   301,     2,
    2528      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2529       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2530       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2531        0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
    2532        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2533        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2534        0,   287,    34,     0,    35,     0,    36,   288,     0,   209,
    2535       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2536        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
    2537        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2538        0,     0,     0,     0,   296,     0,   380,     0,     0,     0,
    2539        0,     0,     0,    46,    47,   298,   299,   300,   301,     1,
     2520       0,     0,   295,     0,   379,     0,     0,     0,     0,     0,
     2521      45,    46,   297,   298,   299,   300,  -515,     0,     0,     1,
    25402522       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    25412523      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     
    25472529      38,    39,    40,     0,     0,     0,     0,     0,     0,    41,
    25482530      42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2549       43,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2550        0,     0,     0,     0,     0,    44,     0,    45,     0,     0,
    2551        0,     0,     0,     0,    46,    47,   207,     2,   208,     4,
     2531       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2532       0,     0,     0,     0,     0,    43,     0,    44,     0,     0,
     2533       0,     0,     0,    45,    46,     1,     2,     3,     4,     5,
     2534       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2535      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2536       0,     0,    26,    27,    28,    29,     0,     0,    30,     0,
     2537       0,    31,    32,     0,     0,     0,     0,     0,     0,     0,
     2538       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2539       0,     0,     0,     0,     0,     0,    33,     0,     0,    34,
     2540       0,    35,     0,    36,    37,     0,    38,    39,    40,     0,
     2541       0,     0,     0,     0,     0,    41,    42,     0,     0,     0,
     2542       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2543       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2544       0,    43,     0,    44,     0,     0,     0,  -519,     0,    45,
     2545      46,     1,     2,     3,     4,     5,     6,     7,     8,     9,
     2546      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2547      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2548      28,    29,     0,     0,    30,     0,     0,    31,    32,     0,
     2549       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2550       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2551       0,     0,    33,     0,     0,    34,     0,    35,     0,    36,
     2552      37,     0,    38,    39,    40,     0,     0,     0,     0,     0,
     2553       0,    41,    42,     0,     0,     0,     0,     0,     0,     0,
     2554       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2555       0,     0,     0,     0,     0,     0,     0,    43,     0,    44,
     2556       0,     0,     0,     0,     0,    45,    46,     1,     2,   207,
     2557       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2558      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2559      24,    25,     0,     0,    26,    27,    28,    29,     0,     0,
     2560      30,     0,     0,    31,     0,     0,     0,     0,     0,     0,
     2561       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2562       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2563       0,    34,     0,    35,     0,    36,     0,     0,    38,    39,
     2564       0,     2,   207,     4,     5,     6,     7,     8,     9,    10,
     2565      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2566      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2567       0,     0,     0,     0,     0,    44,    31,     0,     0,     0,
     2568       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
     2569       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2570       0,     0,     0,     0,    34,     0,    35,     0,    36,    37,
     2571       0,   208,    39,    40,     0,     0,     0,     0,     0,     0,
     2572      41,    42,     0,     0,     0,     0,     0,     0,     0,     0,
     2573       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2574       0,     0,     0,     0,     0,     0,    43,     0,   209,     0,
     2575       0,     0,     0,     0,    45,    46,     2,   207,     4,     5,
     2576       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2577      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2578       0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
     2579       0,    31,     0,     0,     0,     0,     8,     9,    10,    11,
     2580      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2581      22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
     2582       0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
     2583     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2584      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2585      23,    24,    25,    34,     0,    26,    27,    28,     0,     0,
     2586      38,    39,  -399,   677,    31,     0,     0,     0,     0,    45,
     2587      46,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2588       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2589       0,     0,    34,     0,    35,   634,    36,   338,     0,    38,
     2590      39,     0,     0,    45,    46,     0,     0,     0,     0,     0,
     2591       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2592       0,  1350,     0,     0,     0,     0,     0,     0,     0,     0,
     2593       0,     0,     0,     0,     0,     0,   677,     0,     0,     0,
     2594       0,     0,    45,    46,     2,   207,     4,     5,     6,     7,
     2595       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2596      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2597      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
     2598       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2599      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2600      25,     0,     0,    26,    27,    28,     0,    34,     0,    35,
     2601       0,    36,    31,   684,    38,    39,     0,     0,     0,     0,
     2602       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2603       0,     0,     0,     0,     0,     0,  1352,     0,     0,     0,
     2604      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
     2605       0,   677,     0,     0,     0,     0,     0,    45,    46,     2,
     2606     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2607      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2608      23,    24,    25,     0,   685,    26,    27,    28,  1091,     0,
     2609      45,    46,     0,     0,    31,     0,     0,     0,     0,     0,
     2610       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2611       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2612       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
     2613      39,     0,     2,   207,     4,     5,     6,     7,     8,     9,
     2614      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2615      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2616      28,     0,     0,     0,     0,     0,   271,    31,     0,     0,
     2617       0,     0,    45,    46,     0,     0,     0,     0,     0,     0,
     2618       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2619       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
     2620       0,     0,    38,    39,     0,     2,   207,     4,     5,     6,
     2621       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2622      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2623       0,    26,    27,    28,     0,     0,     0,     0,     0,   677,
     2624      31,     0,     0,     0,     0,    45,    46,     0,     0,     0,
     2625       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2626       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
     2627      35,     0,    36,     0,     0,    38,    39,     0,     2,   207,
     2628       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2629      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2630      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
     2631       0,     0,   592,    31,     0,     0,     0,     0,    45,    46,
     2632       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2633       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2634       0,    34,     0,    35,     0,    36,     0,     0,   208,    39,
     2635       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2636      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2637      26,    27,    28,     0,     0,     0,     0,   283,   284,    31,
     2638     285,     0,     0,     0,     0,   209,     0,     0,     0,     0,
     2639       0,    45,    46,     0,     0,     0,     0,     0,     0,     0,
     2640       0,     0,     0,     0,     0,     0,   286,    34,     0,     0,
     2641       0,     0,   287,     0,    38,    39,   288,     0,     0,   289,
     2642     290,   291,   292,    41,    42,     0,   293,   294,     0,     0,
     2643       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2644       0,     0,     0,     0,     0,     0,     0,     0,     0,   295,
     2645       0,   517,     0,     0,   172,     0,     0,    45,    46,   297,
     2646     298,   299,   300,     8,     9,    10,    11,    12,    13,    14,
     2647      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2648      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2649     283,   284,    31,   285,     8,     9,    10,    11,    12,    13,
     2650      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2651      24,    25,     0,     0,    26,    27,    28,     0,     0,   286,
     2652      34,     0,     0,    31,     0,   287,     0,    38,    39,   288,
     2653       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
     2654     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2655       0,    34,     0,     0,     0,     0,    37,     0,   336,   337,
     2656      40,     0,   295,   -35,   296,     0,     0,    41,    42,     0,
     2657      45,    46,   297,   298,   299,   300,     8,     9,    10,    11,
     2658      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2659      22,    23,    24,    25,     0,   338,    26,    27,    28,     0,
     2660       0,    45,    46,   283,   284,    31,   285,     8,     9,    10,
     2661      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2662      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
     2663       0,     0,   286,    34,     0,     0,    31,     0,   287,     0,
     2664      38,    39,   288,     0,     0,   289,   290,   291,   292,    41,
     2665      42,     0,   293,   294,     0,     0,     0,     0,     0,     0,
     2666       0,     0,     0,     0,    34,     0,     0,     0,     0,   111,
     2667       0,    38,    39,     0,     0,   295,     0,   296,     0,     0,
     2668      41,    42,     0,    45,    46,   297,   298,   299,   300,     8,
     2669       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2670      19,    20,    21,    22,    23,    24,    25,     0,    44,    26,
     2671      27,    28,     0,     0,    45,    46,   283,   284,    31,   285,
     2672       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2673      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2674      26,    27,    28,     0,     0,   286,    34,     0,     0,    31,
     2675     684,   287,     0,    38,    39,   288,     0,     0,   289,   290,
     2676     291,   292,    41,    42,     0,   293,   294,     0,     0,     0,
     2677       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
     2678       0,     0,     0,     0,    38,    39,     0,     0,   295,     0,
     2679     158,     0,     0,     0,     0,     0,    45,    46,   297,   298,
     2680     299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
     2681      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2682       0,   685,    26,    27,    28,  1220,     0,    45,    46,   283,
     2683     284,    31,   285,     8,     9,    10,    11,    12,    13,    14,
     2684      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2685      25,     0,     0,    26,    27,    28,     0,     0,   286,    34,
     2686       0,     0,    31,     0,   287,     0,    38,    39,   288,     0,
     2687       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
     2688       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2689      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
     2690       0,   295,     0,   592,     0,     0,     0,     0,     0,    45,
     2691      46,   297,   298,   299,   300,     8,     9,    10,    11,    12,
     2692      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2693      23,    24,    25,     0,   258,    26,    27,    28,     0,     0,
     2694      45,    46,   283,   284,    31,   285,     0,     0,     0,     0,
     2695       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2696      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2697      25,   286,    34,    26,    27,    28,     0,   287,     0,    38,
     2698      39,   288,    31,     0,   289,   290,   291,   292,    41,    42,
     2699       0,   293,   294,     0,     0,     0,     0,     0,     0,     0,
     2700       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2701      34,     0,     0,     0,   295,     0,   379,    38,    39,     0,
     2702       0,     0,    45,    46,   297,   298,   299,   300,   467,     2,
     2703     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2704      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2705      23,    24,    25,     0,   158,    26,    27,    28,     0,     0,
     2706      45,    46,     0,     0,    31,     0,     0,     0,     8,     9,
     2707      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2708      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2709      28,     0,    34,     0,    35,     0,    36,    31,     0,    38,
     2710      39,     0,     0,     0,     0,     0,     8,     9,    10,    11,
     2711      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2712      22,    23,    24,    25,     0,    34,    26,    27,    28,     0,
     2713      37,     0,    38,    39,    40,    31,     0,     0,     0,    -3,
     2714       0,    41,    42,     0,     8,     9,    10,    11,    12,    13,
     2715      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2716      24,    25,     0,    34,    26,    27,    28,    43,    37,   158,
     2717      38,    39,    40,    31,     0,    45,    46,     0,     0,    41,
     2718      42,     0,     8,     9,    10,    11,    12,    13,    14,    15,
     2719      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     2720       0,    34,    26,    27,    28,    43,    37,    44,   208,    39,
     2721      40,    31,     0,    45,    46,     0,     0,    41,    42,     0,
     2722       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2723      18,    19,    20,    21,    22,    23,    24,    25,  -291,    34,
     2724      26,    27,    28,    43,    37,   271,   336,   337,    40,    31,
     2725       0,    45,    46,     0,     0,    41,    42,     0,     8,     9,
     2726      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2727      20,    21,    22,    23,    24,    25,  -291,    34,    26,    27,
     2728      28,   634,     0,   338,    38,    39,     0,    31,  -291,    45,
     2729      46,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2730      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2731       0,    26,    27,    28,     0,    34,     0,     0,     0,   634,
     2732      31,   338,    38,    39,     0,     0,  -291,    45,    46,     8,
     2733       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2734      19,    20,    21,    22,    23,    24,    25,     0,    34,    26,
     2735      27,    28,     0,     0,     0,   208,    39,     0,    31,   338,
     2736       0,     0,     0,     0,     0,    45,    46,     8,     9,    10,
     2737      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2738      21,    22,    23,    24,    25,     0,    34,    26,    27,    28,
     2739       0,     0,   271,    38,    39,     0,    31,     0,    45,    46,
     2740       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2741      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
     2742      26,    27,    28,     0,    34,     0,     0,     0,     0,    31,
     2743     338,    38,    39,     0,     0,     0,    45,    46,     8,     9,
     2744      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2745      20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
     2746      28,     0,     0,     0,    38,    39,     0,    31,   685,     0,
     2747       0,     0,     0,     0,    45,    46,     0,     0,     0,     0,
     2748       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2749       0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
     2750       0,   592,    38,    39,     0,     0,     0,    45,    46,     2,
     2751     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2752      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2753      23,    24,    25,     0,     0,    26,    27,    28,     0,    44,
     2754       0,     0,     0,     0,    31,    45,    46,     0,     0,     0,
     2755       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2756       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2757       0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
     2758      39,   283,   284,     0,   285,  1041,     0,  1042,     0,     0,
     2759    1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,
     2760    1524,  1051,     0,     0,     0,  1052,  1053,     0,    33,     0,
     2761     286,     0,     0,     0,     0,  -412,  1054,     0,     0,     0,
     2762     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
     2763     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
     2764       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2765       0,     0,     0,   295,     0,   379,     0,     0,   172,     0,
     2766       0,    45,    46,   297,   298,   299,   300,     0,     0,   283,
     2767     284,  1056,   285,  1041,     0,  1042,  -126,     0,  1043,  1044,
     2768    1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,
     2769       0,     0,     0,  1052,  1053,     0,    33,     0,   286,     0,
     2770       0,     0,     0,     0,  1054,     0,     0,     0,   288,     0,
     2771       0,   289,   290,   291,   292,    41,    42,     0,   293,   294,
     2772       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2773       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2774       0,   295,     0,   379,     0,     0,   172,     0,     0,    45,
     2775      46,   297,   298,   299,   300,     0,     0,     0,     0,  1056,
     2776       0,     0,     0,     0,  -126,     2,   207,     4,     5,     6,
     2777       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2778      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2779       0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
     2780      31,     0,   283,   284,     0,   285,  1041,     0,  1042,  1398,
     2781    1399,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,
     2782       0,  1524,  1051,     0,     0,     0,  1052,  1053,    34,    33,
     2783      35,   286,    36,     0,     0,    38,    39,  1054,     0,     0,
     2784       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
     2785       0,   293,   294,     0,     0,     0,     0,  1311,     0,     0,
     2786       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2787       0,     0,     0,     0,   295,     0,   379,     0,     0,   172,
     2788       0,     0,    45,    46,   297,   298,   299,   300,     0,     0,
     2789     283,   284,  1056,   285,  1041,     0,  1042,  1398,  1399,  1043,
     2790    1044,  1045,  1046,  1047,  1048,  1049,  1050,     0,     0,     0,
     2791    1051,     0,     0,     0,  1052,  1053,     0,    33,     0,   286,
     2792       0,     0,     0,     0,     0,  1054,     0,     0,     0,   288,
     2793       0,     0,   289,   290,   291,   292,    41,    42,     0,   293,
     2794     294,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2795       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2796       0,     0,   295,     0,   379,     0,     0,   172,     0,     0,
     2797      45,    46,   297,   298,   299,   300,     0,     0,   283,   284,
     2798    1056,   285,  1041,     0,  1042,     0,     0,  1043,  1044,  1045,
     2799    1046,  1047,  1048,  1049,  1050,     0,     0,     0,  1051,     0,
     2800       0,     0,  1052,  1053,     0,    33,     0,   286,     0,     0,
     2801       0,     0,     0,  1054,     0,     0,     0,   288,     0,     0,
     2802     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
     2803       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
     2804       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2805     295,     0,   379,     0,     0,   172,     0,     0,    45,    46,
     2806     297,   298,   299,   300,   286,     0,     0,     0,  1056,     0,
     2807     640,     0,   140,   141,   288,     0,     0,   289,   290,   291,
     2808     292,    41,    42,     0,   293,   294,     0,     0,     0,     0,
     2809       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
     2810       0,     0,     0,     0,     0,     0,     0,   295,     0,   641,
     2811       0,   642,   380,     0,     0,    45,    46,   297,   298,   299,
     2812     300,   286,     0,     0,     0,     0,     0,   287,     0,     0,
     2813       0,   288,     0,     0,   289,   290,   291,   292,    41,    42,
     2814       0,   293,   294,     0,     0,     0,     0,     0,     0,   283,
     2815     284,     0,   285,     0,     0,     0,     0,     0,     0,     0,
     2816       0,     0,     0,     0,   295,     0,   379,     0,   283,   284,
     2817       0,   285,   708,    46,   297,   298,   299,   300,   286,     0,
     2818       0,     0,     0,     0,   287,     0,     0,     0,   288,     0,
     2819       0,   289,   290,   291,   292,    41,    42,   286,   293,   294,
     2820       0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
     2821     289,   290,   291,   292,    41,    42,     0,   293,   294,     0,
     2822       0,   295,     0,   379,     0,   283,   284,     0,   285,   344,
     2823      46,   297,   298,   299,   300,     0,     0,     0,     0,     0,
     2824     506,     0,     0,     0,   283,   284,     0,   285,    45,    46,
     2825     297,   298,   299,   300,   286,     0,     0,     0,     0,     0,
     2826     287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
     2827     292,    41,    42,   286,   293,   294,     0,     0,     0,   287,
     2828       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
     2829      41,    42,     0,   293,   294,     0,     0,   295,     0,     0,
     2830       0,   283,   284,     0,   285,    45,    46,   297,   298,   299,
     2831     300,     0,     0,     0,     0,     0,   511,     0,     0,     0,
     2832       0,     0,     0,     0,    45,    46,   297,   298,   299,   300,
     2833     286,     0,     0,     0,     0,     0,   287,     0,     0,     0,
     2834     288,     0,     0,   289,   290,   291,   292,    41,    42,     0,
     2835     293,   294,     0,     0,     0,     0,     0,     0,     0,     0,
     2836       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2837       0,     0,     0,   514,     0,     0,     0,     0,     0,     0,
     2838       0,    45,    46,   297,   298,   299,   300,     2,   207,     4,
    25522839       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    25532840      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2554       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2555        0,     0,    31,     0,     8,     9,    10,    11,    12,    13,
    2556       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2557       24,    25,     0,     0,    26,    27,    28,   486,   487,   488,
    2558       34,     0,    35,    31,    36,    37,     0,   209,    39,    40,
    2559        0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
    2560        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2561        0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
    2562        0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
    2563        0,    46,    47,     1,     2,   208,     4,     5,     6,     7,
    2564        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2565       18,    19,    20,    21,    22,    23,    24,    25,  -295,     0,
    2566       26,    27,    28,    29,     0,     0,    30,     0,     0,    31,
    2567        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2568        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2569        0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
    2570        0,    36,     0,     0,    38,    39,     0,     0,  -295,     0,
    2571        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2572        0,     0,     0,     0,    43,     0,     0,     0,     0,     0,
    2573        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2574        0,    45,     0,     0,     0,     0,     0,     0,    46,    47,
    2575        1,     2,   208,     4,     5,     6,     7,     8,     9,    10,
    2576       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2577       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2578       29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
    2579        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2580        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2581        0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
    2582        0,    38,    39,     0,     0,     0,     0,     0,     0,     0,
    2583        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2584        0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
    2585        0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
    2586        0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
    2587        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2588       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2589       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
     2841      25,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25902842       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
    25912843       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    25922844       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2593       34,     0,    35,     0,    36,    37,     0,   209,    39,    40,
    2594        0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
    2595        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2596        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2597        0,     0,    44,     0,   210,     0,     0,     0,     0,     0,
    2598        0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
    2599        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2600       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2601       27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
    2602        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2603        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2604        0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
    2605       36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
    2606        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2607        0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
    2608        0,     0,     0,     0,     0,     0,     0,     0,     0,  -403,
    2609      679,     0,     0,     0,     0,     0,     0,    46,    47,     2,
    2610      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2845      34,     0,    35,     0,    36,    37,     0,   175,   176,    40,
     2846       0,     0,     0,     0,     0,     0,    41,    42,   206,     2,
     2847     207,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    26112848      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    26122849      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
     
    26142851       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26152852       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2616        0,     0,    34,     0,    35,     0,    36,     0,     0,    38,
    2617       39,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2618        0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
    2619        0,  1369,     0,     0,     0,     0,     0,     0,     0,     0,
    2620        0,     0,     0,     0,     0,     0,   679,     0,     0,     0,
    2621        0,     0,     0,    46,    47,     2,   208,     4,     5,     6,
    2622        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2623       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2624        0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
    2625       31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2626        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2627        0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
    2628       35,     0,    36,     0,     0,    38,    39,     0,     0,     0,
    2629        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2630        0,     0,     0,     0,     0,    43,     0,  1371,     0,     0,
    2631        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2632        0,     0,   679,     0,     0,     0,     0,     0,     0,    46,
    2633       47,     2,   208,     4,     5,     6,     7,     8,     9,    10,
    2634       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2635       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2636        0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
     2853       0,     0,    34,     0,    35,     0,    36,     0,     0,   208,
     2854      39,   467,     2,   207,     4,     5,     6,     7,     8,     9,
     2855      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2856      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
     2857      28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
    26372858       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    26382859       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2639        0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
    2640        0,   209,    39,     0,     0,     0,     0,     0,     0,     0,
    2641        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2642        0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
    2643        0,     0,     0,     0,     0,     0,     0,     0,   272,     0,
    2644        0,     0,     0,     0,     0,    46,    47,     2,   208,     4,
    2645        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2646       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2647       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2648        0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
    2649        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2650        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2651       34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
    2652        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2653        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2654        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2655        0,     0,     0,     0,   679,     0,     0,     0,     0,     0,
    2656        0,    46,    47,     2,   208,     4,     5,     6,     7,     8,
    2657        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2658       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2659       27,    28,     0,     0,     0,     0,     0,     0,    31,     0,
    2660        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2661        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2662        0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
    2663       36,     0,     0,    38,    39,     0,     0,     0,     0,     0,
    2664        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2665        0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
    2666        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2667      593,     0,     0,     0,     0,     0,     0,    46,    47,     2,
    2668      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2669       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2670       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2671        0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
    2672        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2673        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2674        0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
    2675       39,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2676       17,    18,    19,    20,    21,    22,    23,    24,    25,    43,
    2677        0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
    2678       31,   286,     0,     0,     0,     0,   210,     0,     0,     0,
    2679        0,     0,     0,    46,    47,     0,     0,     0,     0,     0,
    2680        0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
    2681        0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
    2682      290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
    2683        0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
    2684        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2685      296,     0,   518,     0,     0,   173,     0,     0,     0,    46,
    2686       47,   298,   299,   300,   301,     8,     9,    10,    11,    12,
    2687       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2688       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2689        0,     0,   284,   285,    31,   286,     0,     0,     0,     0,
    2690        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2691        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2692        0,   287,    34,     0,     0,     0,     0,   641,     0,    38,
    2693       39,   289,     0,     0,   290,   291,   292,   293,    41,    42,
    2694        0,   294,   295,     0,     0,     0,     0,     0,     0,    43,
    2695        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2696        0,     0,     0,     0,   296,   -35,   742,     0,     0,     0,
    2697        0,     0,     0,    46,    47,   298,   299,   300,   301,     8,
    2698        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    2699       19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
    2700       27,    28,     0,     0,     0,     0,   284,   285,    31,   286,
    2701        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2702        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2703        0,     0,     0,     0,     0,   287,    34,     0,     0,     0,
    2704        0,   288,     0,    38,    39,   289,     0,     0,   290,   291,
    2705      292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
    2706        0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
    2707        0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
    2708      297,     0,     0,     0,     0,     0,     0,    46,    47,   298,
    2709      299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
    2710       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2711       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2712      284,   285,    31,   286,     0,     0,     0,     0,     0,     0,
    2713        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2714        0,     0,     0,     0,     0,     0,     0,     0,     0,   287,
    2715       34,     0,     0,     0,     0,   288,     0,    38,    39,   289,
    2716        0,     0,   290,   291,   292,   293,    41,    42,     0,   294,
    2717      295,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2718        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2719        0,     0,   296,     0,   159,     0,     0,     0,     0,     0,
    2720        0,    46,    47,   298,   299,   300,   301,     8,     9,    10,
    2721       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2722       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2723        0,     0,     0,     0,   284,   285,    31,   286,     0,     0,
    2724        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2725        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2726        0,     0,     0,   287,    34,     0,     0,     0,     0,   288,
    2727        0,    38,    39,   289,     0,     0,   290,   291,   292,   293,
    2728       41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
    2729        0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
    2730        0,     0,     0,     0,     0,     0,   296,     0,   593,     0,
    2731        0,     0,     0,     0,     0,    46,    47,   298,   299,   300,
    2732      301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2733       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2734        0,    26,    27,    28,     0,     0,     0,     0,   284,   285,
    2735       31,   286,     0,     0,     0,     0,     0,     0,     0,     0,
    2736        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2737        0,     0,     0,     0,     0,     0,     0,   287,    34,     0,
    2738        0,     0,     0,   288,     0,    38,    39,   289,     0,     0,
    2739      290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
    2740        0,     0,     0,     0,     0,    43,     0,     0,     0,     0,
    2741        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2742      296,     0,   380,     0,     0,     0,     0,     0,     0,    46,
    2743       47,   298,   299,   300,   301,   468,     2,   208,     4,     5,
    2744        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2745       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2746        0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
    2747        0,    31,     0,     0,     0,     8,     9,    10,    11,    12,
    2748       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2749       23,    24,    25,     0,     0,    26,    27,    28,     0,    34,
    2750        0,    35,     0,    36,    31,     0,    38,    39,     0,     0,
    2751        0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
    2752       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2753       25,     0,    34,    26,    27,    28,     0,    37,     0,    38,
    2754       39,    40,    31,     0,     0,     0,    -3,     0,    41,    42,
    2755        0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
    2756        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2757       34,     0,     0,     0,    44,    37,   159,    38,    39,    40,
    2758        0,     0,     0,    46,    47,     0,    41,    42,     0,     0,
    2759        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2760        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2761        0,     0,    44,     0,    45,     0,     0,     0,     0,     0,
    2762        0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
    2763       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2764       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2765        0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
    2766       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2767       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2768       34,     0,    31,     0,     0,    37,     0,   209,    39,    40,
    2769        0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
    2770        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2771       34,     0,     0,     0,     0,    37,     0,   337,   338,    40,
    2772        0,     0,    44,     0,   272,     0,    41,    42,     0,     0,
    2773        0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
    2774        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2775        0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
    2776        0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
    2777       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2778       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2779        0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
    2780       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2781       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2782       34,     0,    31,     0,     0,    37,     0,   337,   338,    40,
    2783        0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
    2784        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2785       34,     0,     0,     0,     0,   112,     0,    38,    39,     0,
    2786        0,     0,     0,     0,   339,     0,    41,    42,     0,     0,
    2787        0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
    2788        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2789        0,     0,     0,     0,    45,     0,     0,     0,     0,     0,
    2790        0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
    2791       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2792       25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
    2793        0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
    2794       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2795       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2796       34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
    2797        0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
    2798        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2799       34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
    2800        0,     0,   635,     0,   339,     0,     0,     0,     0,     0,
    2801        0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
    2802        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2803        0,     0,     0,     0,   687,     0,     0,     0,   688,     0,
    2804        0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
    2805       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2806       25,  -295,     0,    26,    27,    28,     0,     0,     0,     0,
    2807        0,     0,    31,     8,     9,    10,    11,    12,    13,    14,
    2808       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2809       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2810       34,     0,    31,   686,     0,     0,     0,    38,    39,     0,
    2811        0,  -295,     0,     0,     0,     0,     0,     0,     0,     0,
    2812        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2813       34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
    2814        0,     0,     0,     0,   339,     0,     0,     0,     0,     0,
    2815        0,    46,    47,     0,     0,     0,     0,    43,     0,     0,
    2816        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2817        0,     0,     0,     0,   687,     0,     0,     0,  1101,     0,
    2818        0,    46,    47,     8,     9,    10,    11,    12,    13,    14,
    2819       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2820       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2821        0,     0,    31,   686,     8,     9,    10,    11,    12,    13,
    2822       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2823       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2824       34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
    2825        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2826        0,     0,     0,     0,     0,     0,     0,    43,     0,     0,
    2827        0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
    2828        0,     0,     0,     0,   687,     0,     0,     0,  1233,     0,
    2829        0,    46,    47,     0,     0,     0,     0,     0,    43,     0,
    2830        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2831        0,     0,     0,   635,     0,   339,     0,     0,     0,     0,
    2832        0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
    2833       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2834       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2835        0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
    2836       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2837       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2838        0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
    2839        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2840        0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
    2841        0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
    2842        0,     0,     0,     0,     0,   259,     0,     0,     0,     0,
    2843        0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
    2844        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2845        0,     0,     0,     0,     0,   159,     0,     0,     0,     0,
    2846        0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
    2847       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2848       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2849        0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
    2850       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2851       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2852        0,    34,     0,    31,     0,     0,     0,     0,   209,    39,
    2853        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2854        0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
    2855        0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
    2856        0,     0,     0,     0,     0,   272,     0,     0,     0,     0,
    2857        0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
    2858        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2859        0,     0,     0,     0,     0,   339,     0,     0,     0,     0,
    2860        0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
    2861       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2862       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2863        0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
    2864       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2865       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2866        0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
    2867        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2868        0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
    2869        0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
    2870        0,     0,     0,     0,     0,   687,     0,     0,     0,     0,
    2871        0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
    2872        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2873        0,     0,     0,     0,     0,   593,     0,     0,     0,     0,
    2874        0,     0,    46,    47,     8,     9,    10,    11,    12,    13,
    2875       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2876       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2877        0,     0,     0,    31,     8,     9,    10,    11,    12,    13,
    2878       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2879       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2880        0,    34,     0,    31,     0,     0,     0,     0,    38,    39,
    2881        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2882        0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
    2883        0,    34,     0,     0,     0,     0,     0,     0,   209,    39,
    2884        0,     0,     0,     0,     0,    45,     0,     0,     0,     0,
    2885        0,     0,    46,    47,     0,     0,     0,     0,    43,     0,
    2886        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2887        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2888        0,     0,    46,    47,     2,   208,     4,     5,     6,     7,
     2860       0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
     2861       0,     0,    38,    39,     2,   207,     4,     5,     6,     7,
    28892862       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    28902863      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    28912864      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
    2892        0,   284,   285,     0,   286,  1051,     0,  1052,     0,     0,
    2893     1053,  1054,  1055,  1056,  1057,  1058,  1059,  1060,     0,     0,
    2894     1549,  1061,     0,     0,     0,  1062,  1063,    34,    33,    35,
    2895      287,    36,     0,     0,    38,    39,  1064,     0,     0,     0,
    2896      289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
    2897      294,   295,     0,     0,     0,     0,     0,     0,    43,     0,
     2865       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2866      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
     2867       0,    26,    27,    28,   485,   486,   487,    34,     0,    35,
     2868      31,    36,     0,     0,   208,    39,     0,     0,     0,     0,
    28982869       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2899     -416,     0,     0,   296,     0,   380,     0,     0,   173,     0,
    2900        0,     0,    46,    47,   298,   299,   300,   301,     0,     0,
    2901        0,     0,  1066,     0,   284,   285,  -130,   286,  1051,     0,
    2902     1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,  1059,
    2903     1060,     0,     0,     0,  1061,     0,     0,     0,  1062,  1063,
    2904        0,    33,     0,   287,     0,     0,     0,     0,     0,  1064,
    2905        0,     0,     0,   289,     0,     0,   290,   291,   292,   293,
    2906       41,    42,     0,   294,   295,     0,     0,     0,     0,     0,
    2907        0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
    2908        0,     0,     0,     0,     0,     0,   296,     0,   380,     0,
    2909        0,   173,     0,     0,     0,    46,    47,   298,   299,   300,
    2910      301,     0,     0,     0,     0,  1066,     0,     0,     0,  -130,
    2911        2,   208,     4,     5,     6,     7,     8,     9,    10,    11,
    2912       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2913       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2914        0,     0,     0,     0,     0,    31,     0,   284,   285,     0,
    2915      286,  1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,
    2916     1057,  1058,  1059,  1060,     0,     0,  1549,  1061,     0,     0,
    2917        0,  1062,  1063,    34,    33,    35,   287,    36,     0,     0,
    2918       38,    39,  1064,     0,     0,     0,   289,     0,     0,   290,
    2919      291,   292,   293,    41,    42,     0,   294,   295,     0,     0,
    2920        0,     0,  1327,     0,    43,     0,     0,     0,     0,     0,
    2921        0,     0,     0,     0,     0,     0,     0,     0,     0,   296,
    2922        0,   380,     0,     0,   173,     0,     0,     0,    46,    47,
    2923      298,   299,   300,   301,     0,     0,   284,   285,  1066,   286,
    2924     1051,     0,  1052,  1419,  1420,  1053,  1054,  1055,  1056,  1057,
    2925     1058,  1059,  1060,     0,     0,     0,  1061,     0,     0,     0,
    2926     1062,  1063,     0,    33,     0,   287,     0,     0,     0,     0,
    2927        0,  1064,     0,     0,     0,   289,     0,     0,   290,   291,
    2928      292,   293,    41,    42,     0,   294,   295,     0,     0,     0,
    2929        0,     0,     0,    43,     0,     0,     0,     0,     0,     0,
    2930        0,     0,     0,     0,     0,     0,     0,     0,   296,     0,
    2931      380,     0,     0,   173,     0,     0,     0,    46,    47,   298,
    2932      299,   300,   301,     0,     0,   284,   285,  1066,   286,  1051,
    2933        0,  1052,     0,     0,  1053,  1054,  1055,  1056,  1057,  1058,
    2934     1059,  1060,     0,     0,     0,  1061,     0,     0,     0,  1062,
    2935     1063,     0,    33,     0,   287,     0,     0,     0,     0,     0,
    2936     1064,     0,     0,     0,   289,     0,     0,   290,   291,   292,
    2937      293,    41,    42,     0,   294,   295,     0,     0,     0,     0,
    2938        0,     0,    43,   284,   285,     0,   286,     0,     0,     0,
    2939        0,     0,     0,     0,     0,     0,     0,   296,     0,   380,
    2940        0,     0,   173,     0,     0,     0,    46,    47,   298,   299,
    2941      300,   301,   287,     0,     0,     0,  1066,     0,   641,     0,
    2942      141,   142,   289,     0,     0,   290,   642,   292,   293,    41,
    2943       42,     0,   294,   295,     0,     0,     0,     0,     0,     0,
    2944       43,   284,   285,     0,   286,     0,     0,     0,     0,     0,
    2945        0,     0,     0,     0,     0,   296,     0,   643,     0,   644,
    2946      381,     0,     0,     0,    46,    47,   298,   299,   300,   301,
    2947      287,     0,     0,     0,     0,     0,   288,     0,     0,     0,
    2948      289,     0,     0,   290,   291,   292,   293,    41,    42,     0,
    2949      294,   295,     0,     0,     0,     0,     0,     0,    43,   284,
    2950      285,     0,   286,     0,     0,     0,     0,     0,     0,     0,
    2951        0,     0,     0,   296,     0,   380,     0,     0,   284,   285,
    2952        0,   286,   710,    47,   298,   299,   300,   301,   287,     0,
    2953        0,     0,     0,     0,   641,     0,     0,     0,   289,     0,
    2954        0,   290,   291,   292,   293,    41,    42,   287,   294,   295,
    2955        0,     0,     0,   288,     0,     0,    43,   289,     0,     0,
    2956      290,   291,   292,   293,    41,    42,     0,   294,   295,     0,
    2957        0,   296,     0,   765,     0,    43,   284,   285,     0,   286,
    2958       46,    47,   298,   299,   300,   301,     0,     0,     0,     0,
    2959      296,     0,   380,     0,     0,   284,   285,     0,   286,   345,
    2960       47,   298,   299,   300,   301,   287,     0,     0,     0,     0,
    2961        0,   288,     0,     0,     0,   289,     0,     0,   290,   291,
    2962      292,   293,    41,    42,   287,   294,   295,     0,     0,     0,
    2963      288,     0,     0,    43,   289,     0,     0,   290,   291,   292,
    2964      293,    41,    42,     0,   294,   295,     0,     0,   512,     0,
    2965        0,     0,    43,     0,     0,     0,     0,    46,    47,   298,
    2966      299,   300,   301,     0,     0,     0,     0,   515,     0,     0,
    2967        0,     0,     0,     0,     0,     0,    46,    47,   298,   299,
    2968      300,   301,     2,   208,     4,     5,     6,     7,     8,     9,
    2969       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2970       20,    21,    22,    23,    24,    25,     0,     0,     0,     0,
    2971        0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
    2972        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2973        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2974        0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
    2975       37,     0,   176,   177,    40,     0,     0,     0,     0,     0,
    2976        0,    41,    42,   207,     2,   208,     4,     5,     6,     7,
    2977        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2978       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2979       26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
    2980        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2981        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2982        0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
    2983        0,    36,     0,     0,   209,    39,   468,     2,   208,     4,
    2984        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2985       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2986       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2987        0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
    2988        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2989        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2990       34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
    2991      208,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2992       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2993       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2994        0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
    2995        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2996        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2997        0,     0,    34,     0,    35,     0,    36,     0,     0,   209,
    2998       39
     2870       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
     2871       0,     0,     0,     0,     0,    38,    39
    29992872};
    30002873
    30012874#define yypact_value_is_default(yystate) \
    3002   ((yystate) == (-1414))
     2875  ((yystate) == (-1310))
    30032876
    30042877#define yytable_value_is_error(yytable_value) \
     
    30072880static const yytype_int16 yycheck[] =
    30082881{
    3009        0,     1,    44,   187,   187,   535,   187,     0,    44,   753,
    3010      187,    44,   206,   241,   648,   187,   522,   753,   188,   881,
    3011        1,   753,   107,   221,   118,   187,   187,   514,   621,   170,
    3012      171,   350,    32,     0,   986,   760,     0,   189,   603,    32,
    3013      350,   601,   601,   493,    44,   188,   281,   497,    44,   993,
    3014       50,    39,  1337,   604,    44,  1419,   603,    50,    44,   610,
    3015      601,   572,    51,    32,    64,    32,    72,    67,    32,    82,
    3016       70,    64,   157,   601,    67,    95,  1050,    70,    39,   346,
    3017      419,    44,    45,   267,   267,  1031,   267,   694,   601,    70,
    3018      267,    63,   107,   601,    50,   267,   296,   110,   268,  1043,
    3019      439,  1062,  1063,   601,   117,   267,   267,   107,   447,   203,
    3020      130,   263,   264,  1526,    39,   115,   131,    82,   118,   119,
    3021      109,   109,    67,   111,    39,   268,   132,    64,   483,  1493,
    3022       72,  1030,  1031,  1546,    39,    44,    45,    39,   365,    84,
    3023     1553,   735,   369,   636,   637,   187,   427,   428,   148,   149,
    3024      111,   187,   115,   881,   187,  1440,   149,   157,   158,   115,
    3025      132,   654,   162,   635,   636,   637,     0,   258,   912,   162,
    3026      489,    28,   109,    39,   119,    82,   912,     0,     1,  1140,
    3027      912,   112,   654,   689,   109,   116,   111,   187,   188,    72,
    3028      132,   187,   148,   110,   109,   188,   111,   187,    32,   116,
    3029        0,   187,    82,   203,   109,   114,   111,   720,    82,    32,
    3030      117,   211,   720,   411,   495,    96,   483,   162,   211,   712,
    3031       82,    78,   720,   223,     0,   267,    58,   427,   428,   109,
    3032      223,   267,    32,   514,   267,   118,   110,   407,   115,   116,
    3033      712,   241,   123,   109,    67,   111,    85,    70,   109,   111,
    3034      111,   109,    67,   253,   131,   211,    32,   342,   818,   818,
    3035      253,   261,   109,  1423,   407,   830,   266,   267,   268,   820,
    3036        1,   996,   283,   273,   113,   268,   108,   818,   223,   111,
    3037      635,   636,   637,   830,   253,   241,   253,   372,   799,   253,
    3038      818,    67,  1238,   603,     0,     1,   296,   931,   579,   654,
    3039      907,    11,  1254,   397,   119,   818,     1,   507,   308,   116,
    3040      818,   481,   512,   109,   807,   515,   261,   273,   491,    50,
    3041      818,   266,  1050,  1475,   324,   132,    32,   109,   419,   329,
    3042     1304,   425,    44,    45,   230,   807,   329,   431,   481,   112,
    3043       80,   112,   342,   116,   683,  1291,   346,   162,   439,   131,
    3044      350,   351,   308,   249,   621,    82,   447,   712,  1510,   626,
    3045     1512,  1521,  1224,   590,    70,   365,  1526,   116,   568,   369,
    3046      697,   111,   372,   113,    96,   940,   107,   117,   110,   939,
    3047      939,   110,   109,   132,   115,   117,  1546,   116,   220,   110,
    3048      346,  1290,  1291,  1553,   749,  1526,   117,   397,   939,   131,
    3049      223,   123,   114,    90,    91,   632,   351,   407,   223,    10,
    3050       11,    12,    13,    14,   407,   114,  1009,   148,   116,   253,
    3051       94,     0,  1553,    80,   258,   425,   157,   427,   428,  1125,
    3052      253,   431,   605,  1129,   434,   109,   609,   111,    39,   126,
    3053      127,   526,   274,   116,   118,   119,   261,   223,   129,   281,
    3054      131,   266,   807,   253,   111,   455,   113,   630,   258,   132,
    3055      117,   634,   116,  1407,  1408,  1059,    67,  1018,  1019,  1415,
    3056      976,   427,   428,   473,     3,   112,   207,   253,   132,   116,
    3057      211,   481,   749,   483,   116,   485,   697,   432,   481,   489,
    3058     1464,    72,   485,     0,   505,   495,  1224,  1471,   948,   734,
    3059      132,   116,    83,    84,   991,  1139,   658,   507,   649,   509,
    3060      241,   830,   512,     3,   514,   515,  1415,   349,   485,   689,
    3061      830,   485,   522,     0,   116,    32,   526,   527,   110,   474,
    3062      111,   109,   116,   111,   366,   117,   351,    44,   370,   495,
    3063      132,    72,   273,    50,  1109,   276,   689,   253,   132,    94,
    3064     1524,   112,    83,    84,   116,   116,   911,    64,   514,   254,
    3065       67,  1496,   656,    70,   109,   296,   111,  1502,   116,   109,
    3066      132,   571,   572,   118,   119,   351,  1304,   308,   131,   579,
    3067      111,   792,   809,    94,   132,   419,   913,   814,  1523,  1095,
    3068      590,   591,   683,  1528,  1100,   595,   116,   917,   109,   919,
    3069      111,   601,   110,   603,   116,   439,   116,   118,   119,   110,
    3070      110,   342,   132,   447,   116,   346,   116,   432,   709,   419,
    3071      132,   621,   132,   579,   116,   944,   626,   591,   628,   112,
    3072      132,   958,   632,   116,   365,   635,   636,   637,   369,   439,
    3073      132,   372,   149,   109,   911,   111,   110,   447,   112,   483,
    3074      595,   485,   116,   109,   654,   162,   656,   668,   869,   474,
    3075      110,    72,   485,   748,   109,   621,   116,   131,   132,   867,
    3076      626,   110,    83,    84,    50,  1030,   903,   116,   623,   852,
    3077      187,   188,    72,   628,   109,   485,   686,   109,   110,   689,
    3078      888,   120,   121,    83,    84,   110,   427,   428,   474,    71,
    3079      111,   116,   913,    75,   211,   109,    78,   111,    80,   485,
    3080     1304,   118,   712,   713,   714,    87,   223,   124,   125,   109,
    3081      720,   721,   950,   109,   455,   111,   109,   738,   912,   912,
    3082      109,   912,   873,    88,    89,   912,  1464,   468,   109,   115,
    3083      912,   110,  1009,  1471,   914,   110,   253,   958,   748,   749,
    3084      912,   912,   110,   753,   754,   700,    72,   110,    74,    75,
    3085      267,   112,   493,    72,   495,   109,   497,    83,    84,   714,
    3086      109,   914,   945,   468,    83,    84,   507,    72,   509,   485,
    3087      595,   512,   115,   514,   515,   996,  1530,  1381,    83,    84,
    3088      622,  1321,   115,   116,  1530,   526,  1524,   110,  1530,   799,
    3089     1127,   109,   111,   116,  1159,   132,   638,   807,   623,   809,
    3090      110,   811,    64,   628,   814,   815,   116,   110,   818,   514,
    3091      109,   653,   329,   116,   507,   910,   509,   110,  1022,   512,
    3092      830,   109,   515,   116,   529,   211,  1047,   532,   112,   534,
    3093      535,   132,   214,   350,    85,    86,    87,   623,   579,   683,
    3094       72,   815,    74,    75,   110,   557,   558,   559,   560,   590,
    3095      116,    83,    84,  1190,  1191,   110,   811,   109,   109,   111,
    3096      111,   116,   113,   114,  1468,   709,  1470,   114,   110,   114,
    3097      110,   881,   132,   683,   116,   700,   116,   110,   583,   111,
    3098      621,   109,  1159,   116,   109,   626,   111,   273,   132,   714,
    3099      407,   632,   734,   903,  1045,   465,   109,  1134,   111,   709,
    3100      910,   911,   912,   110,   914,   749,  1127,   881,   114,   116,
    3101      296,   110,   110,   110,   700,  1095,   926,   116,   116,   116,
    3102     1100,  1525,   308,    82,   109,  1290,   111,   109,   714,   939,
    3103      940,    85,    86,    87,   944,   109,   110,   111,   109,   949,
    3104      950,    82,  1095,    92,    93,   686,   112,  1100,     0,     1,
    3105      655,   119,   657,   116,   117,   109,   966,   111,   949,   113,
    3106      114,  1238,   129,    72,   110,   111,   976,    76,   485,  1190,
    3107     1191,   353,   489,   355,    83,    84,   128,    29,    30,   465,
    3108       32,    58,    59,   724,   950,    94,   811,   115,   116,  1505,
    3109      116,   117,    44,  1203,  1204,    94,  1206,   131,    50,  1009,
    3110      109,   111,   707,  1213,   109,  1215,    58,   748,   109,   118,
    3111      119,   114,    64,  1117,   112,    67,   116,   117,    70,   112,
    3112     1030,  1031,   109,   110,   111,   811,     4,     5,     6,     7,
    3113        8,     9,    84,    85,   109,   110,   111,   881,   112,  1555,
    3114     1050,    44,    45,  1009,   109,   110,   111,   110,   881,    10,
    3115       11,    12,    13,    14,   553,   554,   108,  1012,   109,   111,
    3116       30,   443,   110,   110,  1401,   110,   118,   911,   809,   455,
    3117      110,   881,   110,   814,   555,   556,  1050,   112,    39,   111,
    3118     1090,   131,  1419,   116,   601,  1095,   603,    58,    59,    60,
    3119     1100,    69,   114,    71,   114,   881,   109,   149,   112,  1109,
    3120      561,   562,   672,   110,  1125,   157,    67,  1117,  1129,  1130,
    3121      162,  1263,  1264,  1265,    84,    85,   949,   110,   112,   117,
    3122      112,   507,   112,   509,  1134,  1220,   512,   112,   117,   515,
    3123        3,   117,   116,    94,    29,   187,   188,    10,    11,    12,
    3124       13,    14,   110,   110,   116,   114,   112,   112,   109,  1159,
    3125      111,   203,   115,   110,   132,  1492,  1493,   118,   119,   211,
    3126      115,   115,   903,   109,   116,   881,    39,  1377,   220,   910,
    3127      110,   223,   689,   132,   110,   110,   117,   110,   230,   110,
    3128     1401,   110,   116,   110,   110,   926,   672,  1012,   110,   110,
    3129      110,  1201,  1202,   245,    67,   110,   110,   249,  1419,   110,
    3130      110,   253,   254,   720,   721,   110,  1050,   948,   949,   950,
    3131     1220,  1202,   110,   110,  1224,   267,   268,  1050,   110,    72,
    3132       29,   115,   274,    76,   131,   795,  1012,  1248,  1238,   281,
    3133       83,    84,  1242,   949,   117,   805,    72,   116,    74,    75,
    3134     1050,    94,    72,   110,    74,    75,  1201,    83,    84,   819,
    3135     1224,  1242,   112,    83,    84,   112,   109,   116,   111,   964,
    3136      110,   110,   110,   117,  1050,   118,   119,   112,  1009,   116,
    3137      114,  1492,  1493,   109,   116,   245,   110,   329,   114,   109,
    3138     1290,  1291,   110,   988,   114,   110,   991,   110,   993,  1299,
    3139      112,   110,   116,  1397,  1304,   116,     3,   349,   350,   110,
    3140      686,   818,  1540,    10,    11,    12,    13,    14,   112,   795,
    3141      109,   109,   109,   830,   366,  1159,   109,  1338,   370,   805,
    3142      109,  1342,   117,   115,   112,   132,   110,  1337,   110,   381,
    3143     1304,   110,    39,   819,  1050,   115,  1530,  1530,  1043,  1530,
    3144      115,   114,   129,  1530,  1299,   397,  1337,   112,  1530,  1090,
    3145      110,  1531,   116,   112,   132,   407,   112,   110,  1530,  1530,
    3146       67,     4,     5,     6,     7,     8,     9,   116,  1201,  1202,
    3147      110,   110,    47,   425,   112,  1555,  1201,   112,  1531,   431,
    3148     1224,   433,   112,   110,   112,   132,   112,  1397,   112,   132,
    3149       33,  1224,   115,  1134,  1238,   912,    72,   914,    74,    75,
    3150       76,  1505,  1555,   132,   110,  1415,   115,    83,    84,  1242,
    3151      132,   381,   132,   117,  1224,  1201,   468,   110,   112,   115,
    3152      112,   473,   112,  1444,   112,    56,    69,   944,    71,   481,
    3153     1440,   112,   112,   485,   112,   112,   110,   489,  1224,   110,
    3154      492,   109,   494,   881,    72,   112,    74,    75,    76,  1440,
    3155      112,   109,   109,    60,  1464,    83,    84,  1027,  1028,   110,
    3156     1304,  1471,   514,  1473,   110,  1475,  1299,   114,    99,   132,
    3157      112,  1304,   117,   112,  1299,   110,   112,   529,  1530,  1220,
    3158      532,   109,   534,   535,  1530,   110,  1202,  1530,    96,   109,
    3159     1464,    96,   109,   115,  1304,  1505,   112,  1471,   132,   110,
    3160     1510,  1242,  1512,   116,  1337,    42,   110,   110,  1224,   110,
    3161      110,   117,   110,  1299,  1524,  1085,  1086,   132,  1304,    96,
    3162     1530,  1531,   492,   132,   494,     3,  1242,    96,  1531,   110,
    3163     1540,   583,    10,    11,    12,    13,    14,   132,   590,   132,
    3164      926,  1027,  1028,   117,    72,  1555,   110,     0,    76,   601,
    3165     1524,   603,  1555,   286,  1396,    83,    84,   132,  1263,  1264,
    3166     1265,    39,   110,   110,   195,   115,    94,   112,   112,   132,
    3167      622,   109,   132,   115,  1540,   308,   309,   110,  1095,    32,
    3168      115,   109,    72,  1100,    74,    75,   638,   218,  1304,    67,
    3169      118,   119,   644,    83,    84,   110,  1337,   228,   132,  1085,
    3170     1086,   653,   110,   655,   656,   657,   110,  1440,  1066,   565,
    3171      563,  1224,  1493,   346,   564,  1053,  1321,    70,   566,  1383,
    3172     1464,  1337,   567,  1565,   114,  1314,  1130,  1471,  1342,  1081,
    3173     1471,  1464,   686,   686,   919,  1100,   927,   689,  1471,   699,
    3174      583,   693,   980,   695,   873,   650,   724,   699,   946,   382,
    3175       50,   734,  1242,   485,  1464,   707,    -1,    26,    27,    28,
    3176       -1,  1471,   571,   571,    64,   296,  1236,    67,   720,   721,
    3177       70,   571,    -1,    -1,   644,    -1,    -1,    -1,  1464,    -1,
    3178     1524,    -1,   734,    -1,    -1,  1471,    72,    -1,    74,    75,
    3179       76,  1524,    -1,    58,    -1,     0,     1,    83,    84,  1440,
    3180       -1,  1271,  1407,  1408,  1090,   158,    -1,    -1,    -1,  1279,
    3181     1280,  1281,    -1,    -1,  1524,     4,     5,     6,     7,     8,
    3182        9,    -1,    -1,   693,  1440,   695,    -1,    32,    -1,   699,
    3183       -1,   100,  1473,   102,  1475,    -1,    -1,    -1,  1524,    -1,
    3184     1445,    -1,    -1,   108,    -1,    50,   111,    -1,  1464,   149,
    3185     1236,    67,    -1,    -1,    -1,  1471,   191,    -1,    -1,    -1,
    3186       -1,    77,   162,   198,    -1,    70,   818,    -1,    -1,  1510,
    3187       -1,  1512,    -1,    -1,    -1,  1345,    -1,    -1,   830,   232,
    3188       69,    -1,    71,    -1,    -1,  1271,  1224,    -1,   188,    -1,
    3189       -1,    -1,   157,  1279,  1280,  1281,    -1,    -1,    -1,  1540,
    3190      253,  1506,   107,   119,    -1,   258,    -1,    -1,  1524,    -1,
    3191     1515,   211,    -1,   444,   183,    -1,    -1,   550,   551,   552,
    3192       -1,   873,    -1,   223,   193,   194,    -1,    -1,   880,   198,
    3193       -1,   200,   201,    -1,    -1,   270,    -1,    -1,    72,   470,
    3194       74,    75,    76,    -1,   149,    -1,   162,    -1,    -1,    83,
    3195       84,   903,   157,   158,    -1,   220,    -1,    -1,    -1,  1345,
    3196      912,    -1,   914,    -1,    -1,    -1,    -1,    -1,    72,   921,
    3197       74,    75,    76,    -1,    -1,   109,   507,    -1,    -1,    83,
    3198       84,   512,  1320,   188,   515,    -1,    -1,    -1,    -1,   324,
    3199       94,    -1,   944,    -1,    -1,    -1,    -1,   332,   203,   352,
    3200      335,   206,   207,   873,    -1,   109,   211,   223,    -1,   274,
    3201      880,    -1,   964,    -1,   118,   119,   281,    -1,    -1,    -1,
    3202       -1,    -1,    -1,    -1,    -1,    -1,    -1,   232,   980,   329,
    3203       -1,   236,    -1,   238,    -1,    -1,   988,  1375,    -1,   991,
    3204     1378,   993,   247,    -1,    -1,   261,    -1,    -1,   253,    -1,
    3205      266,   921,    -1,   258,    -1,    -1,    -1,    -1,   672,    -1,
    3206       -1,    -1,    -1,   268,   399,   281,   419,    -1,   403,    -1,
    3207       -1,   276,    -1,    -1,    10,    11,    12,    13,    14,    -1,
    3208       -1,   434,    -1,    -1,   349,  1423,   439,    -1,    -1,    -1,
    3209     1428,  1043,    -1,    -1,   447,    10,    11,    12,    13,    14,
    3210       -1,   366,    -1,    39,    -1,   370,    -1,   407,    -1,    -1,
    3211      980,    -1,   465,  1530,    -1,    -1,    -1,    -1,    -1,    -1,
    3212     1458,    -1,    -1,    -1,    39,    -1,    -1,   760,    -1,  1081,
    3213      483,    67,   485,    -1,    -1,   351,    -1,   342,    -1,    -1,
    3214      671,   346,    -1,  1095,    -1,   480,    -1,   352,  1100,   680,
    3215       -1,    -1,    67,   684,    -1,    -1,    -1,    -1,    94,    -1,
    3216      365,    -1,    -1,    -1,   369,  1117,    -1,   372,   433,    -1,
    3217       -1,    -1,    -1,   109,   527,   111,    -1,    -1,    -1,    94,
    3218       -1,   795,   118,   119,    -1,    -1,    -1,  1473,    -1,  1475,
    3219       -1,   805,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3220       -1,    -1,    -1,   118,   119,   819,  1544,    -1,    -1,    -1,
    3221       -1,  1081,  1550,    -1,   419,    -1,   432,    -1,    -1,    -1,
    3222       -1,    -1,    -1,  1561,  1510,    -1,  1512,  1565,    72,   434,
    3223       74,    75,    76,   449,   439,    -1,   571,   572,   591,    83,
    3224       84,    -1,   447,    -1,    72,  1197,    74,    75,    76,    -1,
    3225       94,    -1,    -1,     0,    -1,    83,    84,    -1,   474,    -1,
    3226      465,    -1,    -1,   468,    -1,   109,    94,   111,  1220,    -1,
    3227       -1,    -1,    -1,   117,   118,   119,    -1,    -1,   483,    -1,
    3228      485,   109,   635,   636,   637,    32,    -1,    -1,   493,    -1,
    3229      118,   119,   497,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3230       -1,   654,    -1,    -1,    -1,    -1,   575,   576,    -1,    -1,
    3231       -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,   672,
    3232       -1,   526,   527,    70,   659,   590,    -1,  1197,   663,    -1,
    3233      683,    -1,    -1,    -1,    -1,   604,    -1,    -1,   607,   608,
    3234       -1,   610,    -1,   612,   613,    -1,    -1,    -1,   617,   618,
    3235       -1,    -1,    -1,    -1,    -1,    -1,   709,   622,    -1,   712,
    3236       -1,    -1,    -1,    -1,    -1,    -1,    -1,   572,     0,  1321,
    3237       -1,    -1,    -1,   638,   905,    -1,  1009,    -1,    -1,   595,
    3238       -1,    -1,    -1,    -1,    -1,   590,   591,    -1,   653,    -1,
    3239       -1,    -1,    -1,     0,     1,    -1,   749,    -1,   603,    -1,
    3240       32,    -1,    -1,    -1,    -1,    -1,    -1,   623,    -1,    -1,
    3241       -1,   158,   628,  1027,  1028,    -1,   621,  1050,    -1,    -1,
    3242       -1,   626,    -1,    -1,    -1,    32,    -1,   632,    -1,    -1,
    3243      635,   636,   637,    -1,    -1,    -1,    -1,    -1,    70,    -1,
    3244       -1,    -1,   795,    -1,  1396,  1397,    -1,    -1,    -1,   654,
    3245       -1,    -1,   805,    -1,   807,  1407,  1408,    -1,    -1,   812,
    3246       67,    -1,   815,    70,   799,    -1,   819,   672,    -1,   734,
    3247       -1,  1085,  1086,    -1,    -1,    -1,    -1,    -1,   683,    -1,
    3248       -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,   758,
    3249      759,    -1,    -1,  1445,    -1,    -1,    -1,    -1,   714,    -1,
    3250       -1,    -1,    -1,    -1,   709,    -1,   253,   712,    -1,    -1,
    3251       -1,   258,    -1,    -1,    -1,    -1,   721,    -1,   734,   724,
    3252       72,    -1,    74,    75,    76,    -1,   158,    -1,   881,    -1,
    3253     1061,    83,    84,    -1,    72,    -1,    74,    75,    76,    -1,
    3254       -1,    -1,    94,   748,   749,    83,    84,    -1,    -1,   754,
    3255       -1,   158,    -1,  1505,  1506,    -1,    94,   109,   911,   111,
    3256       -1,    -1,    -1,  1515,    -1,    -1,   118,   119,    -1,    -1,
    3257       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1530,  1531,
    3258      118,   119,    -1,   918,    -1,    -1,    -1,    -1,    -1,    -1,
    3259      795,    -1,    -1,    -1,    -1,   811,    -1,    -1,    -1,    -1,
    3260      805,    -1,   807,  1555,   809,   352,    -1,   812,    -1,   814,
    3261      815,    -1,    -1,   966,   819,    -1,   223,    -1,    -1,    -1,
    3262       -1,   253,    -1,    -1,   829,    -1,   258,    97,    98,    99,
    3263      100,   101,   102,   103,   104,   105,   106,    -1,   903,    -1,
    3264       -1,    -1,    -1,    -1,    -1,    -1,   253,    72,    -1,    74,
    3265       75,    76,    -1,    -1,   923,    -1,    -1,  1271,    83,    84,
    3266       -1,   131,    -1,   998,    -1,  1279,  1280,  1281,    -1,    94,
    3267       -1,    -1,   419,    -1,  1027,  1028,   881,  1030,  1031,    -1,
    3268     1015,    -1,    -1,    -1,   109,    -1,   111,   434,    -1,    -1,
    3269       -1,    -1,   439,   118,   119,    -1,    -1,  1050,   903,    -1,
    3270      447,    -1,    -1,    -1,    -1,   910,   911,    -1,    -1,   914,
    3271       -1,    10,    11,    12,    13,    14,    -1,    -1,   465,    -1,
    3272      352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3273       -1,  1345,  1085,  1086,    -1,   940,   483,    -1,   485,    -1,
    3274       39,    -1,    -1,   948,   949,    -1,    -1,    -1,    -1,    -1,
    3275       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1093,    -1,
    3276       -1,   966,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
    3277       -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
    3278      527,    -1,  1313,    -1,    83,    84,    -1,   419,    -1,    -1,
    3279       -1,    -1,    -1,    -1,    -1,    94,  1012,    -1,    -1,    -1,
    3280     1135,    -1,   434,    -1,  1009,    -1,  1159,   439,    -1,    -1,
    3281      109,    -1,   111,    -1,    -1,   447,    -1,  1022,  1087,   118,
    3282      119,    -1,  1027,  1028,    -1,  1030,  1031,   434,    -1,    -1,
    3283       -1,    -1,    -1,   465,    -1,    -1,    -1,    -1,    -1,    -1,
    3284       -1,    -1,    -1,    -1,   591,  1050,    -1,    -1,    -1,  1202,
    3285       -1,   483,    -1,   485,    -1,    -1,    -1,    -1,    -1,    -1,
     2882       0,     1,   240,   205,   186,   186,   117,     0,    43,   534,
     2883      43,    43,   600,   756,   646,     1,   749,   187,   521,     0,
     2884     186,   186,   186,   157,   169,   170,   749,   749,   186,   106,
     2885     220,   602,    32,   186,   345,   349,     0,   188,   280,    32,
     2886     157,   513,   600,    43,   874,    43,   603,   874,   349,    49,
     2887     620,    32,   609,   733,     0,   983,    49,   600,   492,   571,
     2888       0,     1,   496,    63,   602,   187,    66,    32,    32,    69,
     2889      63,   692,    43,    66,    64,     0,    69,  1040,    39,   156,
     2890       1,   600,    57,    69,   266,   266,    32,    43,    51,  1398,
     2891     364,   202,    32,    63,   368,  1321,   418,   267,    82,   600,
     2892     266,   266,   266,  1052,  1053,  1033,   106,    32,   266,   600,
     2893     600,   262,   263,   266,   114,    72,   438,   117,   118,   109,
     2894     282,    72,  1402,    96,   446,    39,    66,   695,    39,    69,
     2895      28,   109,   107,    39,    39,   110,    95,    39,    82,   128,
     2896      39,    66,   131,  1021,    82,   267,   109,   147,   148,   122,
     2897     111,   186,    11,   186,   186,   148,   156,   157,     0,   295,
     2898    1469,   161,   132,  1020,  1021,   109,    44,    45,   161,     0,
     2899     129,   482,   905,   109,   488,   132,     0,     1,    72,  1128,
     2900      78,   132,   905,   905,   687,    49,   186,   187,   186,   109,
     2901      32,   257,   130,  1419,   187,   109,   109,   111,   109,   718,
     2902     111,    32,   202,   109,   109,   111,   111,   109,    32,   111,
     2903     210,   131,    43,  1040,    72,   186,  1496,   210,    49,    82,
     2904     410,  1501,   222,   117,   812,    83,    84,   718,   718,   222,
     2905     186,   266,    63,   266,   266,    66,   406,   115,    69,  1452,
     2906     240,  1521,    85,   986,   219,    69,   112,   110,  1528,    82,
     2907     114,   109,   252,   824,   812,   116,   107,   814,   114,   252,
     2908     260,    44,    45,     3,   341,   265,   266,   267,   490,   812,
     2909     113,   252,   272,  1486,   267,  1488,   257,    82,   111,   900,
     2910     131,   793,   222,   147,   406,   396,   824,   252,   252,    49,
     2911     426,   427,   924,   812,   371,   295,     3,   222,   273,   433,
     2912      96,   602,  1501,   116,   109,   280,   252,   307,     0,   620,
     2913     480,   812,   252,   424,   625,   589,   433,   148,   110,   430,
     2914     112,   812,   812,   323,   116,  1288,   122,   252,   328,  1528,
     2915     161,   114,   253,    44,    45,   328,     0,    82,   906,   131,
     2916     132,   341,   504,   110,   932,   345,   210,  1225,   482,   349,
     2917     350,   109,   418,   111,   114,   186,   187,   631,   480,   681,
     2918     109,   116,   933,   130,   364,   110,    90,    91,   368,  1049,
     2919     506,   371,   438,   348,   932,   511,   240,   132,   514,   210,
     2920     446,  1211,   604,   951,  1211,   130,   608,   426,   427,   932,
     2921     365,   222,   526,    72,   369,   112,   396,  1275,   116,   116,
     2922     285,   125,   126,   114,    83,    84,   406,   629,   272,   526,
     2923     252,   633,   130,   406,  1472,   257,   110,  1274,  1275,    55,
     2924    1478,   252,   307,   308,   424,   350,   426,   427,   252,   999,
     2925     430,   567,   111,   433,   745,   266,   130,   418,   112,   116,
     2926    1498,   110,   116,   307,   111,  1503,   113,   116,   525,  1501,
     2927     210,  1008,  1009,   130,   454,   494,   590,   438,  1386,  1387,
     2928     345,  1288,    98,   130,   967,   446,   635,   636,   131,  1521,
     2929     229,   112,   472,   590,   513,   116,  1528,   116,  1441,   110,
     2930     480,   345,   482,   652,   484,  1448,   116,   480,   488,   248,
     2931     732,   484,   110,   132,   494,  1127,   381,   328,   116,   116,
     2932     130,   482,   647,   484,   666,   656,   506,   941,   508,   981,
     2933     824,   511,   272,   513,   514,   132,  1394,   687,   349,   109,
     2934     484,   521,   109,   824,   116,   525,   526,   109,  1099,   803,
     2935     109,   111,   111,   113,   808,   295,  1499,  1394,   484,   578,
     2936     132,   710,   109,   654,   484,   116,   467,   307,   473,  1117,
     2937     130,     4,     5,     6,     7,     8,     9,   116,   194,   484,
     2938     110,   132,   426,   427,   116,   687,   116,   116,   116,   116,
     2939     570,   571,   116,   132,   736,   406,   418,   109,   578,   116,
     2940     132,   217,  1085,   132,   132,   132,   109,  1090,   132,   589,
     2941     590,   227,   117,   904,   594,   132,   438,   116,   123,   124,
     2942     600,   116,   602,   109,   446,   111,   110,   528,  1288,  1177,
     2943    1178,   745,   533,   132,  1441,   681,    69,   132,    71,   110,
     2944     620,  1448,   896,   937,   846,   625,    72,   627,    74,    75,
     2945     494,   631,   801,   110,   634,   635,   636,    83,    84,    72,
     2946     110,   707,   484,   112,   590,   110,   621,   116,   112,   513,
     2947      83,    84,   652,   484,   654,   109,   910,   488,   912,   295,
     2948     484,   582,   637,   109,   549,   550,   551,   744,   114,   112,
     2949     109,   861,  1499,   116,    72,   809,   651,   115,    72,   132,
     2950      74,    75,  1362,   109,   684,    83,    84,   687,   999,    83,
     2951      84,   881,   809,   109,   454,   111,    72,   622,    74,    75,
     2952     681,    85,    86,    87,   109,   943,   111,    83,    84,   132,
     2953     710,   711,   712,   111,   578,   109,   938,  1115,   718,   719,
     2954     114,  1119,   867,   905,   905,   109,   707,   111,    64,   113,
     2955     114,   109,   653,   111,   655,   112,   110,   907,   114,   905,
     2956     905,   905,   116,   109,   744,   745,   506,   905,   508,   749,
     2957     750,   511,   905,   109,   514,   111,   620,   732,   109,    70,
     2958     111,   625,   109,    74,   745,  1445,    77,  1447,    79,   600,
     2959     904,   602,  1505,   698,   132,    86,   556,   557,   558,   559,
     2960    1305,     3,  1505,  1505,   705,   907,   114,   712,    10,    11,
     2961      12,    13,    14,   793,     4,     5,     6,     7,     8,     9,
     2962     110,   801,   109,   803,   111,   805,   116,   443,   808,   809,
     2963    1012,   114,   812,   109,  1382,   111,    72,    39,    74,    75,
     2964    1500,   117,   118,    33,   824,    72,   903,    83,    84,   114,
     2965    1398,   132,   110,   469,   132,  1146,    83,    84,   116,   681,
     2966      10,    11,    12,    13,    14,    67,    72,   110,  1122,   109,
     2967      76,   109,   110,   116,    82,   111,   687,    83,    84,    69,
     2968     110,    71,    49,   809,   111,   707,   116,   110,   109,    39,
     2969     506,   756,   109,   116,   874,   511,    63,   112,   514,    66,
     2970     805,    82,    69,   109,   118,   111,  1020,   718,   719,   110,
     2971    1035,   117,   118,   874,   127,   116,   896,    67,    88,    89,
     2972    1468,  1469,   213,   903,   904,   905,    72,   907,     4,     5,
     2973       6,     7,     8,     9,  1225,  1085,   110,    83,    84,   919,
     2974    1090,   128,   116,   904,   684,   110,    94,   109,   874,   111,
     2975      30,   116,   932,   933,   874,   117,   118,   937,   131,   109,
     2976      72,   111,   942,   943,    76,   111,   111,   117,   118,   874,
     2977     109,    83,    84,  1115,   110,   109,   942,  1119,  1120,   112,
     2978     116,   148,   109,  1085,   111,     0,     1,   967,  1090,   112,
     2979     117,   118,   110,    69,   161,    71,   110,   109,  1481,   119,
     2980     120,   812,   116,    83,    84,   117,   118,   112,    10,    11,
     2981      12,    13,    14,   824,    29,    30,  1107,    32,   110,   999,
     2982     187,   110,   942,   110,   116,    92,    93,    72,    43,    74,
     2983      75,    76,  1146,    72,    49,    74,    75,    39,    83,    84,
     2984    1020,  1021,    57,   210,    83,    84,   110,  1530,    63,   115,
     2985     116,    66,   874,   669,    69,   222,   957,   109,   110,   111,
     2986    1040,   352,   678,   354,   109,    67,   682,   110,    83,    84,
     2987     874,   109,   117,   118,  1190,  1191,    72,  1193,   979,  1040,
     2988      76,   110,   983,   110,  1200,   110,  1202,    83,    84,   116,
     2989     112,   116,   107,  1235,   905,   110,   907,  1002,   110,   943,
     2990    1080,   111,   117,   114,   116,  1085,   110,   109,   116,   111,
     2991    1090,   131,   116,   109,  1040,   117,   118,   110,   111,  1099,
     2992    1040,   117,   118,   506,    66,   508,   937,  1107,   511,    58,
     2993      59,   514,  1033,   148,   999,  1040,   115,   116,   942,    44,
     2994      45,   156,  1122,   552,   553,    72,   161,    74,    75,    76,
     2995    1207,   442,   109,   110,   111,   999,    83,    84,   560,   561,
     2996    1274,   328,   554,   555,   244,   114,  1146,   114,   109,   110,
     2997     111,   186,   187,   109,   112,  1040,   118,   110,   110,   919,
     2998    1322,   112,   109,    29,  1326,  1146,   112,   202,   112,     3,
     2999     117,   118,   109,   110,   111,   210,    10,    11,    12,    13,
     3000      14,    58,    59,    60,   219,   112,   116,   222,  1188,  1189,
     3001    1248,  1249,  1250,   110,   229,   130,   130,   130,  1040,   161,
     3002     110,   112,   114,  1189,   112,    39,   115,  1207,   110,   244,
     3003     115,  1211,   115,   248,   109,   116,  1040,   252,   253,   406,
     3004       1,   110,  1358,   110,    72,  1225,    74,    75,    76,  1229,
     3005    1211,   266,   267,    67,   132,    83,    84,   116,   273,   110,
     3006     110,   110,   110,  1229,  1225,   280,   110,   110,  1188,  1189,
     3007     110,   116,   110,   110,  1085,   110,   110,   110,   110,  1090,
     3008     222,  1423,   898,  1188,   110,  1211,   110,  1378,    49,   110,
     3009     110,  1211,   115,   874,  1274,  1275,    29,  1515,   110,   130,
     3010     380,   131,   112,  1283,   112,   116,  1211,   110,  1288,  1229,
     3011     110,   116,   110,   328,   130,   116,   112,   114,   260,   110,
     3012     110,   464,   110,   265,   116,   112,   110,  1288,   110,   110,
     3013     116,   116,   112,   348,   349,    10,    11,    12,    13,    14,
     3014    1080,  1321,   109,  1505,  1505,   106,   109,  1248,  1249,  1250,
     3015     365,   109,   109,   114,   369,  1321,  1506,   109,   130,  1505,
     3016    1505,  1505,  1288,  1283,    39,   380,     3,  1505,  1288,   112,
     3017     132,   115,  1505,    10,    11,    12,    13,    14,  1283,   110,
     3018    1530,   396,   110,  1288,   110,  1189,   147,   128,   115,  1211,
     3019    1481,   406,    67,   115,   464,   156,   114,   695,  1378,   112,
     3020     132,  1321,    39,   110,  1506,   116,   112,  1211,   350,   424,
     3021     112,   491,   110,   493,  1394,   430,   110,   432,   110,   112,
     3022     110,   112,  1377,   112,   112,  1229,   112,   112,  1530,    72,
     3023      67,    74,    75,    76,   109,  1051,   111,    47,   115,  1419,
     3024      83,    84,   117,   118,    72,   206,    74,    75,    76,   210,
     3025     132,   132,   467,  1419,   132,    83,    84,   472,   132,   132,
     3026     110,  1441,  1043,   115,   130,   480,  1288,   115,  1448,   484,
     3027    1450,   110,  1452,   488,   112,   109,   491,   112,   493,   240,
     3028    1441,   109,   112,   112,  1288,  1386,  1387,  1448,   786,   431,
     3029    1505,   112,  1505,  1505,   112,   110,   110,    60,   109,  1419,
     3030     112,  1481,    66,   112,   109,   132,  1486,   110,  1488,   110,
     3031     114,   272,    76,   528,   275,  1441,   112,  1321,   533,  1499,
     3032     112,  1441,  1448,  1424,   110,  1505,  1506,   670,  1448,   112,
     3033     110,   473,   109,  1506,   295,  1515,  1441,    96,  1499,    96,
     3034      85,    86,    87,  1448,   109,   132,   307,   115,   110,    72,
     3035    1530,    74,    75,    76,   118,   110,   110,  1530,   110,    42,
     3036      83,    84,   642,   116,   109,   863,   111,   582,   113,   114,
     3037     130,   132,   110,  1499,   589,   110,   132,    96,    96,  1499,
     3038     341,  1482,   132,   110,   345,   600,   109,   602,   132,   110,
     3039    1491,   132,   112,   110,  1499,   110,   132,   161,   112,   115,
     3040     670,   109,   132,   364,   115,   115,   621,   368,   906,   110,
     3041     371,   691,   110,   693,   110,  1419,   110,   697,  1056,  1441,
     3042     132,   564,   637,   562,   977,   565,  1448,   642,   563,   566,
     3043    1211,  1211,  1469,  1364,  1540,  1298,   651,  1441,   653,   654,
     3044     655,  1120,  1326,  1448,  1448,   912,   789,    66,   684,  1071,
     3045     684,  1090,   594,   951,   920,   697,   799,   582,   222,   971,
     3046     867,   648,   722,  1229,    83,   426,   427,   939,   570,   484,
     3047     813,  1515,   687,   732,   570,   570,   691,  1499,   693,    -1,
     3048     622,  1297,   697,    -1,    -1,   627,    -1,    -1,   986,    -1,
     3049     705,    -1,    -1,   454,  1505,  1499,   260,    -1,    -1,   118,
     3050      -1,   265,    -1,   718,   719,    -1,   467,    -1,    -1,    -1,
     3051    1450,    -1,  1452,    -1,    -1,    -1,   280,   732,    -1,   789,
     3052      -1,    -1,    -1,  1304,    -1,    -1,    -1,    -1,    -1,   799,
     3053      -1,   492,    -1,   494,    -1,   496,    -1,    -1,    -1,  1037,
     3054      -1,    -1,   161,   813,    -1,   506,  1486,   508,  1488,    -1,
     3055     511,    -1,   513,   514,    -1,    -1,   698,    57,    -1,    10,
     3056      11,    12,    13,    14,   525,    -1,    -1,    -1,    -1,    72,
     3057     712,    74,    75,    76,    -1,  1356,    -1,    -1,  1359,    -1,
     3058      83,    84,    -1,    -1,    -1,    -1,   350,   867,    39,    -1,
     3059      -1,    -1,    -1,   873,    -1,    -1,    -1,   812,    -1,    -1,
     3060      -1,    -1,    -1,   222,    -1,    -1,   109,   107,   111,   824,
     3061     110,    -1,    -1,    -1,   117,   118,    67,   578,    -1,  1117,
     3062      -1,  1402,    -1,    -1,    -1,    -1,  1407,   130,   589,    -1,
     3063      -1,    -1,    -1,  1449,   914,  1451,    -1,    -1,    -1,    -1,
     3064      -1,   260,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,
     3065      -1,    -1,   867,    -1,  1435,    -1,   156,   670,   873,   620,
     3066      -1,    -1,    -1,   805,   625,    -1,    -1,   431,    -1,  1485,
     3067     631,  1487,     0,     1,  1017,  1018,    -1,    -1,    -1,  1177,
     3068    1178,   896,    -1,    -1,   448,    -1,    -1,    -1,    -1,    -1,
     3069     905,   971,   907,    -1,    -1,    -1,    -1,    -1,    -1,   914,
     3070      -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,   473,
     3071      -1,    -1,    -1,  1529,    -1,  1531,    -1,    -1,    -1,   219,
     3072      -1,    49,   937,   684,    -1,    -1,    -1,    -1,  1544,  1545,
     3073      -1,   350,  1075,  1076,    -1,    -1,    -1,    -1,  1519,    -1,
     3074      -1,    69,   957,    -1,  1525,    -1,    -1,  1017,  1018,    -1,
     3075      -1,    -1,    -1,    -1,    -1,  1536,   971,    -1,    -1,  1540,
     3076      -1,   722,    -1,    -1,   979,    -1,    -1,    -1,   983,     0,
     3077       1,    -1,    -1,   273,    -1,    -1,   789,    -1,   106,    -1,
     3078     280,    -1,    -1,   744,    -1,    -1,   799,    -1,    -1,    -1,
     3079      -1,  1071,    -1,    -1,    -1,     0,    -1,    -1,    -1,    -1,
     3080     813,    32,    -1,    -1,    -1,  1075,  1076,    -1,    -1,    -1,
     3081      -1,    -1,   431,    -1,    -1,    -1,    -1,    -1,  1033,    -1,
     3082     148,    -1,    -1,    -1,    -1,    -1,    -1,    32,   156,   157,
     3083     594,    -1,    -1,    -1,    -1,    66,    -1,    -1,    69,    -1,
     3084      -1,    -1,   803,    -1,    -1,    -1,    -1,   808,   348,    -1,
     3085      -1,    -1,    -1,    -1,   473,    -1,  1071,    -1,   622,   187,
     3086    1002,    -1,    -1,   627,    69,   365,    -1,    -1,    -1,   369,
     3087    1085,    -1,    -1,    -1,   202,  1090,    -1,   205,   206,    -1,
     3088    1223,    -1,   210,    -1,  1382,    -1,    -1,    -1,    -1,    -1,
     3089      -1,    -1,  1107,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3090    1398,    -1,    -1,   231,  1184,    -1,    -1,   235,    -1,   237,
     3091      -1,    -1,  1255,    -1,    -1,    -1,    -1,    -1,   246,    -1,
     3092    1263,  1264,  1265,    -1,   252,    -1,   157,    -1,    -1,   257,
     3093      -1,    -1,   432,    -1,   698,   896,    -1,    -1,    -1,   267,
     3094      -1,    -1,   903,    -1,    -1,    -1,    -1,   275,   712,    -1,
     3095      -1,     0,   157,  1223,    -1,    -1,    -1,    -1,   919,    -1,
     3096      -1,    72,    -1,    74,    75,    76,    -1,    -1,   732,  1184,
     3097    1468,  1469,    83,    84,    -1,   594,    -1,    -1,    -1,    -1,
     3098     941,   942,   943,    32,  1327,  1255,    -1,    -1,    -1,    -1,
     3099      -1,   222,  1207,  1263,  1264,  1265,    -1,    -1,   109,    -1,
     3100     111,    -1,    -1,   622,  1017,  1018,   117,   118,   627,    -1,
     3101      -1,    -1,    -1,   341,    -1,    -1,    -1,   345,    -1,    -1,
     3102      69,   252,    -1,   351,    -1,    -1,   231,    -1,    -1,    -1,
     3103      -1,    -1,    -1,  1248,  1249,  1250,   364,    -1,   999,    -1,
     3104     368,   805,    -1,   371,    -1,    -1,  1188,   252,    -1,    -1,
     3105      -1,    -1,   257,    -1,    -1,    -1,    -1,  1327,    -1,    -1,
     3106      -1,    -1,  1075,  1076,    -1,    -1,    -1,    -1,    -1,    -1,
     3107      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   698,
     3108      -1,    83,    84,    72,    -1,    74,    75,    76,    -1,   589,
     3109     418,    -1,    -1,   712,    83,    84,    -1,    -1,    -1,    -1,
     3110      -1,    -1,    -1,    -1,    -1,   433,    -1,   109,   157,   111,
     3111     438,    -1,    -1,    -1,    -1,   117,   118,    -1,   446,  1080,
     3112     109,   621,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
     3113      -1,    -1,    -1,    -1,    -1,    -1,   464,   637,    -1,   467,
     3114      -1,  1283,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
     3115      -1,   651,    -1,    -1,   482,    -1,   484,    -1,    -1,    -1,
     3116      -1,  1122,  1377,  1378,   492,    -1,    -1,    -1,   496,    -1,
     3117      -1,  1386,  1387,    97,    98,    99,   100,   101,   102,   103,
     3118     104,   105,   106,    -1,    -1,    -1,   805,    -1,    -1,    -1,
     3119      -1,    -1,    -1,    -1,    -1,    -1,    -1,   525,   526,    -1,
     3120      -1,    -1,   433,   252,    -1,    -1,    -1,   131,   257,  1424,
     3121      -1,    -1,    -1,   418,    -1,    -1,    -1,    -1,    -1,    -1,
     3122      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,
     3123      -1,    -1,   732,   438,    -1,    -1,    -1,    -1,  1002,    -1,
     3124      -1,   446,  1255,   571,    -1,    -1,  1207,    -1,    -1,    -1,
     3125    1263,  1264,  1265,   484,    -1,    -1,    -1,    -1,    -1,   464,
     3126      -1,   589,   590,    -1,    -1,    -1,  1481,  1482,  1229,    -1,
     3127      -1,    -1,    -1,    -1,   602,    -1,  1491,   482,    -1,   484,
     3128      -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
     3129    1505,  1506,   620,    -1,    -1,   526,    -1,   625,    -1,    -1,
     3130      -1,    -1,   351,   631,    -1,    -1,   634,   635,   636,    -1,
     3131      -1,    -1,    66,    -1,  1327,  1530,    -1,    -1,    72,    -1,
     3132      -1,   526,    76,    -1,   652,    79,    80,    81,    82,    83,
     3133      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     3134      -1,    -1,   670,    -1,    -1,    10,    11,    12,    13,    14,
     3135      -1,    -1,    -1,   681,    -1,   109,    -1,   111,    -1,   590,
     3136    1321,    -1,    -1,   117,   118,   119,   120,   121,   122,   418,
     3137      -1,    -1,    -1,    -1,    39,    -1,   130,    -1,    -1,   707,
     3138      -1,    -1,   710,  1002,   433,   590,    -1,    -1,    -1,   438,
     3139      -1,   719,    -1,    -1,   722,    -1,   896,   446,    -1,    -1,
     3140      -1,    -1,    67,   634,   635,   636,    -1,    72,    -1,    74,
     3141      75,    76,    -1,    -1,    -1,   464,   744,   745,    83,    84,
     3142      -1,   652,   750,    -1,  1188,    -1,    -1,    -1,    -1,   634,
     3143     635,   636,    -1,   482,    -1,   484,    -1,    10,    11,    12,
     3144      13,    14,    -1,    -1,   109,    -1,   111,   652,    -1,    -1,
     3145      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,  1419,    -1,
     3146      -1,   789,    -1,    -1,    -1,   670,    39,    -1,    -1,    -1,
     3147      -1,   799,    -1,   801,    -1,   803,   681,   526,   806,   710,
     3148     808,   809,    -1,    -1,    -1,   813,    -1,    -1,    -1,  1450,
     3149      -1,  1452,    -1,    -1,    67,   823,    -1,    -1,    -1,    72,
     3150      -1,    -1,   707,    76,    -1,   710,    -1,    -1,    -1,    -1,
     3151      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1283,
     3152      -1,     0,    -1,    -1,    -1,  1486,    -1,  1488,    -1,    -1,
     3153      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
     3154     745,   590,    -1,    -1,   117,   118,   874,    -1,     0,    -1,
     3155     190,    -1,    -1,    32,  1515,    -1,    -1,   197,    -1,    -1,
     3156      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   896,  1188,
     3157     801,    -1,    -1,    -1,    -1,   903,   904,    -1,   809,   907,
     3158      32,    -1,    -1,    -1,   789,   634,   635,   636,    -1,    -1,
     3159      69,    -1,    -1,    -1,   799,    -1,   801,    -1,    -1,    -1,
     3160      -1,   806,    -1,   652,   809,   933,    -1,    -1,   813,    -1,
     3161      -1,    -1,    -1,   941,   942,    -1,    -1,    69,    -1,    -1,
     3162      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   269,
     3163      -1,    -1,   681,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3164      -1,    -1,    -1,   874,    -1,    -1,    -1,    -1,    -1,    -1,
     3165      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   707,    -1,
     3166      -1,   710,    -1,    -1,  1283,    -1,    -1,    -1,    -1,   874,
     3167      -1,   999,    -1,    -1,    -1,    -1,    -1,    -1,   157,    -1,
     3168      -1,    -1,    -1,   323,  1012,    -1,    -1,    -1,    -1,  1017,
     3169    1018,   331,  1020,  1021,   334,    -1,   745,    -1,    -1,   904,
     3170      -1,    -1,    -1,    -1,    -1,   157,    -1,  1207,    -1,    -1,
     3171      -1,   942,  1040,    -1,    -1,     3,     4,     5,     6,     7,
     3172       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3173      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3174     789,    -1,    30,    31,    32,    -1,    -1,  1075,  1076,    -1,
     3175     799,    39,   801,    -1,    -1,    -1,    -1,   806,   398,    -1,
     3176     809,    -1,   402,    -1,   813,    -1,    -1,    -1,    -1,    -1,
     3177      -1,    -1,    -1,   252,    -1,    -1,    -1,    -1,   257,    67,
     3178      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1020,
     3179    1021,    -1,    -1,    -1,  1122,    83,    84,    -1,    -1,    -1,
     3180     252,    -1,    -1,    -1,    -1,   257,    -1,    -1,    -1,  1040,
     3181      -1,    -1,  1017,  1018,    -1,  1020,  1021,    -1,  1146,    -1,
     3182      -1,   109,    -1,   111,    -1,   874,    -1,    -1,    -1,   117,
     3183     118,    -1,    -1,    -1,    -1,  1040,    -1,    -1,    -1,   479,
     3184      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3185      -1,    -1,    -1,    -1,    -1,   904,    -1,    -1,    -1,    -1,
     3186      -1,  1189,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3187    1075,  1076,   351,    -1,    39,    -1,    -1,  1377,    -1,  1207,
     3188      -1,    -1,    -1,  1211,    -1,    -1,    -1,    -1,    -1,    -1,
     3189      -1,    -1,    -1,    -1,    -1,  1223,    -1,  1225,    -1,   351,
     3190      -1,  1229,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
     3191      75,    76,    -1,    -1,    -1,    26,    27,    28,    83,    84,
     3192      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1255,    -1,    -1,
     3193     570,   571,    -1,    -1,    -1,  1263,  1264,  1265,    -1,   418,
     3194      -1,  1146,    -1,    -1,   109,    -1,  1274,  1275,    -1,    -1,
     3195      -1,    -1,   117,   118,   433,    -1,    -1,  1188,  1189,   438,
     3196    1288,    -1,    -1,    -1,    -1,    -1,   418,   446,  1017,  1018,
     3197      -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3198    1211,   433,    -1,    -1,  1189,   464,   438,    -1,    99,    -1,
     3199     101,  1040,    -1,  1321,   446,    -1,    -1,    -1,  1229,  1327,
     3200      -1,    -1,    -1,   482,    -1,   484,  1211,    -1,    -1,    -1,
     3201      -1,    -1,   464,    -1,    -1,   126,    -1,   657,  1223,    -1,
     3202    1225,   661,    -1,    -1,    -1,    -1,  1075,  1076,    -1,    -1,
     3203     482,    -1,   484,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3204      -1,    -1,    -1,  1274,  1275,    -1,    -1,   526,    -1,    -1,
     3205    1255,    -1,  1283,    -1,    -1,    -1,    -1,  1288,  1263,  1264,
     3206    1265,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,  1274,
     3207    1275,   182,    -1,    -1,   526,    -1,    -1,    -1,    -1,   190,
     3208      -1,   192,   193,  1288,    -1,    -1,   197,    -1,   199,   200,
     3209    1321,  1419,    -1,    53,    -1,    55,    -1,  1146,    58,    59,
     3210      60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3211      -1,   590,    -1,  1441,    -1,    -1,    -1,    77,    -1,    -1,
     3212    1448,    -1,  1327,    -1,    -1,    -1,    -1,    -1,    -1,    89,
     3213      90,    -1,    -1,    -1,    26,    27,    28,    -1,   590,    -1,
     3214    1189,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
     3215      14,    -1,    -1,   793,    -1,   634,   635,   636,   269,    -1,
     3216      -1,    -1,  1211,  1394,    -1,    -1,    -1,    -1,    -1,    -1,
     3217      -1,  1499,    -1,   652,  1223,    39,  1225,    -1,  1506,    -1,
     3218      -1,    -1,   634,   635,   636,    -1,    -1,    -1,  1419,  1394,
     3219      -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3220     652,    -1,   681,    67,    -1,    -1,  1255,    99,    72,   101,
     3221    1441,    -1,    76,    -1,  1263,  1264,  1265,  1448,   670,    83,
     3222      84,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   707,   681,
     3223      -1,   710,    -1,    -1,    -1,    -1,  1441,    -1,    -1,  1288,
     3224      -1,    -1,    -1,  1448,    -1,   109,    -1,    -1,    -1,    -1,
     3225      -1,    -1,    -1,   117,   118,   707,    -1,    -1,   710,    10,
     3226      11,    12,    13,    14,    -1,    -1,   745,    -1,  1499,    -1,
     3227      -1,   911,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
     3228      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
     3229     182,    -1,    -1,   745,  1499,    -1,    -1,    -1,    -1,    -1,
     3230     192,   193,    -1,    -1,    -1,   197,    -1,   199,   200,    -1,
     3231     789,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
     3232     799,    72,   801,    74,    75,    76,    -1,   806,    -1,    -1,
     3233     809,    -1,    83,    84,   813,    -1,    -1,   789,    -1,    10,
     3234      11,    12,    13,    14,    -1,  1394,    -1,   799,   988,   801,
     3235      -1,    -1,    -1,    -1,   806,    -1,    -1,   809,   109,    -1,
     3236     111,   813,    -1,    -1,    -1,  1005,   117,   118,    39,    -1,
     3237      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
     3238      -1,    -1,    -1,    -1,   344,    -1,   346,    -1,    -1,    -1,
     3239      -1,    -1,  1441,    -1,    -1,   874,    67,   357,   358,  1448,
     3240      39,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
     3241      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
     3242      -1,    -1,   874,    -1,    -1,   904,    -1,    -1,    67,    -1,
     3243      -1,    -1,    -1,    72,    -1,    74,    75,    76,   109,    -1,
     3244     111,    -1,    -1,  1083,    83,    84,   117,   118,    -1,    -1,
     3245    1499,    -1,   904,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3246      -1,    -1,    -1,   574,   575,    -1,    -1,    -1,    -1,    -1,
     3247     109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
     3248      -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,    -1,
     3249      -1,    -1,   603,    -1,    -1,   606,   607,    -1,   609,    -1,
     3250     611,   612,    -1,    -1,    -1,   616,   617,     3,     4,     5,
     3251       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3252      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3253      26,    27,    28,    -1,    30,    31,    32,    33,  1017,  1018,
     3254      36,  1020,  1021,    39,    -1,    -1,    -1,    -1,    -1,    -1,
    32863255      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3287       -1,  1224,    -1,    -1,    -1,    -1,    -1,    -1,   485,    -1,
    3288     1085,  1086,    -1,  1236,    -1,  1238,    -1,    -1,   635,   636,
    3289      637,    -1,    -1,    -1,    -1,   527,    -1,    -1,    -1,    -1,
    3290       -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,
    3291       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,
    3292      527,    -1,    -1,    -1,     0,   672,  1279,  1280,  1281,  1134,
    3293       -1,    -1,    -1,    -1,    -1,    -1,   683,  1290,  1291,    -1,
    3294       -1,  1472,    -1,  1474,    -1,    -1,    -1,    -1,    -1,    -1,
    3295     1219,  1304,    -1,    -1,  1159,  1220,    32,    -1,    -1,   591,
    3296       -1,    -1,   709,    -1,    -1,   712,    -1,    -1,    -1,    -1,
    3297       10,    11,    12,    13,    14,    -1,    -1,    -1,  1509,    -1,
    3298     1511,    -1,    -1,    -1,   591,  1201,    -1,    -1,    -1,    -1,
    3299       -1,    -1,  1345,    -1,    70,    -1,    -1,  1202,    -1,    39,
    3300       -1,    -1,   749,   635,   636,   637,    -1,    -1,    -1,    -1,
    3301       -1,    -1,    -1,    -1,    -1,  1220,    -1,    -1,    -1,  1224,
    3302       -1,    -1,   654,  1554,    -1,  1556,    -1,    67,   635,   636,
    3303      637,  1236,    72,  1238,    74,    75,    76,  1242,  1569,  1570,
    3304      672,    -1,    -1,    83,    84,    -1,    -1,   654,   795,    -1,
    3305       -1,   683,    -1,    -1,    94,    -1,    -1,    -1,   805,    -1,
    3306      807,    -1,  1415,    -1,    -1,   812,  1271,    -1,   815,   109,
    3307       -1,   111,   819,    -1,  1279,  1280,  1281,   709,   118,   119,
    3308      712,    -1,   158,  1299,    -1,  1290,  1291,    -1,    -1,    -1,
    3309       -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,  1304,
    3310       -1,    -1,    -1,    -1,    -1,   712,    -1,    -1,    -1,    -1,
    3311       -1,  1464,    -1,    -1,    -1,    -1,    -1,   749,  1471,    -1,
    3312       -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
    3313       -1,  1396,  1337,    -1,   881,    -1,    -1,    -1,    -1,    -1,
    3314     1345,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3315       -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
    3316       76,    -1,    -1,   795,   911,    -1,    -1,    83,    84,    -1,
    3317       -1,  1524,    -1,   805,    -1,   807,    -1,   253,    94,    -1,
    3318      812,    -1,   258,   815,    -1,    -1,    -1,   819,    -1,    -1,
    3319       -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
    3320      807,    -1,   118,   119,    -1,    -1,    -1,    -1,   815,    -1,
    3321     1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   966,
    3322       -1,    54,    -1,    56,    -1,    -1,    59,    60,    61,    -1,
    3323       63,    -1,    -1,    -1,    -1,  1440,    10,    11,    12,    13,
    3324       14,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,   881,
    3325       -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,  1464,
    3326       -1,    -1,    -1,    -1,    -1,    39,  1471,    10,    11,    12,
    3327       13,    14,    -1,    -1,   881,    -1,   352,    -1,    -1,   911,
    3328     1027,  1028,    -1,  1030,  1031,    -1,    -1,    -1,    -1,    -1,
    3329       -1,    -1,    -1,    67,    -1,    -1,    39,    -1,    72,    -1,
    3330       74,    75,    76,  1050,    -1,    -1,    -1,    -1,    -1,    83,
    3331       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1524,
    3332       94,    -1,    -1,    -1,    67,    -1,  1531,    -1,    -1,    72,
    3333       -1,    74,    75,    76,   966,   109,    -1,    -1,  1085,  1086,
    3334       83,    84,   949,   419,   118,   119,    -1,    -1,    -1,    -1,
    3335       -1,    94,    -1,    10,    11,    12,    13,    14,   434,   966,
    3336       -1,    -1,    -1,   439,    -1,    -1,   109,    -1,    -1,    -1,
    3337       -1,   447,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
    3338       -1,    -1,    39,    -1,    10,    11,    12,    13,    14,   465,
    3339       -1,    -1,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
    3340       -1,    -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   485,
    3341       67,    -1,  1159,    39,    -1,    72,    -1,    -1,  1050,    76,
    3342       -1,    -1,    -1,  1030,  1031,    -1,    83,    84,    -1,    -1,
    3343       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3344       -1,    67,    -1,  1050,    -1,    -1,    72,    -1,    -1,    -1,
    3345       76,   527,   109,  1085,  1086,  1202,    -1,    83,    84,    -1,
    3346       -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    3347       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,    -1,
    3348       -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,  1236,
    3349       -1,  1238,   118,   119,    10,    11,    12,    13,    14,    15,
     3256      -1,  1040,    -1,    -1,    -1,  1017,  1018,    -1,  1020,  1021,
     3257      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
     3258      -1,    -1,    78,    -1,    -1,    -1,     7,    -1,  1040,    10,
     3259      11,    12,    13,    14,    -1,    -1,  1075,  1076,    -1,    -1,
     3260      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3261      -1,    -1,    -1,    -1,    -1,   111,    37,    38,    39,    40,
     3262      -1,   117,   118,  1075,  1076,    -1,    -1,    -1,    -1,    -1,
     3263      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3264      -1,    -1,    -1,   754,   755,    66,    67,    -1,    -1,    -1,
     3265      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
     3266      81,    82,    83,    84,    -1,    86,    87,  1146,    -1,    -1,
     3267      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3268      -1,    -1,   574,   575,    -1,    -1,    -1,    -1,   109,    -1,
     3269     111,    -1,    -1,    -1,  1146,    -1,   117,   118,   119,   120,
     3270     121,   122,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3271    1189,   603,    -1,    -1,   606,   607,    -1,   609,    -1,   611,
     3272     612,    -1,    -1,    -1,   616,   617,    -1,    -1,    -1,    -1,
     3273      -1,    -1,  1211,    -1,    -1,    -1,    -1,  1189,    -1,   699,
     3274      -1,   701,    -1,    -1,  1223,    -1,  1225,    -1,   708,   709,
     3275      -1,    -1,    -1,   713,    -1,    -1,    -1,    -1,    -1,  1211,
     3276      -1,    -1,    -1,    -1,    -1,   725,    -1,    -1,    -1,    -1,
     3277     730,  1223,    -1,  1225,    -1,    -1,  1255,    -1,    -1,    -1,
     3278      -1,    -1,    -1,    -1,  1263,  1264,  1265,    -1,    -1,    -1,
     3279      -1,    -1,    -1,    -1,    -1,  1274,  1275,    -1,   758,    -1,
     3280     911,    -1,    -1,  1255,    -1,   916,    -1,    -1,    -1,  1288,
     3281      -1,  1263,  1264,  1265,    -1,    -1,    -1,    -1,    -1,    -1,
     3282      -1,    -1,  1274,  1275,    -1,    -1,    -1,    -1,    -1,    -1,
     3283      -1,    -1,    -1,    -1,    -1,    -1,  1288,    -1,    -1,    -1,
     3284      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,
     3285      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3286      49,    -1,   754,   755,    -1,    -1,    -1,    -1,    -1,    -1,
     3287      -1,    -1,    -1,    -1,    -1,  1327,    -1,    66,    -1,    -1,
     3288       7,    -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,
     3289      -1,    -1,    -1,    -1,    -1,    -1,    -1,   857,   858,   859,
     3290     860,    -1,   862,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3291      37,    38,    39,    40,    -1,  1394,    -1,   877,    -1,    -1,
     3292      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,   118,
     3293      -1,   891,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
     3294      67,    -1,  1394,    -1,    -1,    72,    -1,    -1,    -1,    76,
     3295      -1,    -1,    79,    80,    81,    82,    83,    84,   147,    86,
     3296      87,    -1,  1441,    -1,    -1,    -1,  1077,    -1,   157,  1448,
     3297      -1,   931,   161,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3298      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,  1441,
     3299     117,   118,   119,   120,   121,   122,  1448,    10,    11,    12,
     3300      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3301      23,    24,    25,    26,    27,    -1,   976,    30,    31,    32,
     3302    1499,   210,   982,    -1,   916,    -1,    39,   987,    -1,    -1,
     3303      -1,    -1,   992,   222,   994,    -1,    -1,    -1,   998,    -1,
     3304    1000,  1001,    -1,    -1,  1004,    -1,    -1,  1499,    -1,    -1,
     3305      -1,   240,    -1,  1013,    67,    -1,    -1,    -1,    -1,    -1,
     3306      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3307      -1,  1031,  1032,    -1,    -1,    -1,   265,    -1,    -1,    -1,
     3308      -1,    -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,
     3309      -1,    -1,    -1,    -1,    -1,  1206,    -1,    -1,  1058,    -1,
     3310      -1,  1061,    -1,    -1,   117,   118,   295,    -1,    -1,    -1,
     3311      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   307,    -1,
     3312      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
     3313      -1,    -1,    -1,    -1,    76,    -1,    78,    -1,    80,    -1,
     3314      -1,    -1,    -1,    -1,  1104,    87,    -1,    -1,    -1,    -1,
     3315    1110,  1111,    -1,    -1,    -1,    -1,   345,    -1,    -1,    -1,
     3316      -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3317    1130,    -1,    -1,  1133,    -1,    -1,   118,  1137,   120,   121,
     3318     122,    -1,    -1,    -1,    -1,  1077,    -1,    -1,    -1,    -1,
     3319    1150,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3320      -1,    -1,    -1,  1163,    -1,  1165,  1166,  1167,  1168,    -1,
     3321      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   161,
     3322      -1,  1181,    -1,  1183,    -1,    -1,    -1,  1187,    -1,    -1,
     3323      -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,   427,    -1,
     3324      -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,
     3325      -1,    -1,    -1,    -1,    -1,    -1,  1216,  1217,    -1,    -1,
     3326      -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,    -1,    -1,
     3327      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3328     222,    -1,   224,   225,   226,    -1,    -1,    -1,    -1,    -1,
     3329      -1,    -1,    -1,   482,    -1,    -1,    -1,    -1,    -1,    -1,
     3330      -1,    -1,    -1,    -1,    -1,   494,  1266,  1267,    -1,    -1,
     3331      -1,    -1,    -1,    -1,  1206,    -1,  1276,   506,   260,   508,
     3332      -1,    -1,   511,   265,   513,   514,    -1,    -1,    -1,    -1,
     3333      -1,    -1,    -1,    -1,    -1,    -1,    -1,   526,   280,    -1,
     3334      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3335      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
    33503336      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3351       26,    27,   345,    -1,   347,   591,    -1,    -1,    -1,    -1,
    3352       -1,    -1,    -1,    39,  1271,   358,   359,  1159,    -1,    -1,
    3353       -1,    -1,  1279,  1280,  1281,    -1,    -1,    -1,    -1,    -1,
    3354       -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
    3355       -1,    67,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   635,
    3356      636,   637,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3357     1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,
    3358       37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
    3359       -1,    -1,  1224,    -1,  1201,  1202,   672,    -1,  1345,    -1,
    3360       -1,    -1,    -1,    -1,  1236,    -1,  1238,   683,    -1,    66,
    3361       -1,    -1,    -1,    -1,    -1,    72,    -1,  1224,    -1,    76,
    3362       -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3363       87,    -1,    -1,   709,    -1,  1242,   712,    94,    -1,  1271,
    3364       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,
    3365       -1,    -1,   109,    -1,   111,    -1,    -1,   114,  1290,  1291,
    3366       -1,   118,   119,   120,   121,   122,   123,    -1,  1415,    -1,
    3367       -1,    -1,  1304,   749,    -1,    -1,    -1,    -1,    -1,    -1,
    3368       -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
    3369       -1,    -1,  1299,    -1,    -1,    -1,    -1,  1304,    -1,    -1,
     3337      26,    27,    28,    -1,    30,    31,    32,  1337,    -1,  1339,
     3338    1340,  1341,    -1,    39,    -1,    -1,   328,    -1,    -1,   578,
     3339      -1,  1351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3340    1360,   590,    -1,    -1,    -1,   594,    -1,    -1,   350,    -1,
     3341      -1,    67,    -1,   355,   356,    -1,    72,    -1,    74,    75,
     3342      76,   363,    78,    -1,    -1,  1385,    -1,    83,    84,    -1,
     3343      -1,   620,    -1,    -1,   147,    -1,   625,    -1,    -1,    -1,
     3344      -1,    -1,    -1,    -1,   157,   634,   635,   636,    -1,    44,
     3345      -1,    -1,    -1,   109,    -1,   111,   169,   170,    -1,    -1,
     3346      -1,   117,   118,   652,   406,    -1,    -1,    -1,  1428,  1429,
    33703347      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3371       -1,    -1,    -1,  1345,    -1,    -1,    -1,  1464,    -1,   795,
    3372       -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,   805,
    3373     1337,   807,    -1,    -1,    -1,    -1,   812,    -1,    -1,   815,
    3374       -1,    -1,    -1,   819,    -1,    10,    11,    12,    13,    14,
    3375       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3376       25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
    3377       -1,    -1,    67,    -1,    39,    -1,    -1,  1524,    -1,    -1,
    3378       -1,    -1,    77,  1415,    79,    -1,    81,    -1,    -1,    -1,
    3379       -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,
    3380       -1,    -1,    67,    -1,    -1,   881,    -1,    72,  1415,    74,
    3381       75,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,
    3382       -1,    -1,    -1,    -1,   119,    -1,   121,   122,   123,    94,
    3383       -1,    -1,  1464,  1440,    -1,   911,    -1,    -1,    -1,  1471,
    3384       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    26,
    3385       27,    28,    -1,   118,   119,    -1,    -1,  1464,    -1,    -1,
    3386       -1,    -1,    37,    38,  1471,    40,    -1,   162,   701,    -1,
    3387      703,    -1,    -1,    -1,    -1,    -1,    -1,   710,   711,    -1,
    3388       -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3389      966,    66,  1524,    50,   727,    -1,    -1,    72,    -1,   732,
    3390       -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3391       67,    86,    87,    -1,    -1,    -1,    -1,  1524,    -1,    94,
    3392       -1,    -1,    -1,   100,    -1,   102,    -1,    -1,   223,   762,
    3393      225,   226,   227,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3394       -1,    -1,   117,   118,   119,   120,   121,   122,   123,    -1,
    3395      127,  1027,  1028,    -1,  1030,  1031,    -1,    -1,   115,    -1,
    3396       -1,    -1,   119,    -1,    -1,    -1,   261,    -1,    -1,    -1,
    3397       -1,   266,    -1,    -1,  1050,    -1,    -1,    -1,   284,    -1,
    3398      286,   287,    -1,    -1,    -1,    -1,   281,    -1,   294,   295,
    3399       -1,   148,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3400       -1,   158,   308,   309,    -1,   162,   183,    -1,    -1,  1085,
    3401     1086,    -1,    -1,    -1,   191,    -1,   193,   194,    -1,    -1,
    3402       -1,   198,    -1,   200,   201,    -1,    -1,    -1,    -1,    -1,
    3403      863,   864,   865,   866,   329,   868,    -1,    -1,    -1,    -1,
    3404      346,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3405       -1,   884,    -1,    -1,   211,    -1,   351,    -1,    -1,    -1,
    3406       -1,   356,   357,    -1,    -1,   898,   223,    -1,    -1,   364,
    3407       -1,    -1,    -1,    -1,    -1,    -1,   382,    -1,    -1,    -1,
    3408       -1,    -1,    -1,  1159,   241,    -1,    -1,    -1,    -1,    -1,
    3409       -1,    -1,    -1,   270,    -1,    -1,    -1,    -1,    -1,    -1,
    3410       -1,    -1,    -1,    -1,    -1,   938,    -1,    -1,    -1,   266,
    3411       -1,    -1,   407,    -1,    -1,    -1,   273,    -1,    -1,    -1,
    3412       -1,    -1,    -1,    -1,    -1,    -1,  1202,    -1,    -1,    -1,
    3413      425,    -1,    -1,    -1,    -1,   430,    -1,   432,    -1,   296,
    3414       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1224,    -1,
    3415       -1,   308,   985,    -1,   449,    -1,    -1,   452,   453,   992,
    3416     1236,    -1,  1238,    -1,   997,   460,    -1,    -1,    -1,  1002,
    3417       -1,  1004,    -1,    -1,    -1,  1008,    -1,  1010,  1011,   474,
    3418       -1,  1014,    -1,    -1,    -1,    -1,   481,    -1,    -1,   346,
    3419     1023,    -1,    -1,    -1,   351,  1271,    -1,    -1,    -1,    -1,
    3420       -1,    -1,    -1,  1279,  1280,  1281,    -1,    -1,  1041,  1042,
    3421       -1,    -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,
    3422       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1304,    -1,
    3423       -1,    -1,    -1,    -1,    -1,  1068,    -1,    -1,  1071,    -1,
    3424       -1,    -1,    -1,    -1,   550,   551,   552,   553,   554,   555,
    3425      556,   557,   558,   559,   560,   561,   562,   563,   564,   565,
    3426      566,   567,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1345,
    3427      427,   428,    -1,    -1,    -1,    -1,    -1,   434,    -1,    -1,
    3428       -1,  1114,    -1,    -1,    -1,    -1,    -1,  1120,  1121,    -1,
    3429       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   455,  1132,
    3430      595,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1142,
    3431       -1,    -1,  1145,    -1,  1147,    -1,    -1,  1150,    -1,    -1,
    3432       -1,    -1,    -1,    -1,    -1,    -1,   483,    -1,   623,    -1,
    3433     1163,    -1,    -1,   628,    -1,    -1,    -1,    -1,   495,  1415,
    3434       -1,    -1,    -1,  1176,    -1,  1178,  1179,  1180,  1181,    -1,
    3435      507,    -1,   509,    -1,    -1,   512,    -1,   514,   515,    -1,
    3436       -1,  1194,    -1,  1196,    -1,    -1,    -1,  1200,    -1,    -1,
    3437      527,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3438       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,
    3439       -1,   697,    -1,    -1,    -1,  1471,  1229,  1230,   575,   576,
    3440       -1,    -1,    -1,    -1,    -1,   700,    -1,    -1,    -1,    -1,
    3441       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   714,
    3442       -1,    -1,   579,    -1,    -1,    -1,    -1,   604,    -1,    -1,
    3443      607,   608,    -1,   610,   591,   612,   613,    -1,   595,   734,
    3444      617,   618,    -1,    -1,    -1,    -1,    -1,    -1,  1524,  1282,
    3445     1283,    -1,    -1,    -1,   760,    -1,    -1,    -1,    -1,  1292,
    3446       -1,    -1,    -1,    -1,   621,    -1,    -1,    -1,    -1,   626,
    3447       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,
    3448      637,    -1,    -1,    -1,    -1,    -1,   792,    -1,    -1,     7,
    3449       -1,    -1,    10,    11,    12,    13,    14,   654,    -1,    -1,
    3450       -1,    -1,    -1,    -1,   799,    -1,    -1,    -1,    -1,    -1,
    3451     1343,    -1,    45,    -1,    -1,    -1,   811,    -1,    -1,    37,
    3452       38,    39,    40,  1356,    -1,  1358,  1359,  1360,    -1,   686,
    3453       -1,    -1,    -1,    -1,    -1,   830,    -1,  1370,    -1,    -1,
    3454       -1,    -1,    -1,    -1,    -1,    -1,  1379,    -1,    66,    67,
    3455       -1,    -1,    -1,    -1,    72,   712,    -1,   714,    76,    -1,
    3456       93,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3457      103,    -1,    -1,  1406,    -1,    -1,    94,    -1,    -1,    -1,
    3458       -1,   758,   759,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3459       -1,   109,   749,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3460      118,   119,   120,   121,   122,   123,    -1,   913,    -1,    -1,
    3461       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1451,  1452,
    3462       -1,    -1,    -1,    -1,    -1,    -1,   159,    -1,    -1,    -1,
    3463       -1,  1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,
    3464      173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   944,
    3465      807,    -1,   958,    -1,   811,    -1,    -1,    -1,   815,    -1,
    3466       -1,    -1,    -1,   196,    -1,    -1,    -1,    -1,    -1,    -1,
    3467       -1,  1504,    -1,    -1,    -1,  1508,    -1,   210,    -1,    -1,
    3468       -1,   976,    -1,    -1,    -1,    -1,   219,    -1,    -1,    -1,
    3469      996,    -1,    -1,    -1,    -1,    -1,   229,    -1,    -1,    -1,
    3470       -1,    -1,    -1,  1009,  1537,    -1,  1539,    -1,    -1,    -1,
    3471       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1012,    -1,    -1,
    3472       -1,   254,    -1,    -1,    -1,    -1,   259,    -1,  1023,    -1,
    3473       -1,    -1,    -1,    -1,  1567,  1568,    -1,    -1,    -1,   272,
    3474       -1,   918,  1575,  1576,  1050,   278,   923,   280,    -1,    -1,
    3475       -1,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
    3476       -1,    -1,    -1,    -1,   297,    -1,    -1,    -1,    -1,   926,
     3348      -1,  1441,   424,    -1,    -1,    -1,    -1,   429,  1448,   431,
     3349      37,    38,    -1,    40,    -1,   684,    -1,    92,    -1,    -1,
     3350      -1,    -1,    -1,    -1,    -1,    -1,   448,   102,    -1,   451,
     3351     452,    -1,    -1,    -1,    -1,    -1,    -1,   459,    -1,    66,
     3352    1480,   710,    -1,   712,  1484,    72,    -1,   240,    -1,    76,
     3353      -1,   473,    79,    80,    81,    82,    83,    84,   480,    86,
     3354      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3355      -1,   264,  1512,    -1,  1514,    -1,   745,    -1,    -1,    -1,
     3356      -1,    -1,   109,   158,   111,    -1,    -1,   114,    -1,    -1,
     3357     117,   118,   119,   120,   121,   122,    -1,   172,    -1,    -1,
     3358      -1,    -1,  1542,  1543,    -1,    -1,    -1,    -1,    -1,    -1,
     3359    1550,  1551,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3360     195,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3361      -1,    -1,   801,    -1,   209,    -1,   805,    -1,    -1,    -1,
     3362     809,    -1,    -1,   218,    -1,    -1,    -1,    -1,    -1,    -1,
     3363      -1,    -1,    -1,   228,    -1,    -1,    -1,    -1,    -1,    -1,
     3364      -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
     3365      -1,    -1,   594,    -1,    -1,    -1,    -1,    -1,   253,    -1,
     3366      -1,    -1,    -1,   258,    -1,    -1,    -1,   380,    -1,    -1,
     3367      -1,    -1,    -1,    66,    -1,    -1,   271,    -1,    -1,    72,
     3368     622,    -1,   277,    76,   279,   627,    79,    80,    81,    82,
     3369      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
     3370      -1,   296,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3371      -1,    -1,    -1,    -1,    -1,   904,   109,    -1,   111,    -1,
     3372      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
     3373     919,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3374      -1,    -1,    -1,   338,    -1,    -1,    -1,    -1,   343,    -1,
     3375      -1,    -1,    -1,    -1,   943,    -1,   698,    -1,    -1,    -1,
     3376      -1,   474,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3377     712,    -1,    -1,    -1,    -1,    -1,    -1,   372,    -1,    -1,
     3378      -1,   376,   377,    -1,   379,    -1,    -1,    -1,    -1,    -1,
     3379     732,   386,   387,    -1,   389,   390,    -1,   392,    -1,   394,
     3380     513,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3381     999,    -1,    -1,   526,    -1,    -1,   411,    -1,   531,    -1,
     3382      -1,   534,    -1,    -1,   419,    -1,    -1,    -1,    -1,    -1,
     3383      -1,  1020,  1021,   546,    -1,    -1,    -1,    -1,    -1,    -1,
     3384      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   444,
     3385      -1,   793,    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,
     3386      -1,    -1,    -1,   805,    -1,   578,    -1,    -1,    -1,    -1,
     3387      -1,    -1,   585,    -1,    -1,   470,    -1,   590,    -1,    -1,
     3388      -1,   476,   824,    -1,    -1,    -1,   481,    -1,    -1,    -1,
     3389      -1,  1080,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
     3390       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3391      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3392      27,    -1,   517,    30,    31,    32,   639,    -1,    -1,    -1,
     3393      -1,    -1,    39,    -1,   647,    -1,    -1,   532,    -1,    -1,
    34773394      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3478       -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,
    3479       -1,    -1,    -1,   950,    -1,    -1,    -1,    -1,    -1,    -1,
    3480     1095,    -1,    -1,    -1,    -1,    -1,   339,    -1,    -1,   966,
    3481       -1,   344,    -1,    66,  1109,    -1,    -1,    -1,    -1,    72,
    3482       -1,  1127,    -1,    76,    -1,    -1,    79,    80,    81,    82,
    3483       83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
    3484      373,    94,    -1,    -1,   377,   378,    -1,   380,    -1,    -1,
    3485       -1,    -1,  1009,    -1,   387,   388,   109,   390,   391,    -1,
    3486      393,    -1,   395,    -1,    -1,   118,   119,   120,   121,   122,
    3487      123,    -1,    -1,  1030,  1031,    -1,    -1,    -1,    -1,   412,
    3488       -1,    -1,    -1,    -1,  1190,  1191,    -1,   420,    -1,    -1,
     3395      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1146,    -1,    -1,
     3396      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
     3397      -1,    -1,    -1,    37,    38,   570,    40,    -1,    -1,    -1,
     3398      -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,    -1,
     3399      -1,   586,    -1,    -1,    -1,   937,    -1,   592,    -1,  1188,
     3400      -1,    -1,    66,    -1,   111,    -1,   601,    -1,    72,    -1,
     3401     117,   118,    76,    -1,    -1,    79,    80,    81,    82,    83,
     3402      84,    -1,    86,    87,    -1,   967,    -1,    -1,    -1,    -1,
     3403      -1,    -1,   745,    -1,   747,    -1,  1225,    -1,    -1,   156,
     3404     157,    -1,    -1,    -1,   757,   109,   641,   111,    -1,    -1,
     3405     763,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
     3406    1002,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3407      -1,  1013,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,
     3408     197,    -1,   677,    -1,    -1,  1274,  1275,    -1,    -1,    -1,
     3409     685,    -1,   805,   806,  1283,    -1,   809,    -1,    -1,    -1,
     3410      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   283,
     3411     823,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,   293,
     3412     294,   716,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3413      -1,   726,   727,   307,   308,    -1,    -1,    -1,    -1,    -1,
     3414      -1,    -1,    -1,  1085,    -1,    -1,    -1,    -1,    -1,    -1,
     3415     863,    -1,   269,    -1,   867,    -1,    -1,  1099,    -1,    -1,
     3416      -1,    -1,    -1,    -1,   759,    -1,    -1,    -1,    -1,   764,
     3417      -1,   345,    10,    11,    12,    13,    14,    15,    16,    17,
     3418      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3419      -1,   904,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
     3420      -1,    39,    40,    -1,    -1,  1394,   323,   381,    -1,    -1,
     3421      -1,    -1,    -1,    -1,   331,   332,    -1,   334,   335,    -1,
     3422      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   345,    67,
     3423     943,    -1,   349,   828,    -1,    -1,    74,    75,    -1,    -1,
     3424     835,    -1,    -1,    -1,    -1,    -1,  1188,    -1,    -1,    -1,
     3425      -1,   368,    -1,   848,   371,   850,    -1,    -1,   971,    -1,
     3426      -1,  1450,    -1,  1452,   977,    -1,    -1,    -1,   981,   864,
     3427      -1,    -1,    -1,   111,    -1,   870,    -1,   115,    -1,   117,
     3428     118,   398,    -1,    -1,    -1,   402,    -1,   882,    -1,  1002,
     3429     885,    -1,    -1,    -1,    -1,    -1,    -1,  1486,    -1,  1488,
     3430    1013,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3431      -1,    -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    -1,
     3432      -1,    -1,  1035,    -1,  1037,    -1,  1515,    -1,    -1,    -1,
     3433      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1052,
     3434    1053,  1283,    10,    11,    12,    13,    14,    15,    16,    17,
     3435      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3436    1073,    -1,   479,    -1,    -1,   482,    -1,   962,    -1,    -1,
     3437      -1,    39,    -1,    -1,    -1,   549,   550,   551,   552,   553,
     3438     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
     3439     564,   565,   566,    -1,    -1,    -1,    -1,    37,    38,    67,
     3440      40,    -1,   997,    -1,   521,    -1,    -1,    -1,   525,   526,
     3441      -1,    -1,    -1,    -1,    -1,  1128,    -1,    -1,    -1,    -1,
     3442      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,
     3443      -1,    -1,    72,  1146,    -1,    -1,    76,    -1,    -1,    79,
     3444      80,    81,    82,    83,    84,    -1,    86,    87,  1161,  1162,
     3445      -1,    -1,    -1,   570,   571,    -1,    -1,    -1,    -1,    -1,
     3446    1055,    -1,    -1,    -1,    -1,    -1,  1061,    -1,    -1,   109,
     3447      -1,   111,   589,   590,   114,    -1,    -1,   117,   118,   119,
     3448     120,   121,   122,   600,    -1,   602,   603,    -1,    -1,    -1,
     3449      -1,    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3450    1095,    -1,   619,   620,    -1,  1100,    -1,    -1,   625,    -1,
     3451      -1,    -1,    -1,  1108,    -1,    -1,    -1,   634,   635,   636,
     3452      -1,   695,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3453      -1,    -1,    -1,    -1,    -1,   652,    -1,    -1,    -1,    -1,
     3454     657,   658,    -1,    -1,   661,   662,  1141,    -1,    -1,    -1,
     3455      -1,   668,    -1,    -1,    -1,    -1,    -1,    -1,  1153,    -1,
     3456      -1,  1156,    -1,  1158,    -1,    -1,    -1,    -1,    -1,    -1,
     3457     687,    -1,    -1,    -1,    -1,    -1,    -1,  1172,  1173,    -1,
     3458      -1,    -1,   756,    -1,    -1,    -1,    -1,    -1,  1530,  1302,
     3459      -1,    -1,  1305,   710,   711,    -1,    -1,    -1,    -1,  1194,
    34893460      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3490       -1,    -1,    -1,    -1,    -1,    -1,  1201,    -1,    -1,    -1,
    3491     1087,    -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3461      -1,    -1,   786,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3462      -1,    -1,    -1,    -1,    -1,    -1,    -1,   744,   745,    -1,
     3463      -1,    -1,   749,   750,    -1,    -1,    -1,    -1,    -1,    -1,
     3464      -1,    -1,    -1,    -1,    -1,    -1,  1241,    -1,    -1,    -1,
     3465      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3466      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
     3467      -1,    30,    31,    32,    -1,    -1,   793,    -1,    -1,    -1,
     3468      39,    -1,    -1,    -1,   801,    -1,    -1,    -1,    -1,    -1,
     3469      -1,   808,   809,    -1,    -1,   812,    -1,   814,    -1,    -1,
     3470      -1,    -1,    -1,    -1,    -1,    -1,    -1,   824,    67,    -1,
     3471      -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    78,
     3472      -1,  1316,    -1,  1318,    83,    84,    -1,    -1,    -1,    -1,
     3473      -1,    -1,   906,    -1,    -1,  1330,    -1,  1332,    -1,    -1,
    34923474      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3493       -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,   471,    -1,
    3494       -1,    -1,    -1,    -1,   477,    -1,    -1,     0,    -1,   482,
    3495        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3496       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3497       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3498       33,    -1,    -1,    36,    -1,   518,    39,    40,    -1,    -1,
     3475      -1,    -1,   111,    -1,  1349,    -1,    -1,    -1,   117,   118,
    34993476      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3500      533,    -1,  1159,    -1,  1299,    -1,    -1,    -1,    -1,    -1,
    3501       -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
    3502       -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
    3503       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,   571,    -1,
    3504       -1,    94,  1219,    -1,  1201,    -1,    -1,   580,    -1,   157,
    3505      158,    -1,    -1,    -1,   587,    -1,   109,    -1,   111,    -1,
    3506      593,    -1,    -1,    -1,    -1,   118,   119,    -1,    -1,   602,
     3477    1365,  1366,    -1,    -1,    -1,    -1,    -1,   951,    -1,   896,
     3478      -1,  1376,    -1,    -1,  1379,    -1,   903,   904,   905,    -1,
     3479     907,    -1,    -1,    -1,   911,    -1,    -1,    -1,    -1,    -1,
     3480      -1,    -1,  1515,    -1,    -1,  1400,    -1,    -1,    -1,    -1,
     3481      -1,    -1,   986,    -1,  1409,   932,   933,  1412,    -1,  1414,
     3482    1415,  1416,    -1,    -1,    -1,   999,    10,    11,    12,    13,
     3483      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3484      24,    25,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
     3485     967,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,  1454,
     3486      -1,  1456,    -1,  1458,    -1,    -1,  1040,    -1,    -1,    -1,
     3487      -1,   988,   989,    -1,    -1,    -1,    -1,    -1,  1473,    -1,
     3488      -1,    -1,   999,    67,    -1,    -1,    -1,    -1,  1005,  1006,
     3489      -1,  1008,  1009,  1010,    78,    -1,    -1,    -1,    -1,    -1,
     3490      -1,    -1,    -1,  1020,  1021,    -1,    -1,    -1,    -1,    -1,
     3491      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
     3492       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3493      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3494      26,    27,    -1,  1117,    30,    31,    32,    33,    -1,    -1,
     3495      36,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
     3496      -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,  1085,    -1,
     3497      -1,    -1,    -1,  1090,    -1,    -1,    -1,    -1,    -1,    -1,
     3498      66,    67,  1099,    69,    -1,    71,    72,    -1,    74,    75,
     3499      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
     3500      86,    87,    -1,  1177,  1178,  1122,  1123,  1124,    -1,    -1,
    35073501      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3508       -1,  1238,    -1,   191,    -1,    -1,    -1,    -1,    -1,    -1,
    3509      198,    -1,    -1,    -1,    -1,  1401,    -1,    -1,    -1,    -1,
    3510       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3511      643,    -1,    -1,  1419,    -1,    -1,    -1,    -1,    -1,    -1,
    3512       -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
    3513       -1,    -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,    -1,
    3514       -1,    -1,  1299,    -1,    -1,    -1,   679,    -1,    -1,    -1,
    3515       66,    -1,    -1,    -1,   687,    -1,    72,    -1,    -1,    -1,
    3516       76,    -1,   270,    79,    80,    81,    82,    83,    84,    -1,
    3517       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    3518       -1,    -1,    -1,    -1,    -1,   718,  1492,  1493,    -1,    -1,
    3519       -1,    -1,    -1,   109,    -1,   728,   729,    -1,    -1,    -1,
    3520       -1,    -1,   118,   119,   120,   121,   122,   123,    -1,   742,
    3521       -1,    -1,    -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,
    3522       -1,    -1,    -1,    -1,   332,   333,    -1,   335,   336,    -1,
    3523      763,    -1,   765,    -1,    -1,    -1,   769,    -1,   346,    -1,
    3524       -1,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3525       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1415,    -1,
    3526     1555,   369,    -1,    -1,   372,    10,    11,    12,    13,    14,
    3527       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3528       25,    26,    27,    28,    -1,    30,    31,    32,    -1,    -1,
    3529       -1,   399,    -1,    -1,    39,   403,    -1,    -1,    -1,    -1,
    3530       -1,   834,    -1,    -1,    -1,    -1,    -1,    -1,   841,    -1,
    3531       -1,    -1,    -1,    -1,    -1,    -1,  1473,    -1,  1475,    -1,
    3532       -1,   854,    67,   856,    -1,    -1,   434,    72,    -1,    74,
    3533       75,    76,    -1,    78,    -1,    -1,    -1,   870,    83,    84,
    3534       -1,    -1,    -1,    -1,   877,    -1,    -1,    -1,    -1,    94,
    3535       -1,    -1,    -1,  1510,   148,  1512,   889,    -1,    -1,   892,
    3536       -1,    -1,    -1,    -1,   158,    -1,   111,    -1,    -1,    -1,
    3537       -1,    -1,   480,   118,   119,   483,   170,   171,    -1,    -1,
    3538       -1,    -1,    -1,  1540,     3,     4,     5,     6,     7,     8,
    3539        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3540       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3541       -1,    30,    31,    32,   522,    -1,    -1,    -1,   526,   527,
    3542       39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3543       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   971,    -1,
    3544       -1,    -1,    -1,    -1,    -1,    -1,    -1,   241,    67,    -1,
    3545       69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
    3546       -1,    -1,    -1,   571,   572,    -1,    -1,    -1,    -1,    -1,
    3547       -1,   265,    -1,    -1,  1007,    94,    -1,    -1,    -1,    -1,
    3548       -1,    -1,   590,   591,    -1,    -1,    -1,    -1,    -1,    -1,
    3549       -1,    -1,   111,   601,    -1,   603,   604,    -1,    -1,   118,
    3550      119,    -1,   610,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3551       -1,    -1,   620,   621,    -1,    -1,    -1,    -1,   626,    -1,
    3552       -1,    -1,    -1,    -1,    -1,    -1,    -1,   635,   636,   637,
    3553       -1,    -1,  1065,    -1,    -1,    -1,    -1,    -1,  1071,    -1,
    3554       -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,    -1,
    3555       -1,   659,   660,    -1,    -1,   663,   664,    -1,    -1,    -1,
    3556       -1,    -1,   670,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3557       -1,    -1,  1105,    -1,    -1,    -1,    -1,  1110,    -1,    -1,
    3558       -1,   689,    -1,    -1,    -1,  1118,    -1,   381,    -1,    -1,
    3559       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3560       -1,    -1,    -1,    -1,   712,   713,    -1,    -1,    -1,    -1,
    3561       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3562       -1,  1154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3563       -1,    -1,    -1,  1166,    -1,    -1,  1169,    -1,  1171,    -1,
    3564      748,   749,    -1,    -1,    -1,   753,   754,    -1,    -1,    -1,
    3565       -1,    -1,  1185,  1186,    -1,    -1,    -1,    -1,    -1,    -1,
    3566       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3567       -1,    -1,    -1,    -1,  1207,    -1,    -1,    -1,    -1,    -1,
    3568       -1,   475,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
    3569       -1,   799,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   807,
    3570       -1,    -1,    -1,    -1,    -1,    -1,   814,   815,    -1,    -1,
    3571      818,    66,   820,    -1,    -1,    -1,    -1,    72,    -1,    -1,
    3572      514,    76,   830,  1256,    79,    80,    81,    82,    83,    84,
    3573       -1,    86,    87,   527,    -1,    -1,    -1,    -1,   532,    94,
    3574       -1,   535,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3575       -1,    -1,   546,   547,   109,    -1,   111,    -1,    -1,    -1,
    3576       -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3577       -1,    -1,    -1,    -1,    -1,   569,    -1,    -1,    -1,    -1,
    3578       -1,    -1,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,
    3579       -1,    -1,   586,    -1,    -1,   903,    -1,   591,    -1,  1332,
    3580       -1,  1334,   910,   911,   912,    -1,   914,    -1,    -1,    -1,
    3581      918,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,    -1,
    3582       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3583       -1,   939,   940,    -1,    -1,  1368,    -1,    -1,    -1,    -1,
    3584       -1,    -1,    -1,    -1,    -1,    -1,   640,    -1,    -1,    -1,
    3585       -1,  1384,  1385,    -1,    -1,   649,    -1,    -1,   966,    -1,
    3586       -1,    -1,  1395,    -1,    -1,  1398,    -1,    -1,   976,    10,
    3587       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3588       21,    22,    23,    24,    25,    26,    27,    28,  1421,    -1,
    3589      998,   999,    -1,    -1,    -1,    -1,    -1,  1430,    39,    -1,
    3590     1433,  1009,  1435,  1436,  1437,    -1,    -1,  1015,  1016,    -1,
    3591     1018,  1019,  1020,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3592       -1,    -1,  1030,  1031,    -1,    -1,    67,    -1,    -1,    -1,
    3593       -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
    3594       -1,    -1,    -1,    -1,  1477,    -1,  1479,    -1,  1481,    -1,
    3595       -1,    -1,    -1,    -1,    -1,   749,    -1,   751,    -1,    -1,
    3596       -1,    -1,    -1,    -1,  1497,    -1,    -1,   761,    -1,    -1,
    3597       -1,    -1,    -1,    -1,   768,    -1,    -1,    -1,    -1,    -1,
    3598       -1,    -1,    -1,    -1,    -1,  1093,    -1,  1095,    -1,    -1,
    3599       -1,    -1,  1100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3600       -1,  1109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,
    3601       -1,    -1,    10,    11,    12,    13,    14,   811,   812,    -1,
    3602       -1,   815,    -1,    -1,    -1,    -1,  1134,  1135,  1136,    -1,
    3603       -1,    -1,    -1,    -1,    -1,   829,    -1,    -1,    -1,    37,
    3604       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3605       -1,  1159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3606       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3607       -1,    -1,    -1,    -1,    72,   869,    -1,    -1,    76,   873,
    3608       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3609       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3610       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3611       -1,   109,  1220,   111,    -1,    -1,    -1,   911,    -1,    -1,
    3612      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3613     1238,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3614       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3615       23,    24,    25,    26,    27,    -1,   950,    30,    31,    32,
    3616       -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
    3617       -1,    -1,   966,   967,    -1,    -1,    -1,    -1,    -1,    -1,
    3618       -1,    -1,  1290,  1291,    -1,    -1,   980,    -1,    -1,    -1,
    3619       -1,    -1,   986,    66,    67,   989,    69,   991,    71,    72,
    3620       -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
    3621       83,    84,    -1,    86,    87,    -1,    -1,    -1,  1012,    -1,
    3622       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,
    3623       -1,    37,    38,    -1,    40,    -1,   109,    -1,   111,    -1,
    3624       -1,    -1,    -1,   116,    -1,   118,   119,   120,   121,   122,
    3625      123,  1045,    -1,  1047,    -1,    -1,    -1,    -1,    -1,    -1,
    3626       66,    -1,    -1,    -1,    -1,    -1,    72,    -1,  1062,  1063,
    3627       76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
    3628       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,  1083,
    3629       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3630       -1,    -1,    -1,   109,    -1,   111,    -1,  1415,   114,    -1,
    3631       -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
    3632       -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    3633       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3634       22,    23,    24,    25,    26,    27,  1140,    -1,    30,    31,
    3635       32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
    3636       -1,    -1,    -1,    -1,    -1,  1159,    -1,    -1,    -1,    -1,
    3637       -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
    3638     1174,  1175,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
    3639       72,    -1,    74,    75,    76,    -1,    -1,  1505,    -1,    -1,
    3640       66,    83,    84,    -1,    -1,    -1,    72,    -1,    -1,    -1,
    3641       76,    -1,    94,    79,    80,    81,    82,    83,    84,    -1,
    3642       86,    87,  1530,  1531,    -1,    -1,    -1,   109,    94,   111,
    3643       -1,    -1,    -1,   115,    -1,    -1,   118,   119,    -1,    -1,
    3644       -1,    -1,    -1,   109,    -1,   111,    -1,  1555,    -1,    -1,
    3645       -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
    3646     1254,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
    3647       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3648       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3649       31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
    3650       41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
    3651       51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
    3652       61,    62,    -1,    64,  1318,    66,    67,  1321,    69,    -1,
    3653       71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3654       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3655       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3657      111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
    3658      121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
    3659       -1,   132,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3660       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3661       -1,  1405,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
     3502      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,  1146,
     3503      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
     3504      -1,    -1,    -1,    -1,    -1,    -1,   132,    -1,     3,     4,
    36623505       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    36633506      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    36643507      25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
    3665       -1,    36,    37,    38,    39,    40,    10,    11,    12,    13,
     3508      -1,    36,    37,    38,    39,    40,    41,    -1,    43,    -1,
     3509    1207,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
     3510      -1,    -1,    57,    -1,    -1,    -1,    61,    62,  1225,    64,
     3511      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
     3512      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3513      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3514      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3515      -1,    -1,    -1,    -1,   109,    -1,   111,  1274,  1275,   114,
     3516      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
     3517      -1,    -1,   127,    -1,    -1,    -1,    -1,   132,    -1,    -1,
     3518      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
     3519      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3520      21,    22,    23,    24,    25,    26,    27,    -1,  1382,    30,
     3521      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
     3522      -1,    -1,    -1,    -1,  1398,    -1,    -1,    -1,    -1,    -1,
     3523      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3524      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
     3525      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3526      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3527      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1394,    -1,    -1,
     3528      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3529     111,    -1,    -1,    -1,  1468,  1469,   117,   118,   119,   120,
     3530     121,   122,    -1,     4,     5,     6,     7,     8,     9,    10,
     3531      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3532      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3533      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
     3534      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3535      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3536      27,    28,    -1,    -1,  1481,    66,    67,    -1,    69,    -1,
     3537      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
     3538      81,    82,    83,    84,    -1,    86,    87,    -1,  1505,  1506,
     3539      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3540      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
     3541     111,    78,    -1,  1530,    -1,   116,   117,   118,   119,   120,
     3542     121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
     3543      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3544      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3545      32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,
     3546      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3547      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
     3548      31,    32,    -1,    -1,    66,    67,    -1,    69,    39,    71,
     3549      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
     3550      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     3551      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
     3552      -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,   111,
     3553      -1,    -1,    83,    84,   116,   117,   118,   119,   120,   121,
     3554     122,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3555      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3556      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3557      -1,    -1,    -1,    -1,    37,    38,    39,    40,    10,    11,
     3558      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3559      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3560      32,    -1,    -1,    66,    67,    -1,    69,    39,    71,    72,
     3561      -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
     3562      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
     3563      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
     3564      -1,    -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,
     3565      -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
     3566       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    36663567      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    36673568      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3668       -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
    3669       75,    76,    -1,  1487,    79,    80,    81,    82,    83,    84,
    3670       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3671       -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,
    3672       74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    83,
    3673       84,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3674       -1,    -1,    -1,    -1,    -1,    -1,  1540,   132,     3,     4,
    3675        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3676       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3677       25,    26,    27,    -1,    -1,    30,    31,    32,    33,    -1,
    3678       -1,    36,    37,    38,    39,    40,    -1,    -1,    -1,    10,
    3679       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3680       21,    22,    23,    24,    25,    26,    27,    28,    -1,    -1,
    3681       -1,    66,    67,    -1,    69,    -1,    71,    72,    39,    74,
    3682       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3683       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3684       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
    3685       -1,    -1,    -1,    -1,   109,    -1,   111,    78,    -1,    -1,
    3686       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
    3687        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3688       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3689       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3690       -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
    3691       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3692       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3693       -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
    3694       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3695       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3696       -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
    3697       74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3698       -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
    3699        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3700       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3701       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3702       -1,    -1,    37,    38,    39,    40,    10,    11,    12,    13,
    3703       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3704       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3705       -1,    66,    67,    -1,    69,    39,    71,    72,    -1,    74,
    3706       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3707       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3708       -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,
    3709       74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3710       -1,   116,    -1,   118,   119,   120,   121,   122,   123,     4,
     3569      -1,    -1,    -1,    37,    38,    39,    40,    10,    11,    12,
     3570      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3571      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3572      -1,    -1,    66,    67,    -1,    69,    39,    71,    72,    -1,
     3573      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
     3574      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     3575      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,
     3576      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
     3577      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,     4,
    37113578       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    37123579      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     
    37173584      -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
    37183585      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3719       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
     3586      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37203587      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37213588      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3722       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
    3723        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3724       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3725       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3726       -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
     3589      -1,    -1,   117,   118,   119,   120,   121,   122,     4,     5,
     3590       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3591      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3592      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     3593      -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
    37273594      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37283595      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3729       -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
    3730       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3731       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
     3596      66,    67,    -1,    69,    -1,    71,    72,    -1,    74,    75,
     3597      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
     3598      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37323599      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3733       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3734       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
    3735        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3736       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3737       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3738       -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
     3600      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
     3601      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
     3602       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3603      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3604      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3605      37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
    37393606      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3607      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
     3608      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
     3609      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3610      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37403611      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3741       -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
    3742       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3743       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3744       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3745       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3746       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     4,
    3747        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3748       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3749       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3750       -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
    3751       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3752       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3753       -1,    66,    67,    -1,    69,    -1,    71,    72,    -1,    74,
    3754       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3755       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3756       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3757       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3758       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,     3,
     3612      -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
     3613     117,   118,   119,   120,   121,   122,     0,    -1,    -1,     3,
    37593614       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    37603615      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     
    37663621      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
    37673622      84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3768       94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3623      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37693624      -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
    3770       -1,    -1,    -1,    -1,   118,   119,     3,     4,     5,     6,
     3625      -1,    -1,    -1,   117,   118,     3,     4,     5,     6,     7,
     3626       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3627      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3628      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
     3629      -1,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3630      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3631      -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    67,
     3632      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
     3633      -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,    -1,
     3634      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3635      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3636      -1,   109,    -1,   111,    -1,    -1,    -1,   115,    -1,   117,
     3637     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
     3638      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3639      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3640      32,    33,    -1,    -1,    36,    -1,    -1,    39,    40,    -1,
     3641      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3642      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3643      -1,    -1,    64,    -1,    -1,    67,    -1,    69,    -1,    71,
     3644      72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
     3645      -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3646      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3647      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
     3648      -1,    -1,    -1,    -1,    -1,   117,   118,     3,     4,     5,
     3649       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3650      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3651      26,    27,    -1,    -1,    30,    31,    32,    33,    -1,    -1,
     3652      36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
     3653      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3654      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3655      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
     3656      -1,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3657      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3658      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3659      -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,
     3660      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3661      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3662      -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,
     3663      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
     3664      83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3665      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3666      -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
     3667      -1,    -1,    -1,    -1,   117,   118,     4,     5,     6,     7,
     3668       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3669      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3670      -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
     3671      -1,    39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
     3672      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3673      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
     3674      -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
     3675       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3676      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3677      25,    26,    27,    67,    -1,    30,    31,    32,    -1,    -1,
     3678      74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,   117,
     3679     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3680      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3681      -1,    -1,    67,    -1,    69,   109,    71,   111,    -1,    74,
     3682      75,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,
     3683      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3684      -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3685      -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
     3686      -1,    -1,   117,   118,     4,     5,     6,     7,     8,     9,
     3687      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3688      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3689      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
     3690      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3691      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3692      27,    -1,    -1,    30,    31,    32,    -1,    67,    -1,    69,
     3693      -1,    71,    39,    40,    74,    75,    -1,    -1,    -1,    -1,
     3694      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3695      -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,
     3696      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
     3697      -1,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,     4,
     3698       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3699      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3700      25,    26,    27,    -1,   111,    30,    31,    32,   115,    -1,
     3701     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
     3702      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3703      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3704      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
     3705      75,    -1,     4,     5,     6,     7,     8,     9,    10,    11,
     3706      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3707      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3708      32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,
     3709      -1,    -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,
     3710      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3711      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
     3712      -1,    -1,    74,    75,    -1,     4,     5,     6,     7,     8,
     3713       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3714      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3715      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,
     3716      39,    -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,
     3717      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3718      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     3719      69,    -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,
     3720       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     3721      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3722      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
     3723      -1,    -1,   111,    39,    -1,    -1,    -1,    -1,   117,   118,
     3724      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3725      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3726      -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,
     3727      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3728      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3729      30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,
     3730      40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
     3731      -1,   117,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3732      -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
     3733      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,
     3734      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
     3735      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3736      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
     3737      -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,   119,
     3738     120,   121,   122,    10,    11,    12,    13,    14,    15,    16,
     3739      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3740      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3741      37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
     3742      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3743      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
     3744      67,    -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,
     3745      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3746      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3747      -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,
     3748      76,    -1,   109,   110,   111,    -1,    -1,    83,    84,    -1,
     3749     117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
     3750      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3751      24,    25,    26,    27,    -1,   111,    30,    31,    32,    -1,
     3752      -1,   117,   118,    37,    38,    39,    40,    10,    11,    12,
     3753      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3754      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
     3755      -1,    -1,    66,    67,    -1,    -1,    39,    -1,    72,    -1,
     3756      74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
     3757      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     3758      -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
     3759      -1,    74,    75,    -1,    -1,   109,    -1,   111,    -1,    -1,
     3760      83,    84,    -1,   117,   118,   119,   120,   121,   122,    10,
     3761      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3762      21,    22,    23,    24,    25,    26,    27,    -1,   111,    30,
     3763      31,    32,    -1,    -1,   117,   118,    37,    38,    39,    40,
     3764      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3765      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3766      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
     3767      40,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
     3768      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     3769      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
     3770      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
     3771     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
     3772     121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
     3773      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3774      -1,   111,    30,    31,    32,   115,    -1,   117,   118,    37,
     3775      38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
     3776      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3777      27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
     3778      -1,    -1,    39,    -1,    72,    -1,    74,    75,    76,    -1,
     3779      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3780      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3781      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
     3782      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
     3783     118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
     3784      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3785      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
     3786     117,   118,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
     3787      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3788      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3789      27,    66,    67,    30,    31,    32,    -1,    72,    -1,    74,
     3790      75,    76,    39,    -1,    79,    80,    81,    82,    83,    84,
     3791      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3792      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3793      67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,
     3794      -1,    -1,   117,   118,   119,   120,   121,   122,     3,     4,
     3795       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3796      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3797      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
     3798     117,   118,    -1,    -1,    39,    -1,    -1,    -1,    10,    11,
     3799      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3800      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3801      32,    -1,    67,    -1,    69,    -1,    71,    39,    -1,    74,
     3802      75,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
     3803      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3804      24,    25,    26,    27,    -1,    67,    30,    31,    32,    -1,
     3805      72,    -1,    74,    75,    76,    39,    -1,    -1,    -1,   114,
     3806      -1,    83,    84,    -1,    10,    11,    12,    13,    14,    15,
     3807      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3808      26,    27,    -1,    67,    30,    31,    32,   109,    72,   111,
     3809      74,    75,    76,    39,    -1,   117,   118,    -1,    -1,    83,
     3810      84,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     3811      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3812      -1,    67,    30,    31,    32,   109,    72,   111,    74,    75,
     3813      76,    39,    -1,   117,   118,    -1,    -1,    83,    84,    -1,
     3814      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3815      20,    21,    22,    23,    24,    25,    26,    27,    28,    67,
     3816      30,    31,    32,   109,    72,   111,    74,    75,    76,    39,
     3817      -1,   117,   118,    -1,    -1,    83,    84,    -1,    10,    11,
     3818      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3819      22,    23,    24,    25,    26,    27,    28,    67,    30,    31,
     3820      32,   109,    -1,   111,    74,    75,    -1,    39,    78,   117,
     3821     118,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3822      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3823      -1,    30,    31,    32,    -1,    67,    -1,    -1,    -1,   109,
     3824      39,   111,    74,    75,    -1,    -1,    78,   117,   118,    10,
     3825      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3826      21,    22,    23,    24,    25,    26,    27,    -1,    67,    30,
     3827      31,    32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,
     3828      -1,    -1,    -1,    -1,    -1,   117,   118,    10,    11,    12,
     3829      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3830      23,    24,    25,    26,    27,    -1,    67,    30,    31,    32,
     3831      -1,    -1,   111,    74,    75,    -1,    39,    -1,   117,   118,
     3832      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3833      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
     3834      30,    31,    32,    -1,    67,    -1,    -1,    -1,    -1,    39,
     3835     111,    74,    75,    -1,    -1,    -1,   117,   118,    10,    11,
     3836      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3837      22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
     3838      32,    -1,    -1,    -1,    74,    75,    -1,    39,   111,    -1,
     3839      -1,    -1,    -1,    -1,   117,   118,    -1,    -1,    -1,    -1,
     3840      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3841      -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
     3842      -1,   111,    74,    75,    -1,    -1,    -1,   117,   118,     4,
     3843       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3844      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3845      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,   111,
     3846      -1,    -1,    -1,    -1,    39,   117,   118,    -1,    -1,    -1,
     3847      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3848      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3849      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
     3850      75,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
     3851      46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
     3852      56,    57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,
     3853      66,    -1,    -1,    -1,    -1,   110,    72,    -1,    -1,    -1,
     3854      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
     3855      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3856      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3857      -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
     3858      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    37,
     3859      38,   127,    40,    41,    -1,    43,   132,    -1,    46,    47,
     3860      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
     3861      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,
     3862      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
     3863      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
     3864      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3865      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3866      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,
     3867     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
     3868      -1,    -1,    -1,    -1,   132,     4,     5,     6,     7,     8,
     3869       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3870      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3871      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
     3872      39,    -1,    37,    38,    -1,    40,    41,    -1,    43,    44,
     3873      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
     3874      -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,    64,
     3875      69,    66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,
     3876      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3877      -1,    86,    87,    -1,    -1,    -1,    -1,    96,    -1,    -1,
     3878      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3879      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
     3880      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
     3881      37,    38,   127,    40,    41,    -1,    43,    44,    45,    46,
     3882      47,    48,    49,    50,    51,    52,    53,    -1,    -1,    -1,
     3883      57,    -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,
     3884      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
     3885      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
     3886      87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3887      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3888      -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,
     3889     117,   118,   119,   120,   121,   122,    -1,    -1,    37,    38,
     3890     127,    40,    41,    -1,    43,    -1,    -1,    46,    47,    48,
     3891      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
     3892      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
     3893      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
     3894      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     3895      -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    -1,
     3896      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3897     109,    -1,   111,    -1,    -1,   114,    -1,    -1,   117,   118,
     3898     119,   120,   121,   122,    66,    -1,    -1,    -1,   127,    -1,
     3899      72,    -1,    74,    75,    76,    -1,    -1,    79,    80,    81,
     3900      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     3901      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
     3902      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
     3903      -1,   113,   114,    -1,    -1,   117,   118,   119,   120,   121,
     3904     122,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
     3905      -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
     3906      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    37,
     3907      38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3908      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    37,    38,
     3909      -1,    40,   117,   118,   119,   120,   121,   122,    66,    -1,
     3910      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
     3911      -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
     3912      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
     3913      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
     3914      -1,   109,    -1,   111,    -1,    37,    38,    -1,    40,   117,
     3915     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,    -1,
     3916     109,    -1,    -1,    -1,    37,    38,    -1,    40,   117,   118,
     3917     119,   120,   121,   122,    66,    -1,    -1,    -1,    -1,    -1,
     3918      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
     3919      82,    83,    84,    66,    86,    87,    -1,    -1,    -1,    72,
     3920      -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
     3921      83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,    -1,
     3922      -1,    37,    38,    -1,    40,   117,   118,   119,   120,   121,
     3923     122,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
     3924      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
     3925      66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
     3926      76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
     3927      86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3928      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3929      -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,
     3930      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
    37713931       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    37723932      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3773       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3774       -1,    -1,    39,    -1,    10,    11,    12,    13,    14,    15,
    3775       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3776       26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
    3777       67,    -1,    69,    39,    71,    72,    -1,    74,    75,    76,
    3778       -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
    3779       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3780       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
    3781       -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    3782       -1,   118,   119,     3,     4,     5,     6,     7,     8,     9,
    3783       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3784       20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
    3785       30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,    39,
    3786       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3787       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3788       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
    3789       -1,    71,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
    3790       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3791       -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,
    3792       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3793       -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
    3794        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3795       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3796       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3797       33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
    3798       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3799       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3800       -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
    3801       -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3802       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3803       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3804       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
    3805       -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
    3806        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3807       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3808       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
     3933      27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    38093934      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    38103935      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    38113936      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    38123937      67,    -1,    69,    -1,    71,    72,    -1,    74,    75,    76,
    3813       -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
    3814       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3815       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3816       -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    3817       -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
    3818       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3819       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3820       31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
    3821       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3822       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3823       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
    3824       71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
    3825       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3826       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3827       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
    3828      111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
     3938      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,     3,     4,
    38293939       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    38303940      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     
    38343944      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    38353945      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
    3836       75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3837       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3838       -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3839       -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
    3840       -1,    -1,    -1,   118,   119,     4,     5,     6,     7,     8,
    3841        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3842       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3843       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
    3844       39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3845       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3846       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
    3847       69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,
    3848       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3849       -1,    -1,    -1,    -1,    -1,    94,    -1,    96,    -1,    -1,
    3850       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3851       -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
    3852      119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3853       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3854       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3855       -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,
     3946      75,     3,     4,     5,     6,     7,     8,     9,    10,    11,
     3947      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3948      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
     3949      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    38563950      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    38573951      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3858       -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
    3859       -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3860       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3861       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3862       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,
    3863       -1,    -1,    -1,    -1,    -1,   118,   119,     4,     5,     6,
    3864        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3865       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3866       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3867       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3868       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3869       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3870       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
    3871       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3872       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3873       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3874       -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    3875       -1,   118,   119,     4,     5,     6,     7,     8,     9,    10,
    3876       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3877       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3878       31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,
    3879       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3880       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3881       -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
    3882       71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
    3883       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3884       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3885       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3886      111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,     4,
    3887        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3888       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3889       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3890       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
    3891       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3892       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3893       -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
    3894       75,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3895       19,    20,    21,    22,    23,    24,    25,    26,    27,    94,
    3896       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
    3897       39,    40,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
    3898       -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
    3899       -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
    3900       -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
    3901       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    3902       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
    3903       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3904      109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
    3905      119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
    3906       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3907       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3908       -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
    3909       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3910       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3911       -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
    3912       75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3913       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3914       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3915       -1,    -1,    -1,    -1,   109,   110,   111,    -1,    -1,    -1,
    3916       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
    3917       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    3918       21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
    3919       31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
    3920       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3921       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3922       -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
    3923       -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
    3924       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3925       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3926       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    3927      111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
    3928      121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
    3929       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3930       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3931       37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,
    3932       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3933       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
    3934       67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
    3935       -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3936       87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3937       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3938       -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    3939       -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
    3940       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3941       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3942       -1,    -1,    -1,    -1,    37,    38,    39,    40,    -1,    -1,
    3943       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3944       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3945       -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
    3946       -1,    74,    75,    76,    -1,    -1,    79,    80,    81,    82,
    3947       83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
    3948       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3949       -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
    3950       -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
    3951      123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3952       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3953       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,    38,
    3954       39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3955       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3956       -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
    3957       -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,
    3958       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    3959       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
    3960       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3961      109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,
    3962      119,   120,   121,   122,   123,     3,     4,     5,     6,     7,
    3963        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3964       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3965       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
    3966       -1,    39,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3967       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3968       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    67,
    3969       -1,    69,    -1,    71,    39,    -1,    74,    75,    -1,    -1,
    3970       -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
    3971       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3972       27,    -1,    67,    30,    31,    32,    -1,    72,    -1,    74,
    3973       75,    76,    39,    -1,    -1,    -1,   114,    -1,    83,    84,
    3974       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3975       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3976       67,    -1,    -1,    -1,   109,    72,   111,    74,    75,    76,
    3977       -1,    -1,    -1,   118,   119,    -1,    83,    84,    -1,    -1,
    3978       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3979       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3980       -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    3981       -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
    3982       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3983       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3984       -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
    3985       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3986       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3987       67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
    3988       -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
    3989       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3990       67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
    3991       -1,    -1,   109,    -1,   111,    -1,    83,    84,    -1,    -1,
    3992       -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    3993       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3994       -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    3995       -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
    3996       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3997       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3998       -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
    3999       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4000       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4001       67,    -1,    39,    -1,    -1,    72,    -1,    74,    75,    76,
    4002       -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
    4003       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    4004       67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,
    4005       -1,    -1,    -1,    -1,   111,    -1,    83,    84,    -1,    -1,
    4006       -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    4007       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4008       -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    4009       -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
    4010       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4011       27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4012       -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
    4013       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4014       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4015       67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
    4016       -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4017       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    4018       67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
    4019       -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    4020       -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    4021       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4022       -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
    4023       -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
    4024       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4025       27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4026       -1,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
    4027       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4028       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4029       67,    -1,    39,    40,    -1,    -1,    -1,    74,    75,    -1,
    4030       -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4031       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    4032       67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
    4033       -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    4034       -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    4035       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4036       -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
    4037       -1,   118,   119,    10,    11,    12,    13,    14,    15,    16,
    4038       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4039       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4040       -1,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
    4041       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4042       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4043       67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
    4044       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4045       -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
    4046       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
    4047       -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
    4048       -1,   118,   119,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    4049       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4050       -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,    -1,
    4051       -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
    4052       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4053       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4054       -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
    4055       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4056       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4057       -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
    4058       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4059       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    4060       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
    4061       -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
    4062       -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
    4063       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4064       -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
    4065       -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
    4066       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4067       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4068       -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
    4069       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4070       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4071       -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
    4072       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4073       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    4074       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
    4075       -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
    4076       -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
    4077       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4078       -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
    4079       -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
    4080       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4081       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4082       -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
    4083       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4084       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4085       -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
    4086       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4087       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    4088       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
    4089       -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
    4090       -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
    4091       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4092       -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
    4093       -1,    -1,   118,   119,    10,    11,    12,    13,    14,    15,
    4094       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4095       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4096       -1,    -1,    -1,    39,    10,    11,    12,    13,    14,    15,
    4097       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4098       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4099       -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,    75,
    4100       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4101       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    4102       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
    4103       -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,
    4104       -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    94,    -1,
    4105       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4106       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4107       -1,    -1,   118,   119,     4,     5,     6,     7,     8,     9,
     3952      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
     3953      -1,    -1,    74,    75,     4,     5,     6,     7,     8,     9,
    41083954      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    41093955      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    41103956      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
    4111       -1,    37,    38,    -1,    40,    41,    -1,    43,    -1,    -1,
    4112       46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
    4113       56,    57,    -1,    -1,    -1,    61,    62,    67,    64,    69,
    4114       66,    71,    -1,    -1,    74,    75,    72,    -1,    -1,    -1,
    4115       76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
    4116       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
     3957      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3958      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
     3959      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
     3960      39,    71,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
    41173961      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4118      110,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,    -1,
    4119       -1,    -1,   118,   119,   120,   121,   122,   123,    -1,    -1,
    4120       -1,    -1,   128,    -1,    37,    38,   132,    40,    41,    -1,
    4121       43,    -1,    -1,    46,    47,    48,    49,    50,    51,    52,
    4122       53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,
    4123       -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,
    4124       -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
    4125       83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
    4126       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4127       -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
    4128       -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
    4129      123,    -1,    -1,    -1,    -1,   128,    -1,    -1,    -1,   132,
    4130        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    4131       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    4132       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    4133       -1,    -1,    -1,    -1,    -1,    39,    -1,    37,    38,    -1,
    4134       40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
    4135       50,    51,    52,    53,    -1,    -1,    56,    57,    -1,    -1,
    4136       -1,    61,    62,    67,    64,    69,    66,    71,    -1,    -1,
    4137       74,    75,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
    4138       80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
    4139       -1,    -1,    96,    -1,    94,    -1,    -1,    -1,    -1,    -1,
    4140       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    4141       -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
    4142      120,   121,   122,   123,    -1,    -1,    37,    38,   128,    40,
    4143       41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
    4144       51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
    4145       61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
    4146       -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
    4147       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    4148       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    4149       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
    4150      111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
    4151      121,   122,   123,    -1,    -1,    37,    38,   128,    40,    41,
    4152       -1,    43,    -1,    -1,    46,    47,    48,    49,    50,    51,
    4153       52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,
    4154       62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,
    4155       72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
    4156       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    4157       -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
    4158       -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
    4159       -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
    4160      122,   123,    66,    -1,    -1,    -1,   128,    -1,    72,    -1,
    4161       74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
    4162       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    4163       94,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
    4164       -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,   113,
    4165      114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    4166       66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
    4167       76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
    4168       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    37,
    4169       38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4170       -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,
    4171       -1,    40,   118,   119,   120,   121,   122,   123,    66,    -1,
    4172       -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
    4173       -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
    4174       -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,    -1,
    4175       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    4176       -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,    40,
    4177      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    4178      109,    -1,   111,    -1,    -1,    37,    38,    -1,    40,   118,
    4179      119,   120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,
    4180       -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
    4181       81,    82,    83,    84,    66,    86,    87,    -1,    -1,    -1,
    4182       72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,    81,
    4183       82,    83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,
    4184       -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,   120,
    4185      121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,
    4186       -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
    4187      122,   123,     4,     5,     6,     7,     8,     9,    10,    11,
    4188       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    4189       22,    23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,
    4190       -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    4191       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4192       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4193       -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
    4194       72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
    4195       -1,    83,    84,     3,     4,     5,     6,     7,     8,     9,
    4196       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    4197       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    4198       30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
    4199       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4200       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4201       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
    4202       -1,    71,    -1,    -1,    74,    75,     3,     4,     5,     6,
    4203        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    4204       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4205       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4206       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4207       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4208       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4209       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     4,
    4210        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    4211       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    4212       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    4213       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
    4214       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4215       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4216       -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
    4217       75
     3962      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
     3963      -1,    -1,    -1,    -1,    -1,    74,    75
    42183964};
    42193965
     
    42263972      22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
    42273973      36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
    4228       76,    83,    84,    94,   109,   111,   118,   119,   137,   140,
    4229      149,   198,   212,   213,   214,   215,   216,   217,   218,   219,
    4230      220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
    4231      231,   232,   233,   234,   235,   236,   237,   238,   240,   241,
    4232      242,   243,   244,   245,   247,   255,   256,   283,   284,   285,
    4233      293,   296,   302,   303,   305,   307,   308,   314,   319,   323,
    4234      324,   325,   326,   327,   328,   329,   330,   350,   367,   368,
    4235      369,   370,    72,   139,   140,   149,   215,   217,   225,   227,
    4236      237,   241,   243,   284,    82,   109,   312,   313,   314,   312,
    4237      312,    72,    74,    75,    76,   138,   139,   273,   274,   294,
    4238      295,    74,    75,   274,   109,   305,    11,   199,   109,   149,
    4239      319,   324,   325,   326,   328,   329,   330,   112,   134,   111,
    4240      218,   225,   227,   323,   327,   366,   367,   370,   371,   135,
    4241      107,   131,   277,   114,   135,   173,    74,    75,   137,   272,
    4242      135,   135,   135,   116,   135,    74,    75,   109,   149,   309,
    4243      318,   319,   320,   321,   322,   323,   327,   331,   332,   333,
    4244      334,   335,   341,     3,    28,    78,   239,     3,     5,    74,
    4245      111,   149,   217,   228,   232,   235,   244,   285,   323,   327,
    4246      370,   215,   217,   227,   237,   241,   243,   284,   323,   327,
    4247       33,   233,   233,   228,   235,   135,   233,   228,   233,   228,
    4248       75,   109,   114,   274,   285,   114,   274,   233,   228,   116,
    4249      135,   135,     0,   134,   109,   173,   312,   312,   134,   111,
    4250      225,   227,   368,   272,   272,   131,   227,   109,   149,   309,
    4251      319,   323,   111,   149,   370,   306,   230,   314,   109,   290,
    4252      109,   109,    51,   109,    37,    38,    40,    66,    72,    76,
    4253       79,    80,    81,    82,    86,    87,   109,   111,   120,   121,
    4254      122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
    4255      151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
    4256      161,   162,   164,   166,   225,   276,   292,   366,   371,   227,
    4257      110,   110,   110,   110,   110,   110,   110,    74,    75,   111,
    4258      225,   272,   350,   368,   111,   118,   149,   164,   217,   218,
    4259      224,   227,   231,   232,   237,   240,   241,   243,   262,   263,
    4260      267,   268,   269,   270,   284,   350,   362,   363,   364,   365,
    4261      370,   371,   112,   109,   323,   327,   370,   109,   116,   132,
    4262      111,   114,   149,   164,   278,   278,   115,   134,   116,   132,
    4263      109,   116,   132,   116,   132,   116,   132,   312,   132,   319,
    4264      320,   321,   322,   332,   333,   334,   335,   227,   318,   331,
    4265       64,   311,   111,   312,   349,   350,   312,   312,   173,   134,
    4266      109,   312,   349,   312,   312,   227,   309,   109,   109,   226,
    4267      227,   225,   227,   112,   134,   225,   366,   371,   173,   134,
    4268      272,   277,   217,   232,   323,   327,   173,   134,   294,   227,
    4269      237,   132,   227,   227,   292,   248,   246,   258,   274,   257,
    4270      227,   294,   132,   132,   305,   134,   139,   271,     3,   135,
    4271      207,   208,   222,   224,   227,   134,   311,   109,   311,   164,
    4272      319,   227,   109,   134,   272,   114,    33,    34,    35,   225,
    4273      286,   287,   289,   134,   129,   131,   291,   134,   228,   234,
    4274      235,   272,   315,   316,   317,   109,   141,   109,   148,   109,
    4275      148,   151,   109,   148,   109,   109,   148,   148,   111,   164,
    4276      169,   173,   225,   275,   366,   370,   112,   134,    82,    85,
    4277       86,    87,   109,   111,   113,   114,    97,    98,    99,   100,
    4278      101,   102,   103,   104,   105,   106,   131,   168,   151,   151,
    4279      118,   124,   125,   120,   121,    88,    89,    90,    91,   126,
    4280      127,    92,    93,   119,   128,   129,    94,    95,   130,   131,
    4281      373,   109,   149,   345,   346,   347,   348,   349,   110,   116,
    4282      109,   349,   350,   109,   349,   350,   134,   109,   225,   368,
    4283      112,   134,   135,   111,   225,   227,   361,   362,   370,   371,
    4284      135,   109,   111,   149,   319,   336,   337,   338,   339,   340,
    4285      341,   342,   343,   344,   350,   351,   352,   353,   354,   355,
    4286      356,   149,   370,   227,   135,   135,   149,   225,   227,   363,
    4287      272,   225,   350,   363,   272,   109,   134,   134,   134,   112,
    4288      134,    72,    80,   111,   113,   140,   274,   278,   279,   280,
    4289      281,   282,   134,   134,   134,   134,   134,   134,   309,   110,
    4290      110,   110,   110,   110,   110,   110,   318,   331,   109,   277,
    4291      112,   207,   134,   309,   169,   276,   169,   276,   309,   111,
    4292      207,   311,   173,   134,   207,   110,    40,   111,   115,   225,
    4293      249,   250,   251,   366,   114,   116,   372,   131,   259,   114,
    4294      227,   264,   265,   266,   269,   270,   110,   116,   173,   134,
    4295      118,   164,   134,   224,   227,   263,   362,   370,   303,   304,
    4296      109,   149,   336,   110,   116,   373,   274,   286,   109,   114,
    4297      274,   276,   286,   110,   116,   109,   141,   110,   117,   275,
    4298      275,   275,   111,   139,   145,   164,   276,   275,   112,   134,
    4299      110,   116,   110,   109,   149,   349,   357,   358,   359,   360,
    4300      110,   116,   164,   111,   139,   111,   144,   145,   134,   111,
    4301      139,   144,   164,   164,   151,   151,   151,   152,   152,   153,
    4302      153,   154,   154,   154,   154,   155,   155,   156,   157,   158,
    4303      159,   160,   117,   169,   164,   134,   346,   347,   348,   227,
    4304      345,   312,   312,   164,   276,   134,   271,   134,   225,   350,
    4305      363,   227,   231,   112,   112,   134,   370,   112,   109,   134,
    4306      319,   337,   338,   339,   342,   352,   353,   354,   112,   134,
    4307      227,   336,   340,   351,   109,   312,   355,   373,   312,   312,
    4308      373,   109,   312,   355,   312,   312,   312,   312,   350,   225,
    4309      361,   371,   272,   112,   116,   112,   116,   373,   225,   363,
    4310      373,   260,   261,   262,   263,   260,   260,   272,   164,   134,
    4311      111,   274,   117,   116,   372,   278,    80,   111,   117,   282,
    4312       29,   209,   210,   272,   260,   139,   309,   139,   311,   109,
    4313      349,   350,   109,   349,   350,   141,   350,   173,   264,   110,
    4314      110,   110,   110,   112,   173,   207,   173,   114,   250,   251,
    4315      112,   134,   109,   117,   149,   252,   254,   318,   319,   331,
    4316      357,   116,   132,   116,   132,   274,   248,   274,   115,   162,
    4317      163,   258,   135,   135,   139,   222,   135,   135,   260,   109,
    4318      149,   370,   135,   115,   227,   287,   288,   135,   134,   134,
    4319      109,   135,   110,   316,   169,   170,   117,   132,   111,   141,
    4320      200,   201,   202,   110,   116,   110,   134,   117,   110,   110,
    4321      110,   111,   164,   358,   359,   360,   227,   357,   312,   312,
    4322      114,   151,   166,   164,   165,   167,   116,   135,   134,   134,
    4323      110,   116,   164,   134,   115,   162,   117,   264,   110,   110,
    4324      110,   345,   264,   110,   260,   225,   363,   111,   118,   149,
     3974      76,    83,    84,   109,   111,   117,   118,   137,   140,   149,
     3975     198,   212,   213,   214,   215,   216,   217,   218,   219,   220,
     3976     221,   222,   223,   224,   225,   226,   227,   228,   229,   231,
     3977     232,   233,   234,   235,   236,   237,   238,   240,   241,   242,
     3978     243,   244,   245,   247,   255,   256,   283,   284,   285,   293,
     3979     296,   302,   303,   305,   307,   308,   314,   319,   323,   324,
     3980     325,   326,   327,   328,   329,   330,   350,   367,   368,   369,
     3981     370,    72,   139,   140,   149,   215,   217,   225,   227,   237,
     3982     241,   243,   284,    82,   109,   312,   313,   314,   312,   312,
     3983      72,    74,    75,    76,   138,   139,   273,   274,   294,   295,
     3984      74,    75,   274,   109,   305,    11,   199,   109,   149,   319,
     3985     324,   325,   326,   328,   329,   330,   112,   134,   111,   218,
     3986     225,   227,   323,   327,   366,   367,   370,   371,   135,   107,
     3987     131,   277,   114,   135,   173,    74,    75,   137,   272,   135,
     3988     135,   135,   116,   135,    74,    75,   109,   149,   309,   318,
     3989     319,   320,   321,   322,   323,   327,   331,   332,   333,   334,
     3990     335,   341,     3,    28,    78,   239,     3,     5,    74,   111,
     3991     149,   217,   228,   232,   235,   244,   285,   323,   327,   370,
     3992     215,   217,   227,   237,   241,   243,   284,   323,   327,    33,
     3993     233,   233,   228,   235,   135,   233,   228,   233,   228,    75,
     3994     109,   114,   274,   285,   114,   274,   233,   228,   116,   135,
     3995     135,     0,   134,   109,   173,   312,   312,   134,   111,   225,
     3996     227,   368,   272,   272,   131,   227,   109,   149,   309,   319,
     3997     323,   111,   149,   370,   306,   230,   314,   109,   290,   109,
     3998     109,    51,   109,    37,    38,    40,    66,    72,    76,    79,
     3999      80,    81,    82,    86,    87,   109,   111,   119,   120,   121,
     4000     122,   136,   140,   141,   142,   143,   148,   149,   150,   151,
     4001     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
     4002     162,   164,   167,   225,   276,   292,   366,   371,   227,   110,
     4003     110,   110,   110,   110,   110,   110,    74,    75,   111,   225,
     4004     272,   350,   368,   111,   117,   149,   164,   217,   218,   224,
     4005     227,   231,   232,   237,   240,   241,   243,   262,   263,   267,
     4006     268,   269,   270,   284,   350,   362,   363,   364,   365,   370,
     4007     371,   112,   109,   323,   327,   370,   109,   116,   132,   111,
     4008     114,   149,   164,   278,   278,   115,   134,   116,   132,   109,
     4009     116,   132,   116,   132,   116,   132,   312,   132,   319,   320,
     4010     321,   322,   332,   333,   334,   335,   227,   318,   331,    64,
     4011     311,   111,   312,   349,   350,   312,   312,   173,   134,   109,
     4012     312,   349,   312,   312,   227,   309,   109,   109,   226,   227,
     4013     225,   227,   112,   134,   225,   366,   371,   173,   134,   272,
     4014     277,   217,   232,   323,   327,   173,   134,   294,   227,   237,
     4015     132,   227,   227,   292,   248,   246,   258,   274,   257,   227,
     4016     294,   132,   132,   305,   134,   139,   271,     3,   135,   207,
     4017     208,   222,   224,   227,   134,   311,   109,   311,   164,   319,
     4018     227,   109,   134,   272,   114,    33,    34,    35,   225,   286,
     4019     287,   289,   134,   128,   131,   291,   134,   228,   234,   235,
     4020     272,   315,   316,   317,   109,   141,   109,   148,   109,   148,
     4021     151,   109,   148,   109,   109,   148,   148,   111,   164,   169,
     4022     173,   225,   275,   366,   370,   112,   134,    82,    85,    86,
     4023      87,   109,   111,   113,   114,    97,    98,    99,   100,   101,
     4024     102,   103,   104,   105,   106,   131,   166,   151,   151,   117,
     4025     123,   124,   119,   120,    88,    89,    90,    91,   125,   126,
     4026      92,    93,   118,   127,   128,    94,    95,   129,   131,   373,
     4027     109,   149,   345,   346,   347,   348,   349,   110,   116,   109,
     4028     349,   350,   109,   349,   350,   134,   109,   225,   368,   112,
     4029     134,   135,   111,   225,   227,   361,   362,   370,   371,   135,
     4030     109,   111,   149,   319,   336,   337,   338,   339,   340,   341,
     4031     342,   343,   344,   350,   351,   352,   353,   354,   355,   356,
     4032     149,   370,   227,   135,   135,   149,   225,   227,   363,   272,
     4033     225,   350,   363,   272,   109,   134,   134,   134,   112,   134,
     4034      72,   111,   113,   140,   274,   278,   279,   280,   281,   282,
     4035     134,   134,   134,   134,   134,   134,   309,   110,   110,   110,
     4036     110,   110,   110,   110,   318,   331,   109,   277,   112,   207,
     4037     134,   309,   169,   276,   169,   276,   309,   111,   207,   311,
     4038     173,   134,   207,   110,    40,   111,   115,   225,   249,   250,
     4039     251,   366,   114,   116,   372,   131,   259,   114,   227,   264,
     4040     265,   266,   269,   270,   110,   116,   173,   134,   117,   164,
     4041     134,   224,   227,   263,   362,   370,   303,   304,   109,   149,
     4042     336,   110,   116,   373,   274,   286,   109,   114,   274,   276,
     4043     286,   110,   116,   109,   141,   110,   130,   275,   275,   275,
     4044     145,   164,   276,   275,   112,   134,   110,   116,   110,   109,
     4045     149,   349,   357,   358,   359,   360,   110,   116,   164,   111,
     4046     139,   144,   145,   134,   111,   139,   144,   164,   151,   151,
     4047     151,   152,   152,   153,   153,   154,   154,   154,   154,   155,
     4048     155,   156,   157,   158,   159,   160,   130,   169,   164,   134,
     4049     346,   347,   348,   227,   345,   312,   312,   164,   276,   134,
     4050     271,   134,   225,   350,   363,   227,   231,   112,   112,   134,
     4051     370,   112,   109,   134,   319,   337,   338,   339,   342,   352,
     4052     353,   354,   112,   134,   227,   336,   340,   351,   109,   312,
     4053     355,   373,   312,   312,   373,   109,   312,   355,   312,   312,
     4054     312,   312,   350,   225,   361,   371,   272,   112,   116,   112,
     4055     116,   373,   225,   363,   373,   260,   261,   262,   263,   260,
     4056     260,   272,   164,   134,   111,   274,   130,   116,   372,   278,
     4057     111,   130,   282,    29,   209,   210,   272,   260,   139,   309,
     4058     139,   311,   109,   349,   350,   109,   349,   350,   141,   350,
     4059     173,   264,   110,   110,   110,   110,   112,   173,   207,   173,
     4060     114,   250,   251,   112,   134,   109,   130,   149,   252,   254,
     4061     318,   319,   331,   357,   116,   132,   116,   132,   274,   248,
     4062     274,   115,   162,   163,   258,   135,   135,   139,   222,   135,
     4063     135,   260,   109,   149,   370,   135,   115,   227,   287,   288,
     4064     135,   134,   134,   109,   135,   110,   316,   169,   170,   130,
     4065     132,   111,   141,   200,   201,   202,   110,   116,   110,   110,
     4066     110,   110,   111,   164,   358,   359,   360,   227,   357,   312,
     4067     312,   114,   151,   167,   164,   165,   168,   116,   135,   134,
     4068     110,   116,   164,   134,   115,   162,   130,   264,   110,   110,
     4069     110,   345,   264,   110,   260,   225,   363,   111,   117,   149,
    43254070     164,   164,   227,   342,   264,   110,   110,   110,   110,   110,
    43264071     110,   110,     7,   227,   336,   340,   351,   134,   134,   373,
     
    43284073     163,   164,   310,   134,   278,   280,   115,   134,   211,   274,
    43294074      40,    41,    43,    46,    47,    48,    49,    50,    51,    52,
    4330       53,    57,    61,    62,    72,   111,   128,   170,   171,   172,
     4075      53,    57,    61,    62,    72,   111,   127,   170,   171,   172,
    43314076     173,   174,   175,   177,   178,   190,   192,   193,   198,   212,
    43324077     308,    29,   135,   131,   277,   134,   134,   110,   135,   173,
     
    43344079     312,   115,   259,   372,   110,   116,   112,   112,   135,   227,
    43354080     116,   373,   290,   110,   286,   215,   217,   225,   298,   299,
    4336      300,   301,   292,   110,   110,   117,   163,   109,   110,   117,
    4337      116,   139,   164,   164,   112,   110,   110,   110,   357,   279,
    4338      116,   135,   167,   112,   139,   146,   147,   164,   145,   135,
    4339      146,   162,   166,   135,   109,   349,   350,   135,   135,   134,
    4340      135,   135,   135,   164,   110,   135,   109,   349,   350,   109,
    4341      355,   109,   355,   350,   226,     7,   118,   135,   164,   264,
    4342      264,   263,   267,   267,   268,   116,   116,   110,   110,   112,
    4343       96,   123,   135,   135,   146,   278,   164,   116,   132,   212,
    4344      216,   227,   231,   109,   109,   171,   109,   109,    72,   132,
    4345       72,   132,    72,   118,   170,   109,   173,   165,   165,   117,
    4346      112,   143,   132,   135,   134,   135,   211,   110,   164,   264,
    4347      264,   312,   110,   115,   252,   115,   134,   110,   134,   135,
    4348      309,   115,   134,   135,   135,   110,   114,   200,   112,   163,
    4349      132,   200,   202,   110,   116,   135,   109,   349,   350,   372,
    4350      165,   112,   135,    85,   113,   116,   135,   135,   112,   135,
    4351      110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
    4352      134,   134,   164,   164,   135,   112,   135,   135,   135,   135,
    4353      134,   134,   163,   163,   112,   112,   135,   135,   274,   227,
    4354      169,   169,    47,   169,   134,   132,   132,   132,   169,   132,
    4355      169,    58,    59,    60,   194,   195,   196,   132,    63,   132,
    4356      312,   114,   175,   115,   132,   135,   135,    96,   269,   270,
    4357      110,   299,   116,   132,   116,   132,   115,   297,   117,   141,
    4358      110,   110,   117,   167,   112,   134,   115,   112,   111,   147,
    4359      111,   147,   147,   112,   112,   112,   264,   112,   264,   264,
    4360      264,   135,   135,   112,   112,   110,   110,   112,   116,    96,
    4361      263,    96,   135,   112,   112,   110,   110,   109,   110,   170,
    4362      191,   212,   132,   110,   109,   109,   173,   196,    58,    59,
    4363      164,   171,   144,   110,   110,   114,   134,   134,   298,   141,
    4364      203,   109,   132,   203,   135,   117,   264,   134,   134,   135,
    4365      135,   135,   135,   112,   112,   134,   135,   112,   171,    44,
    4366       45,   114,   181,   182,   183,   169,   171,   135,   110,   170,
    4367      114,   183,    96,   134,    96,   134,   109,   109,   132,   115,
    4368      134,   272,   309,   115,   116,   117,   163,   110,   112,   164,
    4369      135,   146,   146,   110,   110,   110,   110,   267,    42,   163,
    4370      179,   180,   310,   117,   134,   171,   181,   110,   132,   171,
    4371      132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
    4372      132,   298,   141,   139,   204,   110,   132,   117,   110,   135,
    4373      135,   171,    96,   116,   117,   135,   205,   206,   212,   132,
    4374      170,   170,   205,   173,   197,   225,   366,   173,   197,   110,
    4375      134,   110,   134,   115,   110,   116,   164,   112,   112,   163,
    4376      179,   182,   184,   185,   134,   132,   182,   186,   187,   135,
    4377      109,   149,   309,   357,   139,   135,   173,   197,   173,   197,
    4378      109,   132,   139,   171,   176,   115,   182,   212,   170,    56,
    4379      176,   189,   115,   182,   110,   227,   110,   135,   135,   292,
    4380      171,   176,   132,   188,   189,   176,   189,   173,   173,   110,
    4381      110,   110,   188,   135,   135,   173,   173,   135,   135
     4081     300,   301,   292,   110,   110,   130,   163,   109,   110,   130,
     4082     116,   139,   112,   110,   110,   110,   357,   279,   116,   135,
     4083     168,   112,   139,   146,   147,   145,   135,   146,   162,   167,
     4084     135,   109,   349,   350,   135,   135,   134,   135,   135,   135,
     4085     164,   110,   135,   109,   349,   350,   109,   355,   109,   355,
     4086     350,   226,     7,   117,   135,   164,   264,   264,   263,   267,
     4087     267,   268,   116,   116,   110,   110,   112,    96,   122,   135,
     4088     135,   146,   278,   164,   116,   132,   212,   216,   227,   231,
     4089     109,   109,   171,   109,   109,    72,   132,    72,   132,    72,
     4090     117,   170,   109,   173,   165,   165,   130,   112,   143,   132,
     4091     135,   134,   135,   211,   110,   164,   264,   264,   312,   110,
     4092     115,   252,   115,   134,   110,   134,   135,   309,   115,   134,
     4093     135,   135,   110,   114,   200,   112,   163,   132,   200,   202,
     4094     110,   109,   349,   350,   372,   165,   112,   135,    85,   113,
     4095     116,   135,   112,   135,   110,   134,   110,   110,   112,   112,
     4096     112,   135,   110,   134,   134,   134,   164,   164,   135,   112,
     4097     135,   135,   135,   135,   134,   134,   163,   163,   112,   112,
     4098     135,   135,   274,   227,   169,   169,    47,   169,   134,   132,
     4099     132,   132,   169,   132,   169,    58,    59,    60,   194,   195,
     4100     196,   132,    63,   132,   312,   114,   175,   115,   132,   135,
     4101     135,    96,   269,   270,   110,   299,   116,   132,   116,   132,
     4102     115,   297,   130,   141,   110,   110,   130,   134,   115,   112,
     4103     111,   147,   111,   147,   147,   112,   112,   264,   112,   264,
     4104     264,   264,   135,   135,   112,   112,   110,   110,   112,   116,
     4105      96,   263,    96,   135,   112,   112,   110,   110,   109,   110,
     4106     170,   191,   212,   132,   110,   109,   109,   173,   196,    58,
     4107      59,   164,   171,   144,   110,   110,   114,   134,   134,   298,
     4108     141,   203,   109,   132,   203,   264,   134,   134,   135,   135,
     4109     135,   135,   112,   112,   134,   135,   112,   171,    44,    45,
     4110     114,   181,   182,   183,   169,   171,   135,   110,   170,   114,
     4111     183,    96,   134,    96,   134,   109,   109,   132,   115,   134,
     4112     272,   309,   115,   116,   130,   163,   110,   135,   146,   146,
     4113     110,   110,   110,   110,   267,    42,   163,   179,   180,   310,
     4114     130,   134,   171,   181,   110,   132,   171,   132,   134,   110,
     4115     134,   110,   134,    96,   134,    96,   134,   132,   298,   141,
     4116     139,   204,   110,   132,   110,   135,   135,   171,    96,   116,
     4117     130,   135,   205,   206,   212,   132,   170,   170,   205,   173,
     4118     197,   225,   366,   173,   197,   110,   134,   110,   134,   115,
     4119     110,   116,   112,   112,   163,   179,   182,   184,   185,   134,
     4120     132,   182,   186,   187,   135,   109,   149,   309,   357,   139,
     4121     135,   173,   197,   173,   197,   109,   132,   139,   171,   176,
     4122     115,   182,   212,   170,    56,   176,   189,   115,   182,   110,
     4123     227,   110,   135,   135,   292,   171,   176,   132,   188,   189,
     4124     176,   189,   173,   173,   110,   110,   110,   188,   135,   135,
     4125     173,   173,   135,   135
    43824126};
    43834127
     
    52164960
    52174961/* Line 1806 of yacc.c  */
    5218 #line 290 "parser.yy"
     4962#line 298 "parser.yy"
    52194963    {
    52204964                        typedefTable.enterScope();
     
    52254969
    52264970/* Line 1806 of yacc.c  */
    5227 #line 296 "parser.yy"
     4971#line 304 "parser.yy"
    52284972    {
    52294973                        typedefTable.leaveScope();
     
    52344978
    52354979/* Line 1806 of yacc.c  */
    5236 #line 305 "parser.yy"
    5237     { (yyval.constant) = makeConstant( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     4980#line 313 "parser.yy"
     4981    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
    52384982    break;
    52394983
     
    52414985
    52424986/* Line 1806 of yacc.c  */
    5243 #line 306 "parser.yy"
    5244     { (yyval.constant) = makeConstant( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     4987#line 314 "parser.yy"
     4988    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
    52454989    break;
    52464990
     
    52484992
    52494993/* Line 1806 of yacc.c  */
    5250 #line 307 "parser.yy"
    5251     { (yyval.constant) = makeConstant( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
     4994#line 315 "parser.yy"
     4995    { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
    52524996    break;
    52534997
     
    52554999
    52565000/* Line 1806 of yacc.c  */
    5257 #line 332 "parser.yy"
    5258     { (yyval.constant) = makeConstantStr( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
     5001#line 340 "parser.yy"
     5002    { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
    52595003    break;
    52605004
     
    52625006
    52635007/* Line 1806 of yacc.c  */
    5264 #line 333 "parser.yy"
    5265     { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
     5008#line 342 "parser.yy"
     5009    {
     5010                        appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
     5011                        delete (yyvsp[(2) - (2)].tok);                                                                  // allocated by lexer
     5012                        (yyval.constant) = (yyvsp[(1) - (2)].constant);
     5013                }
    52665014    break;
    52675015
     
    52695017
    52705018/* Line 1806 of yacc.c  */
    5271 #line 340 "parser.yy"
    5272     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     5019#line 353 "parser.yy"
     5020    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
    52735021    break;
    52745022
     
    52765024
    52775025/* Line 1806 of yacc.c  */
    5278 #line 342 "parser.yy"
    5279     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     5026#line 355 "parser.yy"
     5027    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
    52805028    break;
    52815029
     
    52835031
    52845032/* Line 1806 of yacc.c  */
    5285 #line 344 "parser.yy"
     5033#line 357 "parser.yy"
    52865034    { (yyval.en) = (yyvsp[(2) - (3)].en); }
    52875035    break;
     
    52905038
    52915039/* Line 1806 of yacc.c  */
    5292 #line 346 "parser.yy"
    5293     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     5040#line 359 "parser.yy"
     5041    { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
    52945042    break;
    52955043
     
    52975045
    52985046/* Line 1806 of yacc.c  */
    5299 #line 356 "parser.yy"
    5300     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
     5047#line 369 "parser.yy"
     5048    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
    53015049    break;
    53025050
     
    53045052
    53055053/* Line 1806 of yacc.c  */
    5306 #line 358 "parser.yy"
    5307     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
     5054#line 371 "parser.yy"
     5055    { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
    53085056    break;
    53095057
     
    53115059
    53125060/* Line 1806 of yacc.c  */
    5313 #line 362 "parser.yy"
    5314     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     5061#line 375 "parser.yy"
     5062    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
    53155063    break;
    53165064
     
    53185066
    53195067/* Line 1806 of yacc.c  */
    5320 #line 365 "parser.yy"
    5321     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     5068#line 378 "parser.yy"
     5069    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
    53225070    break;
    53235071
     
    53255073
    53265074/* Line 1806 of yacc.c  */
    5327 #line 368 "parser.yy"
    5328     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
     5075#line 381 "parser.yy"
     5076    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
    53295077    break;
    53305078
     
    53325080
    53335081/* Line 1806 of yacc.c  */
    5334 #line 370 "parser.yy"
    5335     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     5082#line 383 "parser.yy"
     5083    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
    53365084    break;
    53375085
     
    53395087
    53405088/* Line 1806 of yacc.c  */
    5341 #line 372 "parser.yy"
    5342     { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
     5089#line 385 "parser.yy"
     5090    { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
    53435091    break;
    53445092
     
    53465094
    53475095/* Line 1806 of yacc.c  */
    5348 #line 374 "parser.yy"
     5096#line 387 "parser.yy"
    53495097    {
    5350                         Token fn; fn.str = new std::string( "?{}" ); // location undefined
    5351                         (yyval.en) = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) );
     5098                        Token fn;
     5099                        fn.str = new std::string( "?{}" ); // location undefined
     5100                        (yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_last( (yyvsp[(3) - (4)].en) ) ) );
    53525101                }
    53535102    break;
     
    53565105
    53575106/* Line 1806 of yacc.c  */
    5358 #line 383 "parser.yy"
    5359     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     5107#line 397 "parser.yy"
     5108    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
    53605109    break;
    53615110
     
    53635112
    53645113/* Line 1806 of yacc.c  */
    5365 #line 388 "parser.yy"
     5114#line 402 "parser.yy"
    53665115    { (yyval.en) = 0; }
    53675116    break;
    53685117
    5369   case 37:
    5370 
    5371 /* Line 1806 of yacc.c  */
    5372 #line 391 "parser.yy"
    5373     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
    5374     break;
    5375 
    53765118  case 38:
    53775119
    53785120/* Line 1806 of yacc.c  */
    5379 #line 396 "parser.yy"
    5380     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     5121#line 408 "parser.yy"
     5122    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    53815123    break;
    53825124
     
    53845126
    53855127/* Line 1806 of yacc.c  */
    5386 #line 398 "parser.yy"
    5387     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
     5128#line 413 "parser.yy"
     5129    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     5130    break;
     5131
     5132  case 40:
     5133
     5134/* Line 1806 of yacc.c  */
     5135#line 417 "parser.yy"
     5136    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
    53885137    break;
    53895138
     
    53915140
    53925141/* Line 1806 of yacc.c  */
    5393 #line 403 "parser.yy"
    5394     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     5142#line 419 "parser.yy"
     5143    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
    53955144    break;
    53965145
     
    53985147
    53995148/* Line 1806 of yacc.c  */
    5400 #line 408 "parser.yy"
    5401     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     5149#line 421 "parser.yy"
     5150    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
    54025151    break;
    54035152
     
    54055154
    54065155/* Line 1806 of yacc.c  */
    5407 #line 412 "parser.yy"
    5408     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    5409     break;
    5410 
    5411   case 44:
    5412 
    5413 /* Line 1806 of yacc.c  */
    5414 #line 414 "parser.yy"
    5415     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     5156#line 423 "parser.yy"
     5157    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
    54165158    break;
    54175159
     
    54195161
    54205162/* Line 1806 of yacc.c  */
    5421 #line 416 "parser.yy"
    5422     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     5163#line 431 "parser.yy"
     5164    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    54235165    break;
    54245166
     
    54265168
    54275169/* Line 1806 of yacc.c  */
    5428 #line 418 "parser.yy"
    5429     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     5170#line 433 "parser.yy"
     5171    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     5172    break;
     5173
     5174  case 47:
     5175
     5176/* Line 1806 of yacc.c  */
     5177#line 435 "parser.yy"
     5178    { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
    54305179    break;
    54315180
     
    54335182
    54345183/* Line 1806 of yacc.c  */
    5435 #line 426 "parser.yy"
    5436     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     5184#line 440 "parser.yy"
     5185    {
     5186                        switch ( (yyvsp[(1) - (2)].op) ) {
     5187                          case OperKinds::AddressOf:
     5188                                (yyval.en) = new ExpressionNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
     5189                                break;
     5190                          case OperKinds::PointTo:
     5191                                (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
     5192                                break;
     5193                          default:
     5194                                assert( false );
     5195                        }
     5196                }
    54375197    break;
    54385198
     
    54405200
    54415201/* Line 1806 of yacc.c  */
    5442 #line 428 "parser.yy"
    5443     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     5202#line 453 "parser.yy"
     5203    { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
    54445204    break;
    54455205
     
    54475207
    54485208/* Line 1806 of yacc.c  */
    5449 #line 430 "parser.yy"
    5450     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     5209#line 455 "parser.yy"
     5210    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
    54515211    break;
    54525212
     
    54545214
    54555215/* Line 1806 of yacc.c  */
    5456 #line 432 "parser.yy"
    5457     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     5216#line 457 "parser.yy"
     5217    { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
    54585218    break;
    54595219
     
    54615221
    54625222/* Line 1806 of yacc.c  */
    5463 #line 437 "parser.yy"
    5464     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     5223#line 459 "parser.yy"
     5224    { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
    54655225    break;
    54665226
     
    54685228
    54695229/* Line 1806 of yacc.c  */
    5470 #line 439 "parser.yy"
    5471     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     5230#line 461 "parser.yy"
     5231    { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
    54725232    break;
    54735233
     
    54755235
    54765236/* Line 1806 of yacc.c  */
    5477 #line 441 "parser.yy"
    5478     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     5237#line 463 "parser.yy"
     5238    { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
    54795239    break;
    54805240
     
    54825242
    54835243/* Line 1806 of yacc.c  */
    5484 #line 443 "parser.yy"
    5485     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     5244#line 465 "parser.yy"
     5245    { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
    54865246    break;
    54875247
     
    54895249
    54905250/* Line 1806 of yacc.c  */
    5491 #line 445 "parser.yy"
    5492     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5251#line 467 "parser.yy"
     5252    { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
    54935253    break;
    54945254
     
    54965256
    54975257/* Line 1806 of yacc.c  */
    5498 #line 447 "parser.yy"
    5499     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
     5258#line 469 "parser.yy"
     5259    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
    55005260    break;
    55015261
     
    55035263
    55045264/* Line 1806 of yacc.c  */
    5505 #line 449 "parser.yy"
    5506     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     5265#line 471 "parser.yy"
     5266    { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
    55075267    break;
    55085268
     
    55105270
    55115271/* Line 1806 of yacc.c  */
    5512 #line 451 "parser.yy"
    5513     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5272#line 473 "parser.yy"
     5273    { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
    55145274    break;
    55155275
     
    55175277
    55185278/* Line 1806 of yacc.c  */
    5519 #line 453 "parser.yy"
    5520     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     5279#line 479 "parser.yy"
     5280    { (yyval.op) = OperKinds::PointTo; }
    55215281    break;
    55225282
     
    55245284
    55255285/* Line 1806 of yacc.c  */
    5526 #line 455 "parser.yy"
    5527     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     5286#line 480 "parser.yy"
     5287    { (yyval.op) = OperKinds::AddressOf; }
    55285288    break;
    55295289
     
    55315291
    55325292/* Line 1806 of yacc.c  */
    5533 #line 457 "parser.yy"
    5534     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
     5293#line 486 "parser.yy"
     5294    { (yyval.op) = OperKinds::UnPlus; }
    55355295    break;
    55365296
     
    55385298
    55395299/* Line 1806 of yacc.c  */
    5540 #line 463 "parser.yy"
    5541     { (yyval.en) = new OperatorNode( OperatorNode::PointTo ); }
     5300#line 487 "parser.yy"
     5301    { (yyval.op) = OperKinds::UnMinus; }
    55425302    break;
    55435303
     
    55455305
    55465306/* Line 1806 of yacc.c  */
    5547 #line 464 "parser.yy"
    5548     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     5307#line 488 "parser.yy"
     5308    { (yyval.op) = OperKinds::Neg; }
    55495309    break;
    55505310
     
    55525312
    55535313/* Line 1806 of yacc.c  */
    5554 #line 466 "parser.yy"
    5555     { (yyval.en) = new OperatorNode( OperatorNode::And ); }
    5556     break;
    5557 
    5558   case 66:
    5559 
    5560 /* Line 1806 of yacc.c  */
    5561 #line 470 "parser.yy"
    5562     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     5314#line 489 "parser.yy"
     5315    { (yyval.op) = OperKinds::BitNeg; }
    55635316    break;
    55645317
     
    55665319
    55675320/* Line 1806 of yacc.c  */
    5568 #line 471 "parser.yy"
    5569     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     5321#line 495 "parser.yy"
     5322    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
    55705323    break;
    55715324
     
    55735326
    55745327/* Line 1806 of yacc.c  */
    5575 #line 472 "parser.yy"
    5576     { (yyval.en) = new OperatorNode( OperatorNode::Neg ); }
    5577     break;
    5578 
    5579   case 69:
    5580 
    5581 /* Line 1806 of yacc.c  */
    5582 #line 473 "parser.yy"
    5583     { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
     5328#line 497 "parser.yy"
     5329    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     5330    break;
     5331
     5332  case 70:
     5333
     5334/* Line 1806 of yacc.c  */
     5335#line 503 "parser.yy"
     5336    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    55845337    break;
    55855338
     
    55875340
    55885341/* Line 1806 of yacc.c  */
    5589 #line 479 "parser.yy"
    5590     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5342#line 505 "parser.yy"
     5343    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    55915344    break;
    55925345
     
    55945347
    55955348/* Line 1806 of yacc.c  */
    5596 #line 481 "parser.yy"
    5597     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5349#line 507 "parser.yy"
     5350    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    55985351    break;
    55995352
     
    56015354
    56025355/* Line 1806 of yacc.c  */
    5603 #line 487 "parser.yy"
    5604     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5356#line 513 "parser.yy"
     5357    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56055358    break;
    56065359
     
    56085361
    56095362/* Line 1806 of yacc.c  */
    5610 #line 489 "parser.yy"
    5611     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5612     break;
    5613 
    5614   case 76:
    5615 
    5616 /* Line 1806 of yacc.c  */
    5617 #line 491 "parser.yy"
    5618     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5363#line 515 "parser.yy"
     5364    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     5365    break;
     5366
     5367  case 77:
     5368
     5369/* Line 1806 of yacc.c  */
     5370#line 521 "parser.yy"
     5371    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56195372    break;
    56205373
     
    56225375
    56235376/* Line 1806 of yacc.c  */
    5624 #line 497 "parser.yy"
    5625     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5626     break;
    5627 
    5628   case 79:
    5629 
    5630 /* Line 1806 of yacc.c  */
    5631 #line 499 "parser.yy"
    5632     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5377#line 523 "parser.yy"
     5378    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     5379    break;
     5380
     5381  case 80:
     5382
     5383/* Line 1806 of yacc.c  */
     5384#line 529 "parser.yy"
     5385    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56335386    break;
    56345387
     
    56365389
    56375390/* Line 1806 of yacc.c  */
    5638 #line 505 "parser.yy"
    5639     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5391#line 531 "parser.yy"
     5392    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56405393    break;
    56415394
     
    56435396
    56445397/* Line 1806 of yacc.c  */
    5645 #line 507 "parser.yy"
    5646     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5647     break;
    5648 
    5649   case 84:
    5650 
    5651 /* Line 1806 of yacc.c  */
    5652 #line 513 "parser.yy"
    5653     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5398#line 533 "parser.yy"
     5399    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     5400    break;
     5401
     5402  case 83:
     5403
     5404/* Line 1806 of yacc.c  */
     5405#line 535 "parser.yy"
     5406    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56545407    break;
    56555408
     
    56575410
    56585411/* Line 1806 of yacc.c  */
    5659 #line 515 "parser.yy"
    5660     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5412#line 541 "parser.yy"
     5413    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56615414    break;
    56625415
     
    56645417
    56655418/* Line 1806 of yacc.c  */
    5666 #line 517 "parser.yy"
    5667     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5668     break;
    5669 
    5670   case 87:
    5671 
    5672 /* Line 1806 of yacc.c  */
    5673 #line 519 "parser.yy"
    5674     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5675     break;
    5676 
    5677   case 89:
    5678 
    5679 /* Line 1806 of yacc.c  */
    5680 #line 525 "parser.yy"
    5681     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5419#line 543 "parser.yy"
     5420    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     5421    break;
     5422
     5423  case 88:
     5424
     5425/* Line 1806 of yacc.c  */
     5426#line 549 "parser.yy"
     5427    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56825428    break;
    56835429
     
    56855431
    56865432/* Line 1806 of yacc.c  */
    5687 #line 527 "parser.yy"
    5688     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5433#line 555 "parser.yy"
     5434    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56895435    break;
    56905436
     
    56925438
    56935439/* Line 1806 of yacc.c  */
    5694 #line 533 "parser.yy"
    5695     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5440#line 561 "parser.yy"
     5441    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    56965442    break;
    56975443
     
    56995445
    57005446/* Line 1806 of yacc.c  */
    5701 #line 539 "parser.yy"
    5702     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5447#line 567 "parser.yy"
     5448    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
    57035449    break;
    57045450
     
    57065452
    57075453/* Line 1806 of yacc.c  */
    5708 #line 545 "parser.yy"
    5709     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5454#line 573 "parser.yy"
     5455    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
    57105456    break;
    57115457
     
    57135459
    57145460/* Line 1806 of yacc.c  */
    5715 #line 551 "parser.yy"
    5716     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5461#line 579 "parser.yy"
     5462    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     5463    break;
     5464
     5465  case 99:
     5466
     5467/* Line 1806 of yacc.c  */
     5468#line 582 "parser.yy"
     5469    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
    57175470    break;
    57185471
     
    57205473
    57215474/* Line 1806 of yacc.c  */
    5722 #line 557 "parser.yy"
    5723     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5724     break;
    5725 
    5726   case 102:
    5727 
    5728 /* Line 1806 of yacc.c  */
    5729 #line 563 "parser.yy"
    5730     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     5475#line 584 "parser.yy"
     5476    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
    57315477    break;
    57325478
     
    57345480
    57355481/* Line 1806 of yacc.c  */
    5736 #line 565 "parser.yy"
    5737     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     5482#line 595 "parser.yy"
     5483    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    57385484    break;
    57395485
     
    57415487
    57425488/* Line 1806 of yacc.c  */
    5743 #line 567 "parser.yy"
    5744     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     5489#line 597 "parser.yy"
     5490    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     5491    break;
     5492
     5493  case 105:
     5494
     5495/* Line 1806 of yacc.c  */
     5496#line 602 "parser.yy"
     5497    { (yyval.en) = nullptr; }
    57455498    break;
    57465499
     
    57485501
    57495502/* Line 1806 of yacc.c  */
    5750 #line 578 "parser.yy"
    5751     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5503#line 607 "parser.yy"
     5504    { (yyval.op) = OperKinds::Assign; }
    57525505    break;
    57535506
     
    57555508
    57565509/* Line 1806 of yacc.c  */
    5757 #line 580 "parser.yy"
    5758     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5510#line 608 "parser.yy"
     5511    { (yyval.op) = OperKinds::MulAssn; }
    57595512    break;
    57605513
     
    57625515
    57635516/* Line 1806 of yacc.c  */
    5764 #line 582 "parser.yy"
    5765     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     5517#line 609 "parser.yy"
     5518    { (yyval.op) = OperKinds::DivAssn; }
    57665519    break;
    57675520
     
    57695522
    57705523/* Line 1806 of yacc.c  */
    5771 #line 587 "parser.yy"
    5772     { (yyval.en) = new NullExprNode; }
     5524#line 610 "parser.yy"
     5525    { (yyval.op) = OperKinds::ModAssn; }
     5526    break;
     5527
     5528  case 111:
     5529
     5530/* Line 1806 of yacc.c  */
     5531#line 611 "parser.yy"
     5532    { (yyval.op) = OperKinds::PlusAssn; }
    57735533    break;
    57745534
     
    57765536
    57775537/* Line 1806 of yacc.c  */
    5778 #line 595 "parser.yy"
    5779     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     5538#line 612 "parser.yy"
     5539    { (yyval.op) = OperKinds::MinusAssn; }
    57805540    break;
    57815541
     
    57835543
    57845544/* Line 1806 of yacc.c  */
    5785 #line 597 "parser.yy"
    5786     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     5545#line 613 "parser.yy"
     5546    { (yyval.op) = OperKinds::LSAssn; }
    57875547    break;
    57885548
     
    57905550
    57915551/* Line 1806 of yacc.c  */
    5792 #line 599 "parser.yy"
    5793     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     5552#line 614 "parser.yy"
     5553    { (yyval.op) = OperKinds::RSAssn; }
    57945554    break;
    57955555
     
    57975557
    57985558/* Line 1806 of yacc.c  */
    5799 #line 601 "parser.yy"
    5800     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
     5559#line 615 "parser.yy"
     5560    { (yyval.op) = OperKinds::AndAssn; }
     5561    break;
     5562
     5563  case 116:
     5564
     5565/* Line 1806 of yacc.c  */
     5566#line 616 "parser.yy"
     5567    { (yyval.op) = OperKinds::ERAssn; }
    58015568    break;
    58025569
     
    58045571
    58055572/* Line 1806 of yacc.c  */
    5806 #line 607 "parser.yy"
    5807     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     5573#line 617 "parser.yy"
     5574    { (yyval.op) = OperKinds::OrAssn; }
    58085575    break;
    58095576
     
    58115578
    58125579/* Line 1806 of yacc.c  */
    5813 #line 611 "parser.yy"
    5814     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     5580#line 624 "parser.yy"
     5581    { (yyval.en) = new ExpressionNode( build_tuple() ); }
    58155582    break;
    58165583
     
    58185585
    58195586/* Line 1806 of yacc.c  */
    5820 #line 612 "parser.yy"
    5821     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     5587#line 626 "parser.yy"
     5588    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
    58225589    break;
    58235590
     
    58255592
    58265593/* Line 1806 of yacc.c  */
    5827 #line 613 "parser.yy"
    5828     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     5594#line 628 "parser.yy"
     5595    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
    58295596    break;
    58305597
     
    58325599
    58335600/* Line 1806 of yacc.c  */
    5834 #line 614 "parser.yy"
    5835     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
    5836     break;
    5837 
    5838   case 122:
    5839 
    5840 /* Line 1806 of yacc.c  */
    5841 #line 615 "parser.yy"
    5842     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     5601#line 630 "parser.yy"
     5602    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
    58435603    break;
    58445604
     
    58465606
    58475607/* Line 1806 of yacc.c  */
    5848 #line 616 "parser.yy"
    5849     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
    5850     break;
    5851 
    5852   case 124:
    5853 
    5854 /* Line 1806 of yacc.c  */
    5855 #line 617 "parser.yy"
    5856     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     5608#line 636 "parser.yy"
     5609    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    58575610    break;
    58585611
     
    58605613
    58615614/* Line 1806 of yacc.c  */
    5862 #line 618 "parser.yy"
    5863     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     5615#line 642 "parser.yy"
     5616    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    58645617    break;
    58655618
     
    58675620
    58685621/* Line 1806 of yacc.c  */
    5869 #line 619 "parser.yy"
    5870     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
    5871     break;
    5872 
    5873   case 127:
    5874 
    5875 /* Line 1806 of yacc.c  */
    5876 #line 620 "parser.yy"
    5877     { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
    5878     break;
    5879 
    5880   case 129:
    5881 
    5882 /* Line 1806 of yacc.c  */
    5883 #line 626 "parser.yy"
    5884     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5622#line 647 "parser.yy"
     5623    { (yyval.en) = 0; }
    58855624    break;
    58865625
     
    58885627
    58895628/* Line 1806 of yacc.c  */
    5890 #line 631 "parser.yy"
    5891     { (yyval.en) = 0; }
    5892     break;
    5893 
    5894   case 134:
    5895 
    5896 /* Line 1806 of yacc.c  */
    5897 #line 640 "parser.yy"
     5629#line 656 "parser.yy"
    58985630    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    58995631    break;
    59005632
    5901   case 140:
    5902 
    5903 /* Line 1806 of yacc.c  */
    5904 #line 647 "parser.yy"
     5633  case 136:
     5634
     5635/* Line 1806 of yacc.c  */
     5636#line 663 "parser.yy"
    59055637    {
    5906                         Token fn; fn.str = new std::string( "^?{}" ); // location undefined
    5907                         (yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
    5908                                 (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ), 0 );
     5638                        Token fn;
     5639                        fn.str = new std::string( "^?{}" ); // location undefined
     5640                        (yyval.sn) = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_last( (yyvsp[(4) - (6)].en) ) ) ) ) );
    59095641                }
    59105642    break;
    59115643
    5912   case 141:
    5913 
    5914 /* Line 1806 of yacc.c  */
    5915 #line 657 "parser.yy"
     5644  case 137:
     5645
     5646/* Line 1806 of yacc.c  */
     5647#line 673 "parser.yy"
    59165648    {
    59175649                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    59195651    break;
    59205652
     5653  case 138:
     5654
     5655/* Line 1806 of yacc.c  */
     5656#line 680 "parser.yy"
     5657    { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     5658    break;
     5659
     5660  case 139:
     5661
     5662/* Line 1806 of yacc.c  */
     5663#line 687 "parser.yy"
     5664    { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
     5665    break;
     5666
     5667  case 141:
     5668
     5669/* Line 1806 of yacc.c  */
     5670#line 693 "parser.yy"
     5671    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     5672    break;
     5673
    59215674  case 142:
    59225675
    59235676/* Line 1806 of yacc.c  */
    5924 #line 664 "parser.yy"
    5925     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     5677#line 698 "parser.yy"
     5678    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    59265679    break;
    59275680
     
    59295682
    59305683/* Line 1806 of yacc.c  */
    5931 #line 671 "parser.yy"
    5932     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
    5933     break;
    5934 
    5935   case 145:
    5936 
    5937 /* Line 1806 of yacc.c  */
    5938 #line 677 "parser.yy"
    5939     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    5940     break;
    5941 
    5942   case 146:
    5943 
    5944 /* Line 1806 of yacc.c  */
    5945 #line 682 "parser.yy"
    5946     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    5947     break;
    5948 
    5949   case 147:
    5950 
    5951 /* Line 1806 of yacc.c  */
    5952 #line 684 "parser.yy"
     5684#line 700 "parser.yy"
    59535685    {   // mark all fields in list
    5954                         for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     5686                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    59555687                                iter->set_extension( true );
    59565688                        (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
     
    59585690    break;
    59595691
     5692  case 144:
     5693
     5694/* Line 1806 of yacc.c  */
     5695#line 706 "parser.yy"
     5696    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     5697    break;
     5698
     5699  case 147:
     5700
     5701/* Line 1806 of yacc.c  */
     5702#line 713 "parser.yy"
     5703    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     5704    break;
     5705
    59605706  case 148:
    59615707
    59625708/* Line 1806 of yacc.c  */
    5963 #line 690 "parser.yy"
    5964     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     5709#line 718 "parser.yy"
     5710    { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     5711    break;
     5712
     5713  case 149:
     5714
     5715/* Line 1806 of yacc.c  */
     5716#line 724 "parser.yy"
     5717    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     5718    break;
     5719
     5720  case 150:
     5721
     5722/* Line 1806 of yacc.c  */
     5723#line 726 "parser.yy"
     5724    { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
    59655725    break;
    59665726
     
    59685728
    59695729/* Line 1806 of yacc.c  */
    5970 #line 697 "parser.yy"
    5971     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     5730#line 728 "parser.yy"
     5731    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
    59725732    break;
    59735733
     
    59755735
    59765736/* Line 1806 of yacc.c  */
    5977 #line 702 "parser.yy"
    5978     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    5979     break;
    5980 
    5981   case 153:
    5982 
    5983 /* Line 1806 of yacc.c  */
    5984 #line 708 "parser.yy"
    5985     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    5986     break;
    5987 
    5988   case 154:
    5989 
    5990 /* Line 1806 of yacc.c  */
    5991 #line 710 "parser.yy"
    5992     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    5993     break;
    5994 
    5995   case 155:
    5996 
    5997 /* Line 1806 of yacc.c  */
    5998 #line 712 "parser.yy"
    5999     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    6000     break;
    6001 
    6002   case 156:
    6003 
    6004 /* Line 1806 of yacc.c  */
    6005 #line 714 "parser.yy"
     5737#line 730 "parser.yy"
    60065738    {
    6007                         StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
     5739                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
    60085740                        // The semantics of the declaration list is changed to include associated initialization, which is performed
    60095741                        // *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
    60105742                        // statement around the switch.  Statements after the initial declaration list can never be executed, and
    6011                         // therefore, are removed from the grammar even though C allows it. Change also applies to choose statement.
    6012                         (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
     5743                        // therefore, are removed from the grammar even though C allows it. The change also applies to choose
     5744                        // statement.
     5745                        (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
    60135746                }
    60145747    break;
    60155748
    6016   case 157:
    6017 
    6018 /* Line 1806 of yacc.c  */
    6019 #line 723 "parser.yy"
    6020     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     5749  case 153:
     5750
     5751/* Line 1806 of yacc.c  */
     5752#line 740 "parser.yy"
     5753    { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     5754    break;
     5755
     5756  case 154:
     5757
     5758/* Line 1806 of yacc.c  */
     5759#line 742 "parser.yy"
     5760    {
     5761                        StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
     5762                        (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) ) : sw;
     5763                }
     5764    break;
     5765
     5766  case 155:
     5767
     5768/* Line 1806 of yacc.c  */
     5769#line 752 "parser.yy"
     5770    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     5771    break;
     5772
     5773  case 156:
     5774
     5775/* Line 1806 of yacc.c  */
     5776#line 754 "parser.yy"
     5777    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
    60215778    break;
    60225779
     
    60245781
    60255782/* Line 1806 of yacc.c  */
    6026 #line 725 "parser.yy"
     5783#line 759 "parser.yy"
     5784    { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
     5785    break;
     5786
     5787  case 159:
     5788
     5789/* Line 1806 of yacc.c  */
     5790#line 761 "parser.yy"
     5791    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     5792    break;
     5793
     5794  case 160:
     5795
     5796/* Line 1806 of yacc.c  */
     5797#line 765 "parser.yy"
     5798    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     5799    break;
     5800
     5801  case 161:
     5802
     5803/* Line 1806 of yacc.c  */
     5804#line 766 "parser.yy"
     5805    { (yyval.sn) = new StatementNode( build_default() ); }
     5806    break;
     5807
     5808  case 163:
     5809
     5810/* Line 1806 of yacc.c  */
     5811#line 772 "parser.yy"
     5812    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
     5813    break;
     5814
     5815  case 164:
     5816
     5817/* Line 1806 of yacc.c  */
     5818#line 776 "parser.yy"
     5819    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     5820    break;
     5821
     5822  case 165:
     5823
     5824/* Line 1806 of yacc.c  */
     5825#line 781 "parser.yy"
     5826    { (yyval.sn) = 0; }
     5827    break;
     5828
     5829  case 167:
     5830
     5831/* Line 1806 of yacc.c  */
     5832#line 787 "parser.yy"
     5833    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     5834    break;
     5835
     5836  case 168:
     5837
     5838/* Line 1806 of yacc.c  */
     5839#line 789 "parser.yy"
     5840    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
     5841    break;
     5842
     5843  case 169:
     5844
     5845/* Line 1806 of yacc.c  */
     5846#line 794 "parser.yy"
     5847    { (yyval.sn) = 0; }
     5848    break;
     5849
     5850  case 171:
     5851
     5852/* Line 1806 of yacc.c  */
     5853#line 800 "parser.yy"
     5854    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     5855    break;
     5856
     5857  case 172:
     5858
     5859/* Line 1806 of yacc.c  */
     5860#line 802 "parser.yy"
     5861    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     5862    break;
     5863
     5864  case 173:
     5865
     5866/* Line 1806 of yacc.c  */
     5867#line 804 "parser.yy"
     5868    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     5869    break;
     5870
     5871  case 174:
     5872
     5873/* Line 1806 of yacc.c  */
     5874#line 806 "parser.yy"
     5875    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     5876    break;
     5877
     5878  case 175:
     5879
     5880/* Line 1806 of yacc.c  */
     5881#line 811 "parser.yy"
     5882    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
     5883    break;
     5884
     5885  case 177:
     5886
     5887/* Line 1806 of yacc.c  */
     5888#line 817 "parser.yy"
     5889    { (yyval.sn) = 0; }
     5890    break;
     5891
     5892  case 178:
     5893
     5894/* Line 1806 of yacc.c  */
     5895#line 819 "parser.yy"
     5896    { (yyval.sn) = 0; }
     5897    break;
     5898
     5899  case 179:
     5900
     5901/* Line 1806 of yacc.c  */
     5902#line 824 "parser.yy"
     5903    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     5904    break;
     5905
     5906  case 180:
     5907
     5908/* Line 1806 of yacc.c  */
     5909#line 826 "parser.yy"
     5910    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
     5911    break;
     5912
     5913  case 181:
     5914
     5915/* Line 1806 of yacc.c  */
     5916#line 828 "parser.yy"
     5917    { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     5918    break;
     5919
     5920  case 182:
     5921
     5922/* Line 1806 of yacc.c  */
     5923#line 833 "parser.yy"
     5924    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     5925    break;
     5926
     5927  case 183:
     5928
     5929/* Line 1806 of yacc.c  */
     5930#line 835 "parser.yy"
     5931    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     5932    break;
     5933
     5934  case 184:
     5935
     5936/* Line 1806 of yacc.c  */
     5937#line 840 "parser.yy"
     5938    { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     5939    break;
     5940
     5941  case 185:
     5942
     5943/* Line 1806 of yacc.c  */
     5944#line 844 "parser.yy"
     5945    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     5946    break;
     5947
     5948  case 186:
     5949
     5950/* Line 1806 of yacc.c  */
     5951#line 847 "parser.yy"
     5952    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Continue ) ); }
     5953    break;
     5954
     5955  case 187:
     5956
     5957/* Line 1806 of yacc.c  */
     5958#line 851 "parser.yy"
     5959    { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); }
     5960    break;
     5961
     5962  case 188:
     5963
     5964/* Line 1806 of yacc.c  */
     5965#line 854 "parser.yy"
     5966    { (yyval.sn) = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
     5967    break;
     5968
     5969  case 189:
     5970
     5971/* Line 1806 of yacc.c  */
     5972#line 858 "parser.yy"
     5973    { (yyval.sn) = new StatementNode( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
     5974    break;
     5975
     5976  case 190:
     5977
     5978/* Line 1806 of yacc.c  */
     5979#line 860 "parser.yy"
     5980    { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
     5981    break;
     5982
     5983  case 191:
     5984
     5985/* Line 1806 of yacc.c  */
     5986#line 862 "parser.yy"
     5987    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     5988    break;
     5989
     5990  case 192:
     5991
     5992/* Line 1806 of yacc.c  */
     5993#line 864 "parser.yy"
     5994    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     5995    break;
     5996
     5997  case 193:
     5998
     5999/* Line 1806 of yacc.c  */
     6000#line 866 "parser.yy"
     6001    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     6002    break;
     6003
     6004  case 194:
     6005
     6006/* Line 1806 of yacc.c  */
     6007#line 871 "parser.yy"
     6008    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
     6009    break;
     6010
     6011  case 195:
     6012
     6013/* Line 1806 of yacc.c  */
     6014#line 873 "parser.yy"
     6015    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
     6016    break;
     6017
     6018  case 196:
     6019
     6020/* Line 1806 of yacc.c  */
     6021#line 875 "parser.yy"
     6022    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
     6023    break;
     6024
     6025  case 198:
     6026
     6027/* Line 1806 of yacc.c  */
     6028#line 882 "parser.yy"
     6029    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     6030    break;
     6031
     6032  case 199:
     6033
     6034/* Line 1806 of yacc.c  */
     6035#line 884 "parser.yy"
     6036    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     6037    break;
     6038
     6039  case 200:
     6040
     6041/* Line 1806 of yacc.c  */
     6042#line 886 "parser.yy"
     6043    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     6044    break;
     6045
     6046  case 201:
     6047
     6048/* Line 1806 of yacc.c  */
     6049#line 888 "parser.yy"
     6050    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     6051    break;
     6052
     6053  case 202:
     6054
     6055/* Line 1806 of yacc.c  */
     6056#line 893 "parser.yy"
     6057    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     6058    break;
     6059
     6060  case 203:
     6061
     6062/* Line 1806 of yacc.c  */
     6063#line 895 "parser.yy"
     6064    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     6065    break;
     6066
     6067  case 204:
     6068
     6069/* Line 1806 of yacc.c  */
     6070#line 897 "parser.yy"
     6071    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     6072    break;
     6073
     6074  case 205:
     6075
     6076/* Line 1806 of yacc.c  */
     6077#line 899 "parser.yy"
     6078    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     6079    break;
     6080
     6081  case 206:
     6082
     6083/* Line 1806 of yacc.c  */
     6084#line 904 "parser.yy"
    60276085    {
    6028                         StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
    6029                         (yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
     6086                        (yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
    60306087                }
    60316088    break;
    60326089
    6033   case 159:
    6034 
    6035 /* Line 1806 of yacc.c  */
    6036 #line 735 "parser.yy"
    6037     { (yyval.en) = (yyvsp[(1) - (1)].en); }
    6038     break;
    6039 
    6040   case 160:
    6041 
    6042 /* Line 1806 of yacc.c  */
    6043 #line 737 "parser.yy"
    6044     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    6045     break;
    6046 
    6047   case 163:
    6048 
    6049 /* Line 1806 of yacc.c  */
    6050 #line 744 "parser.yy"
    6051     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    6052     break;
    6053 
    6054   case 164:
    6055 
    6056 /* Line 1806 of yacc.c  */
    6057 #line 748 "parser.yy"
    6058     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    6059     break;
    6060 
    6061   case 165:
    6062 
    6063 /* Line 1806 of yacc.c  */
    6064 #line 749 "parser.yy"
    6065     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    6066     break;
    6067 
    6068   case 167:
    6069 
    6070 /* Line 1806 of yacc.c  */
    6071 #line 755 "parser.yy"
    6072     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    6073     break;
    6074 
    6075   case 168:
    6076 
    6077 /* Line 1806 of yacc.c  */
    6078 #line 759 "parser.yy"
    6079     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
    6080     break;
    6081 
    6082   case 169:
    6083 
    6084 /* Line 1806 of yacc.c  */
    6085 #line 764 "parser.yy"
    6086     { (yyval.sn) = 0; }
    6087     break;
    6088 
    6089   case 171:
    6090 
    6091 /* Line 1806 of yacc.c  */
    6092 #line 770 "parser.yy"
    6093     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
    6094     break;
    6095 
    6096   case 172:
    6097 
    6098 /* Line 1806 of yacc.c  */
    6099 #line 772 "parser.yy"
    6100     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
    6101     break;
    6102 
    6103   case 173:
    6104 
    6105 /* Line 1806 of yacc.c  */
    6106 #line 777 "parser.yy"
    6107     { (yyval.sn) = 0; }
    6108     break;
    6109 
    6110   case 175:
    6111 
    6112 /* Line 1806 of yacc.c  */
    6113 #line 783 "parser.yy"
    6114     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    6115     break;
    6116 
    6117   case 176:
    6118 
    6119 /* Line 1806 of yacc.c  */
    6120 #line 785 "parser.yy"
    6121     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
    6122     break;
    6123 
    6124   case 177:
    6125 
    6126 /* Line 1806 of yacc.c  */
    6127 #line 787 "parser.yy"
    6128     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    6129     break;
    6130 
    6131   case 178:
    6132 
    6133 /* Line 1806 of yacc.c  */
    6134 #line 789 "parser.yy"
    6135     { (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) ) ) ) ) ) ); }
    6136     break;
    6137 
    6138   case 179:
    6139 
    6140 /* Line 1806 of yacc.c  */
    6141 #line 794 "parser.yy"
    6142     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    6143     break;
    6144 
    6145   case 181:
    6146 
    6147 /* Line 1806 of yacc.c  */
    6148 #line 800 "parser.yy"
    6149     { (yyval.sn) = 0; }
    6150     break;
    6151 
    6152   case 182:
    6153 
    6154 /* Line 1806 of yacc.c  */
    6155 #line 802 "parser.yy"
    6156     { (yyval.sn) = 0; }
    6157     break;
    6158 
    6159   case 183:
    6160 
    6161 /* Line 1806 of yacc.c  */
    6162 #line 807 "parser.yy"
    6163     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    6164     break;
    6165 
    6166   case 184:
    6167 
    6168 /* Line 1806 of yacc.c  */
    6169 #line 809 "parser.yy"
    6170     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    6171     break;
    6172 
    6173   case 185:
    6174 
    6175 /* Line 1806 of yacc.c  */
    6176 #line 811 "parser.yy"
    6177     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    6178     break;
    6179 
    6180   case 186:
    6181 
    6182 /* Line 1806 of yacc.c  */
    6183 #line 816 "parser.yy"
    6184     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    6185     break;
    6186 
    6187   case 187:
    6188 
    6189 /* Line 1806 of yacc.c  */
    6190 #line 818 "parser.yy"
    6191     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    6192     break;
    6193 
    6194   case 188:
    6195 
    6196 /* Line 1806 of yacc.c  */
    6197 #line 823 "parser.yy"
    6198     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    6199     break;
    6200 
    6201   case 189:
    6202 
    6203 /* Line 1806 of yacc.c  */
    6204 #line 827 "parser.yy"
    6205     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    6206     break;
    6207 
    6208   case 190:
    6209 
    6210 /* Line 1806 of yacc.c  */
    6211 #line 830 "parser.yy"
    6212     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    6213     break;
    6214 
    6215   case 191:
    6216 
    6217 /* Line 1806 of yacc.c  */
    6218 #line 834 "parser.yy"
    6219     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    6220     break;
    6221 
    6222   case 192:
    6223 
    6224 /* Line 1806 of yacc.c  */
    6225 #line 837 "parser.yy"
    6226     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    6227     break;
    6228 
    6229   case 193:
    6230 
    6231 /* Line 1806 of yacc.c  */
    6232 #line 841 "parser.yy"
    6233     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    6234     break;
    6235 
    6236   case 194:
    6237 
    6238 /* Line 1806 of yacc.c  */
    6239 #line 843 "parser.yy"
    6240     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    6241     break;
    6242 
    6243   case 195:
    6244 
    6245 /* Line 1806 of yacc.c  */
    6246 #line 845 "parser.yy"
    6247     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    6248     break;
    6249 
    6250   case 196:
    6251 
    6252 /* Line 1806 of yacc.c  */
    6253 #line 849 "parser.yy"
    6254     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    6255     break;
    6256 
    6257   case 197:
    6258 
    6259 /* Line 1806 of yacc.c  */
    6260 #line 851 "parser.yy"
    6261     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    6262     break;
    6263 
    6264   case 198:
    6265 
    6266 /* Line 1806 of yacc.c  */
    6267 #line 858 "parser.yy"
    6268     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    6269     break;
    6270 
    6271   case 199:
    6272 
    6273 /* Line 1806 of yacc.c  */
    6274 #line 860 "parser.yy"
    6275     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    6276     break;
    6277 
    6278   case 200:
    6279 
    6280 /* Line 1806 of yacc.c  */
    6281 #line 862 "parser.yy"
    6282     {
    6283                         (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
    6284                         (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (4)].sn),*(yyvsp[(3) - (4)].pn) ))));
    6285                 }
    6286     break;
    6287 
    6288   case 202:
    6289 
    6290 /* Line 1806 of yacc.c  */
    6291 #line 873 "parser.yy"
    6292     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    6293     break;
    6294 
    6295   case 203:
    6296 
    6297 /* Line 1806 of yacc.c  */
    6298 #line 875 "parser.yy"
    6299     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    6300     break;
    6301 
    6302   case 204:
    6303 
    6304 /* Line 1806 of yacc.c  */
    6305 #line 877 "parser.yy"
    6306     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    6307     break;
    6308 
    6309   case 205:
    6310 
    6311 /* Line 1806 of yacc.c  */
    6312 #line 879 "parser.yy"
    6313     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    6314     break;
    6315 
    6316   case 206:
    6317 
    6318 /* Line 1806 of yacc.c  */
    6319 #line 884 "parser.yy"
    6320     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    6321     break;
    6322 
    6323   case 207:
    6324 
    6325 /* Line 1806 of yacc.c  */
    6326 #line 886 "parser.yy"
    6327     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    6328     break;
    6329 
    63306090  case 208:
    63316091
    63326092/* Line 1806 of yacc.c  */
    6333 #line 888 "parser.yy"
    6334     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    6335     break;
    6336 
    6337   case 209:
    6338 
    6339 /* Line 1806 of yacc.c  */
    6340 #line 890 "parser.yy"
    6341     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    6342     break;
    6343 
    6344   case 210:
    6345 
    6346 /* Line 1806 of yacc.c  */
    6347 #line 895 "parser.yy"
    6348     {
    6349                         (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
    6350                         std::cout << "Just created a finally node" << std::endl;
    6351                 }
    6352     break;
    6353 
    6354   case 212:
    6355 
    6356 /* Line 1806 of yacc.c  */
    6357 #line 909 "parser.yy"
     6093#line 917 "parser.yy"
    63586094    {
    63596095                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63626098    break;
    63636099
    6364   case 213:
    6365 
    6366 /* Line 1806 of yacc.c  */
    6367 #line 914 "parser.yy"
     6100  case 209:
     6101
     6102/* Line 1806 of yacc.c  */
     6103#line 922 "parser.yy"
    63686104    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    63696105    break;
    63706106
    6371   case 214:
    6372 
    6373 /* Line 1806 of yacc.c  */
    6374 #line 916 "parser.yy"
     6107  case 210:
     6108
     6109/* Line 1806 of yacc.c  */
     6110#line 924 "parser.yy"
    63756111    {
    63766112                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    63796115    break;
    63806116
     6117  case 212:
     6118
     6119/* Line 1806 of yacc.c  */
     6120#line 933 "parser.yy"
     6121    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
     6122    break;
     6123
     6124  case 213:
     6125
     6126/* Line 1806 of yacc.c  */
     6127#line 935 "parser.yy"
     6128    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
     6129    break;
     6130
     6131  case 214:
     6132
     6133/* Line 1806 of yacc.c  */
     6134#line 937 "parser.yy"
     6135    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
     6136    break;
     6137
     6138  case 215:
     6139
     6140/* Line 1806 of yacc.c  */
     6141#line 939 "parser.yy"
     6142    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
     6143    break;
     6144
    63816145  case 216:
    63826146
    63836147/* Line 1806 of yacc.c  */
    6384 #line 925 "parser.yy"
    6385     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     6148#line 941 "parser.yy"
     6149    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
    63866150    break;
    63876151
     
    63896153
    63906154/* Line 1806 of yacc.c  */
    6391 #line 927 "parser.yy"
    6392     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     6155#line 946 "parser.yy"
     6156    { (yyval.flag) = false; }
    63936157    break;
    63946158
     
    63966160
    63976161/* Line 1806 of yacc.c  */
    6398 #line 929 "parser.yy"
    6399     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     6162#line 948 "parser.yy"
     6163    { (yyval.flag) = true; }
    64006164    break;
    64016165
     
    64036167
    64046168/* Line 1806 of yacc.c  */
    6405 #line 931 "parser.yy"
    6406     { (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) ); }
    6407     break;
    6408 
    6409   case 220:
    6410 
    6411 /* Line 1806 of yacc.c  */
    6412 #line 933 "parser.yy"
    6413     { (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) ); }
    6414     break;
    6415 
    6416   case 221:
    6417 
    6418 /* Line 1806 of yacc.c  */
    6419 #line 938 "parser.yy"
    6420     { (yyval.flag) = false; }
     6169#line 953 "parser.yy"
     6170    { (yyval.en) = 0; }
    64216171    break;
    64226172
     
    64246174
    64256175/* Line 1806 of yacc.c  */
    6426 #line 940 "parser.yy"
    6427     { (yyval.flag) = true; }
     6176#line 960 "parser.yy"
     6177    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
    64286178    break;
    64296179
     
    64316181
    64326182/* Line 1806 of yacc.c  */
    6433 #line 945 "parser.yy"
     6183#line 965 "parser.yy"
     6184    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     6185    break;
     6186
     6187  case 224:
     6188
     6189/* Line 1806 of yacc.c  */
     6190#line 967 "parser.yy"
     6191    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     6192    break;
     6193
     6194  case 225:
     6195
     6196/* Line 1806 of yacc.c  */
     6197#line 972 "parser.yy"
    64346198    { (yyval.en) = 0; }
    64356199    break;
     
    64386202
    64396203/* Line 1806 of yacc.c  */
    6440 #line 952 "parser.yy"
    6441     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     6204#line 974 "parser.yy"
     6205    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
    64426206    break;
    64436207
     
    64456209
    64466210/* Line 1806 of yacc.c  */
    6447 #line 957 "parser.yy"
    6448     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     6211#line 976 "parser.yy"
     6212    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
    64496213    break;
    64506214
     
    64526216
    64536217/* Line 1806 of yacc.c  */
    6454 #line 959 "parser.yy"
    6455     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     6218#line 981 "parser.yy"
     6219    { (yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) ); }
    64566220    break;
    64576221
     
    64596223
    64606224/* Line 1806 of yacc.c  */
    6461 #line 964 "parser.yy"
    6462     { (yyval.constant) = 0; }
     6225#line 983 "parser.yy"
     6226    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) ); }
    64636227    break;
    64646228
     
    64666230
    64676231/* Line 1806 of yacc.c  */
    6468 #line 966 "parser.yy"
    6469     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    6470     break;
    6471 
    6472   case 231:
    6473 
    6474 /* Line 1806 of yacc.c  */
    6475 #line 968 "parser.yy"
    6476     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    6477     break;
    6478 
    6479   case 232:
    6480 
    6481 /* Line 1806 of yacc.c  */
    6482 #line 973 "parser.yy"
    6483     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     6232#line 990 "parser.yy"
     6233    { (yyval.decl) = 0; }
    64846234    break;
    64856235
     
    64876237
    64886238/* Line 1806 of yacc.c  */
    6489 #line 975 "parser.yy"
    6490     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     6239#line 997 "parser.yy"
     6240    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    64916241    break;
    64926242
     
    64946244
    64956245/* Line 1806 of yacc.c  */
    6496 #line 982 "parser.yy"
     6246#line 1002 "parser.yy"
    64976247    { (yyval.decl) = 0; }
    64986248    break;
     
    65016251
    65026252/* Line 1806 of yacc.c  */
    6503 #line 989 "parser.yy"
     6253#line 1009 "parser.yy"
    65046254    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    65056255    break;
    65066256
    6507   case 238:
    6508 
    6509 /* Line 1806 of yacc.c  */
    6510 #line 994 "parser.yy"
    6511     { (yyval.decl) = 0; }
    6512     break;
    6513 
    6514   case 241:
    6515 
    6516 /* Line 1806 of yacc.c  */
    6517 #line 1001 "parser.yy"
    6518     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    6519     break;
    6520 
    6521   case 246:
    6522 
    6523 /* Line 1806 of yacc.c  */
    6524 #line 1015 "parser.yy"
     6257  case 242:
     6258
     6259/* Line 1806 of yacc.c  */
     6260#line 1023 "parser.yy"
    65256261    {}
    65266262    break;
    65276263
    6528   case 247:
    6529 
    6530 /* Line 1806 of yacc.c  */
    6531 #line 1016 "parser.yy"
     6264  case 243:
     6265
     6266/* Line 1806 of yacc.c  */
     6267#line 1024 "parser.yy"
    65326268    {}
    65336269    break;
    65346270
    6535   case 255:
    6536 
    6537 /* Line 1806 of yacc.c  */
    6538 #line 1045 "parser.yy"
     6271  case 251:
     6272
     6273/* Line 1806 of yacc.c  */
     6274#line 1053 "parser.yy"
    65396275    {
    65406276                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65436279    break;
    65446280
    6545   case 256:
    6546 
    6547 /* Line 1806 of yacc.c  */
    6548 #line 1052 "parser.yy"
     6281  case 252:
     6282
     6283/* Line 1806 of yacc.c  */
     6284#line 1060 "parser.yy"
    65496285    {
    65506286                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    65536289    break;
    65546290
    6555   case 257:
    6556 
    6557 /* Line 1806 of yacc.c  */
    6558 #line 1057 "parser.yy"
     6291  case 253:
     6292
     6293/* Line 1806 of yacc.c  */
     6294#line 1065 "parser.yy"
    65596295    {
    65606296                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
     
    65636299    break;
    65646300
    6565   case 258:
    6566 
    6567 /* Line 1806 of yacc.c  */
    6568 #line 1067 "parser.yy"
     6301  case 254:
     6302
     6303/* Line 1806 of yacc.c  */
     6304#line 1075 "parser.yy"
    65696305    {
    65706306                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65736309    break;
    65746310
    6575   case 259:
    6576 
    6577 /* Line 1806 of yacc.c  */
    6578 #line 1072 "parser.yy"
     6311  case 255:
     6312
     6313/* Line 1806 of yacc.c  */
     6314#line 1080 "parser.yy"
    65796315    {
    65806316                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    65836319    break;
    65846320
    6585   case 260:
    6586 
    6587 /* Line 1806 of yacc.c  */
    6588 #line 1077 "parser.yy"
     6321  case 256:
     6322
     6323/* Line 1806 of yacc.c  */
     6324#line 1085 "parser.yy"
    65896325    {
    65906326                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    65936329    break;
    65946330
    6595   case 261:
    6596 
    6597 /* Line 1806 of yacc.c  */
    6598 #line 1085 "parser.yy"
     6331  case 257:
     6332
     6333/* Line 1806 of yacc.c  */
     6334#line 1093 "parser.yy"
    65996335    {
    66006336                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66036339    break;
    66046340
    6605   case 262:
    6606 
    6607 /* Line 1806 of yacc.c  */
    6608 #line 1090 "parser.yy"
     6341  case 258:
     6342
     6343/* Line 1806 of yacc.c  */
     6344#line 1098 "parser.yy"
    66096345    {
    66106346                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66136349    break;
    66146350
    6615   case 263:
    6616 
    6617 /* Line 1806 of yacc.c  */
    6618 #line 1095 "parser.yy"
     6351  case 259:
     6352
     6353/* Line 1806 of yacc.c  */
     6354#line 1103 "parser.yy"
    66196355    {
    66206356                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66236359    break;
    66246360
    6625   case 264:
    6626 
    6627 /* Line 1806 of yacc.c  */
    6628 #line 1100 "parser.yy"
     6361  case 260:
     6362
     6363/* Line 1806 of yacc.c  */
     6364#line 1108 "parser.yy"
    66296365    {
    66306366                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66336369    break;
    66346370
    6635   case 265:
    6636 
    6637 /* Line 1806 of yacc.c  */
    6638 #line 1105 "parser.yy"
     6371  case 261:
     6372
     6373/* Line 1806 of yacc.c  */
     6374#line 1113 "parser.yy"
    66396375    {
    66406376                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    66436379    break;
    66446380
    6645   case 266:
    6646 
    6647 /* Line 1806 of yacc.c  */
    6648 #line 1113 "parser.yy"
     6381  case 262:
     6382
     6383/* Line 1806 of yacc.c  */
     6384#line 1121 "parser.yy"
    66496385    {
    66506386                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    66526388    break;
    66536389
    6654   case 267:
    6655 
    6656 /* Line 1806 of yacc.c  */
    6657 #line 1136 "parser.yy"
     6390  case 263:
     6391
     6392/* Line 1806 of yacc.c  */
     6393#line 1144 "parser.yy"
    66586394    {
    66596395                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    66616397    break;
    66626398
    6663   case 268:
    6664 
    6665 /* Line 1806 of yacc.c  */
    6666 #line 1140 "parser.yy"
     6399  case 264:
     6400
     6401/* Line 1806 of yacc.c  */
     6402#line 1148 "parser.yy"
    66676403    {
    66686404                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    66706406    break;
    66716407
    6672   case 269:
    6673 
    6674 /* Line 1806 of yacc.c  */
    6675 #line 1147 "parser.yy"
     6408  case 265:
     6409
     6410/* Line 1806 of yacc.c  */
     6411#line 1155 "parser.yy"
    66766412    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    66776413    break;
    66786414
    6679   case 270:
    6680 
    6681 /* Line 1806 of yacc.c  */
    6682 #line 1151 "parser.yy"
     6415  case 266:
     6416
     6417/* Line 1806 of yacc.c  */
     6418#line 1159 "parser.yy"
    66836419    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    66846420    break;
    66856421
    6686   case 271:
    6687 
    6688 /* Line 1806 of yacc.c  */
    6689 #line 1156 "parser.yy"
     6422  case 267:
     6423
     6424/* Line 1806 of yacc.c  */
     6425#line 1164 "parser.yy"
    66906426    {
    66916427                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    66946430    break;
    66956431
    6696   case 272:
    6697 
    6698 /* Line 1806 of yacc.c  */
    6699 #line 1161 "parser.yy"
     6432  case 268:
     6433
     6434/* Line 1806 of yacc.c  */
     6435#line 1169 "parser.yy"
    67006436    {
    67016437                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67046440    break;
    67056441
    6706   case 273:
    6707 
    6708 /* Line 1806 of yacc.c  */
    6709 #line 1166 "parser.yy"
     6442  case 269:
     6443
     6444/* Line 1806 of yacc.c  */
     6445#line 1174 "parser.yy"
    67106446    {
    67116447                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    67146450    break;
    67156451
    6716   case 274:
    6717 
    6718 /* Line 1806 of yacc.c  */
    6719 #line 1177 "parser.yy"
     6452  case 270:
     6453
     6454/* Line 1806 of yacc.c  */
     6455#line 1185 "parser.yy"
    67206456    {
    67216457                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67246460    break;
    67256461
    6726   case 275:
    6727 
    6728 /* Line 1806 of yacc.c  */
    6729 #line 1182 "parser.yy"
     6462  case 271:
     6463
     6464/* Line 1806 of yacc.c  */
     6465#line 1190 "parser.yy"
    67306466    {
    67316467                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67346470    break;
    67356471
    6736   case 276:
    6737 
    6738 /* Line 1806 of yacc.c  */
    6739 #line 1187 "parser.yy"
     6472  case 272:
     6473
     6474/* Line 1806 of yacc.c  */
     6475#line 1195 "parser.yy"
    67406476    {
    67416477                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67446480    break;
    67456481
    6746   case 277:
    6747 
    6748 /* Line 1806 of yacc.c  */
    6749 #line 1192 "parser.yy"
     6482  case 273:
     6483
     6484/* Line 1806 of yacc.c  */
     6485#line 1200 "parser.yy"
    67506486    {
    67516487                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67546490    break;
    67556491
    6756   case 278:
    6757 
    6758 /* Line 1806 of yacc.c  */
    6759 #line 1197 "parser.yy"
     6492  case 274:
     6493
     6494/* Line 1806 of yacc.c  */
     6495#line 1205 "parser.yy"
    67606496    {
    67616497                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    67646500    break;
    67656501
    6766   case 279:
    6767 
    6768 /* Line 1806 of yacc.c  */
    6769 #line 1206 "parser.yy"
     6502  case 275:
     6503
     6504/* Line 1806 of yacc.c  */
     6505#line 1214 "parser.yy"
    67706506    {
    67716507                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    67746510    break;
    67756511
    6776   case 280:
    6777 
    6778 /* Line 1806 of yacc.c  */
    6779 #line 1211 "parser.yy"
     6512  case 276:
     6513
     6514/* Line 1806 of yacc.c  */
     6515#line 1219 "parser.yy"
    67806516    {
    67816517                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    67846520    break;
    67856521
    6786   case 285:
    6787 
    6788 /* Line 1806 of yacc.c  */
    6789 #line 1228 "parser.yy"
     6522  case 281:
     6523
     6524/* Line 1806 of yacc.c  */
     6525#line 1236 "parser.yy"
    67906526    {
    67916527                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    67946530    break;
    67956531
    6796   case 286:
    6797 
    6798 /* Line 1806 of yacc.c  */
    6799 #line 1233 "parser.yy"
     6532  case 282:
     6533
     6534/* Line 1806 of yacc.c  */
     6535#line 1241 "parser.yy"
    68006536    {
    68016537                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    68046540    break;
    68056541
    6806   case 295:
    6807 
    6808 /* Line 1806 of yacc.c  */
    6809 #line 1255 "parser.yy"
     6542  case 291:
     6543
     6544/* Line 1806 of yacc.c  */
     6545#line 1263 "parser.yy"
    68106546    { (yyval.decl) = 0; }
    68116547    break;
    68126548
     6549  case 294:
     6550
     6551/* Line 1806 of yacc.c  */
     6552#line 1275 "parser.yy"
     6553    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6554    break;
     6555
     6556  case 297:
     6557
     6558/* Line 1806 of yacc.c  */
     6559#line 1286 "parser.yy"
     6560    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     6561    break;
     6562
    68136563  case 298:
    68146564
    68156565/* Line 1806 of yacc.c  */
    6816 #line 1267 "parser.yy"
    6817     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6566#line 1288 "parser.yy"
     6567    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     6568    break;
     6569
     6570  case 299:
     6571
     6572/* Line 1806 of yacc.c  */
     6573#line 1290 "parser.yy"
     6574    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     6575    break;
     6576
     6577  case 300:
     6578
     6579/* Line 1806 of yacc.c  */
     6580#line 1292 "parser.yy"
     6581    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    68186582    break;
    68196583
     
    68216585
    68226586/* Line 1806 of yacc.c  */
    6823 #line 1278 "parser.yy"
    6824     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     6587#line 1294 "parser.yy"
     6588    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    68256589    break;
    68266590
     
    68286592
    68296593/* Line 1806 of yacc.c  */
    6830 #line 1280 "parser.yy"
    6831     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    6832     break;
    6833 
    6834   case 303:
    6835 
    6836 /* Line 1806 of yacc.c  */
    6837 #line 1282 "parser.yy"
    6838     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    6839     break;
    6840 
    6841   case 304:
    6842 
    6843 /* Line 1806 of yacc.c  */
    6844 #line 1284 "parser.yy"
    6845     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    6846     break;
    6847 
    6848   case 305:
    6849 
    6850 /* Line 1806 of yacc.c  */
    6851 #line 1286 "parser.yy"
    6852     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    6853     break;
    6854 
    6855   case 306:
    6856 
    6857 /* Line 1806 of yacc.c  */
    6858 #line 1288 "parser.yy"
     6594#line 1296 "parser.yy"
    68596595    {
    68606596                        typedefTable.enterScope();
     
    68626598    break;
    68636599
    6864   case 307:
    6865 
    6866 /* Line 1806 of yacc.c  */
    6867 #line 1292 "parser.yy"
     6600  case 303:
     6601
     6602/* Line 1806 of yacc.c  */
     6603#line 1300 "parser.yy"
    68686604    {
    68696605                        typedefTable.leaveScope();
     
    68726608    break;
    68736609
    6874   case 309:
    6875 
    6876 /* Line 1806 of yacc.c  */
    6877 #line 1301 "parser.yy"
     6610  case 305:
     6611
     6612/* Line 1806 of yacc.c  */
     6613#line 1309 "parser.yy"
    68786614    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68796615    break;
    68806616
     6617  case 306:
     6618
     6619/* Line 1806 of yacc.c  */
     6620#line 1311 "parser.yy"
     6621    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     6622    break;
     6623
     6624  case 308:
     6625
     6626/* Line 1806 of yacc.c  */
     6627#line 1322 "parser.yy"
     6628    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6629    break;
     6630
    68816631  case 310:
    68826632
    68836633/* Line 1806 of yacc.c  */
    6884 #line 1303 "parser.yy"
     6634#line 1331 "parser.yy"
     6635    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     6636    break;
     6637
     6638  case 311:
     6639
     6640/* Line 1806 of yacc.c  */
     6641#line 1333 "parser.yy"
     6642    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     6643    break;
     6644
     6645  case 312:
     6646
     6647/* Line 1806 of yacc.c  */
     6648#line 1335 "parser.yy"
     6649    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     6650    break;
     6651
     6652  case 313:
     6653
     6654/* Line 1806 of yacc.c  */
     6655#line 1337 "parser.yy"
     6656    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     6657    break;
     6658
     6659  case 314:
     6660
     6661/* Line 1806 of yacc.c  */
     6662#line 1339 "parser.yy"
     6663    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     6664    break;
     6665
     6666  case 315:
     6667
     6668/* Line 1806 of yacc.c  */
     6669#line 1341 "parser.yy"
     6670    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     6671    break;
     6672
     6673  case 316:
     6674
     6675/* Line 1806 of yacc.c  */
     6676#line 1343 "parser.yy"
     6677    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     6678    break;
     6679
     6680  case 317:
     6681
     6682/* Line 1806 of yacc.c  */
     6683#line 1345 "parser.yy"
     6684    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     6685    break;
     6686
     6687  case 318:
     6688
     6689/* Line 1806 of yacc.c  */
     6690#line 1350 "parser.yy"
     6691    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     6692    break;
     6693
     6694  case 319:
     6695
     6696/* Line 1806 of yacc.c  */
     6697#line 1352 "parser.yy"
     6698    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     6699    break;
     6700
     6701  case 320:
     6702
     6703/* Line 1806 of yacc.c  */
     6704#line 1354 "parser.yy"
     6705    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     6706    break;
     6707
     6708  case 321:
     6709
     6710/* Line 1806 of yacc.c  */
     6711#line 1356 "parser.yy"
     6712    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     6713    break;
     6714
     6715  case 322:
     6716
     6717/* Line 1806 of yacc.c  */
     6718#line 1358 "parser.yy"
     6719    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     6720    break;
     6721
     6722  case 323:
     6723
     6724/* Line 1806 of yacc.c  */
     6725#line 1360 "parser.yy"
     6726    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     6727    break;
     6728
     6729  case 324:
     6730
     6731/* Line 1806 of yacc.c  */
     6732#line 1362 "parser.yy"
     6733    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     6734    break;
     6735
     6736  case 325:
     6737
     6738/* Line 1806 of yacc.c  */
     6739#line 1364 "parser.yy"
     6740    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     6741    break;
     6742
     6743  case 326:
     6744
     6745/* Line 1806 of yacc.c  */
     6746#line 1366 "parser.yy"
     6747    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     6748    break;
     6749
     6750  case 327:
     6751
     6752/* Line 1806 of yacc.c  */
     6753#line 1368 "parser.yy"
     6754    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     6755    break;
     6756
     6757  case 328:
     6758
     6759/* Line 1806 of yacc.c  */
     6760#line 1370 "parser.yy"
     6761    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     6762    break;
     6763
     6764  case 329:
     6765
     6766/* Line 1806 of yacc.c  */
     6767#line 1372 "parser.yy"
     6768    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     6769    break;
     6770
     6771  case 330:
     6772
     6773/* Line 1806 of yacc.c  */
     6774#line 1374 "parser.yy"
     6775    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     6776    break;
     6777
     6778  case 332:
     6779
     6780/* Line 1806 of yacc.c  */
     6781#line 1381 "parser.yy"
     6782    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6783    break;
     6784
     6785  case 333:
     6786
     6787/* Line 1806 of yacc.c  */
     6788#line 1383 "parser.yy"
     6789    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6790    break;
     6791
     6792  case 334:
     6793
     6794/* Line 1806 of yacc.c  */
     6795#line 1385 "parser.yy"
    68856796    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68866797    break;
    68876798
    6888   case 312:
    6889 
    6890 /* Line 1806 of yacc.c  */
    6891 #line 1314 "parser.yy"
     6799  case 335:
     6800
     6801/* Line 1806 of yacc.c  */
     6802#line 1387 "parser.yy"
     6803    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     6804    break;
     6805
     6806  case 337:
     6807
     6808/* Line 1806 of yacc.c  */
     6809#line 1393 "parser.yy"
     6810    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     6811    break;
     6812
     6813  case 339:
     6814
     6815/* Line 1806 of yacc.c  */
     6816#line 1400 "parser.yy"
     6817    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6818    break;
     6819
     6820  case 340:
     6821
     6822/* Line 1806 of yacc.c  */
     6823#line 1402 "parser.yy"
    68926824    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68936825    break;
    68946826
    6895   case 314:
    6896 
    6897 /* Line 1806 of yacc.c  */
    6898 #line 1323 "parser.yy"
    6899     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    6900     break;
    6901 
    6902   case 315:
    6903 
    6904 /* Line 1806 of yacc.c  */
    6905 #line 1325 "parser.yy"
    6906     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    6907     break;
    6908 
    6909   case 316:
    6910 
    6911 /* Line 1806 of yacc.c  */
    6912 #line 1327 "parser.yy"
    6913     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    6914     break;
    6915 
    6916   case 317:
    6917 
    6918 /* Line 1806 of yacc.c  */
    6919 #line 1329 "parser.yy"
    6920     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    6921     break;
    6922 
    6923   case 318:
    6924 
    6925 /* Line 1806 of yacc.c  */
    6926 #line 1331 "parser.yy"
    6927     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    6928     break;
    6929 
    6930   case 319:
    6931 
    6932 /* Line 1806 of yacc.c  */
    6933 #line 1333 "parser.yy"
    6934     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    6935     break;
    6936 
    6937   case 320:
    6938 
    6939 /* Line 1806 of yacc.c  */
    6940 #line 1335 "parser.yy"
    6941     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    6942     break;
    6943 
    6944   case 321:
    6945 
    6946 /* Line 1806 of yacc.c  */
    6947 #line 1337 "parser.yy"
    6948     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    6949     break;
    6950 
    6951   case 322:
    6952 
    6953 /* Line 1806 of yacc.c  */
    6954 #line 1342 "parser.yy"
    6955     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    6956     break;
    6957 
    6958   case 323:
    6959 
    6960 /* Line 1806 of yacc.c  */
    6961 #line 1344 "parser.yy"
    6962     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    6963     break;
    6964 
    6965   case 324:
    6966 
    6967 /* Line 1806 of yacc.c  */
    6968 #line 1346 "parser.yy"
    6969     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    6970     break;
    6971 
    6972   case 325:
    6973 
    6974 /* Line 1806 of yacc.c  */
    6975 #line 1348 "parser.yy"
    6976     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    6977     break;
    6978 
    6979   case 326:
    6980 
    6981 /* Line 1806 of yacc.c  */
    6982 #line 1350 "parser.yy"
    6983     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    6984     break;
    6985 
    6986   case 327:
    6987 
    6988 /* Line 1806 of yacc.c  */
    6989 #line 1352 "parser.yy"
    6990     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    6991     break;
    6992 
    6993   case 328:
    6994 
    6995 /* Line 1806 of yacc.c  */
    6996 #line 1354 "parser.yy"
    6997     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    6998     break;
    6999 
    7000   case 329:
    7001 
    7002 /* Line 1806 of yacc.c  */
    7003 #line 1356 "parser.yy"
    7004     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    7005     break;
    7006 
    7007   case 330:
    7008 
    7009 /* Line 1806 of yacc.c  */
    7010 #line 1358 "parser.yy"
    7011     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    7012     break;
    7013 
    7014   case 331:
    7015 
    7016 /* Line 1806 of yacc.c  */
    7017 #line 1360 "parser.yy"
    7018     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    7019     break;
    7020 
    7021   case 332:
    7022 
    7023 /* Line 1806 of yacc.c  */
    7024 #line 1362 "parser.yy"
    7025     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    7026     break;
    7027 
    7028   case 333:
    7029 
    7030 /* Line 1806 of yacc.c  */
    7031 #line 1364 "parser.yy"
    7032     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    7033     break;
    7034 
    7035   case 334:
    7036 
    7037 /* Line 1806 of yacc.c  */
    7038 #line 1366 "parser.yy"
    7039     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    7040     break;
    7041 
    7042   case 336:
    7043 
    7044 /* Line 1806 of yacc.c  */
    7045 #line 1373 "parser.yy"
     6827  case 341:
     6828
     6829/* Line 1806 of yacc.c  */
     6830#line 1404 "parser.yy"
     6831    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     6832    break;
     6833
     6834  case 342:
     6835
     6836/* Line 1806 of yacc.c  */
     6837#line 1409 "parser.yy"
     6838    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     6839    break;
     6840
     6841  case 343:
     6842
     6843/* Line 1806 of yacc.c  */
     6844#line 1411 "parser.yy"
     6845    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     6846    break;
     6847
     6848  case 344:
     6849
     6850/* Line 1806 of yacc.c  */
     6851#line 1413 "parser.yy"
     6852    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     6853    break;
     6854
     6855  case 345:
     6856
     6857/* Line 1806 of yacc.c  */
     6858#line 1415 "parser.yy"
     6859    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     6860    break;
     6861
     6862  case 347:
     6863
     6864/* Line 1806 of yacc.c  */
     6865#line 1421 "parser.yy"
    70466866    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70476867    break;
    70486868
    7049   case 337:
    7050 
    7051 /* Line 1806 of yacc.c  */
    7052 #line 1375 "parser.yy"
     6869  case 348:
     6870
     6871/* Line 1806 of yacc.c  */
     6872#line 1423 "parser.yy"
    70536873    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70546874    break;
    70556875
    7056   case 338:
    7057 
    7058 /* Line 1806 of yacc.c  */
    7059 #line 1377 "parser.yy"
     6876  case 349:
     6877
     6878/* Line 1806 of yacc.c  */
     6879#line 1425 "parser.yy"
    70606880    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    70616881    break;
    70626882
    7063   case 339:
    7064 
    7065 /* Line 1806 of yacc.c  */
    7066 #line 1379 "parser.yy"
    7067     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    7068     break;
    7069 
    7070   case 341:
    7071 
    7072 /* Line 1806 of yacc.c  */
    7073 #line 1385 "parser.yy"
    7074     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    7075     break;
    7076 
    7077   case 343:
    7078 
    7079 /* Line 1806 of yacc.c  */
    7080 #line 1392 "parser.yy"
    7081     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7082     break;
    7083 
    7084   case 344:
    7085 
    7086 /* Line 1806 of yacc.c  */
    7087 #line 1394 "parser.yy"
    7088     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7089     break;
    7090 
    7091   case 345:
    7092 
    7093 /* Line 1806 of yacc.c  */
    7094 #line 1396 "parser.yy"
    7095     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    7096     break;
    7097 
    7098   case 346:
    7099 
    7100 /* Line 1806 of yacc.c  */
    7101 #line 1401 "parser.yy"
    7102     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    7103     break;
    7104 
    7105   case 347:
    7106 
    7107 /* Line 1806 of yacc.c  */
    7108 #line 1403 "parser.yy"
    7109     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    7110     break;
    7111 
    7112   case 348:
    7113 
    7114 /* Line 1806 of yacc.c  */
    7115 #line 1405 "parser.yy"
    7116     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    7117     break;
    7118 
    7119   case 349:
    7120 
    7121 /* Line 1806 of yacc.c  */
    7122 #line 1407 "parser.yy"
    7123     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    7124     break;
    7125 
    71266883  case 351:
    7127 
    7128 /* Line 1806 of yacc.c  */
    7129 #line 1413 "parser.yy"
    7130     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7131     break;
    7132 
    7133   case 352:
    7134 
    7135 /* Line 1806 of yacc.c  */
    7136 #line 1415 "parser.yy"
    7137     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7138     break;
    7139 
    7140   case 353:
    7141 
    7142 /* Line 1806 of yacc.c  */
    7143 #line 1417 "parser.yy"
    7144     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    7145     break;
    7146 
    7147   case 355:
    7148 
    7149 /* Line 1806 of yacc.c  */
    7150 #line 1423 "parser.yy"
    7151     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7152     break;
    7153 
    7154   case 356:
    7155 
    7156 /* Line 1806 of yacc.c  */
    7157 #line 1425 "parser.yy"
    7158     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7159     break;
    7160 
    7161   case 358:
    71626884
    71636885/* Line 1806 of yacc.c  */
     
    71666888    break;
    71676889
    7168   case 359:
     6890  case 352:
    71696891
    71706892/* Line 1806 of yacc.c  */
     
    71736895    break;
    71746896
    7175   case 360:
    7176 
    7177 /* Line 1806 of yacc.c  */
    7178 #line 1435 "parser.yy"
     6897  case 354:
     6898
     6899/* Line 1806 of yacc.c  */
     6900#line 1439 "parser.yy"
     6901    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6902    break;
     6903
     6904  case 355:
     6905
     6906/* Line 1806 of yacc.c  */
     6907#line 1441 "parser.yy"
     6908    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6909    break;
     6910
     6911  case 356:
     6912
     6913/* Line 1806 of yacc.c  */
     6914#line 1443 "parser.yy"
    71796915    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    71806916    break;
    71816917
    7182   case 361:
    7183 
    7184 /* Line 1806 of yacc.c  */
    7185 #line 1440 "parser.yy"
     6918  case 357:
     6919
     6920/* Line 1806 of yacc.c  */
     6921#line 1448 "parser.yy"
    71866922    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    71876923    break;
    71886924
     6925  case 358:
     6926
     6927/* Line 1806 of yacc.c  */
     6928#line 1450 "parser.yy"
     6929    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6930    break;
     6931
     6932  case 359:
     6933
     6934/* Line 1806 of yacc.c  */
     6935#line 1452 "parser.yy"
     6936    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6937    break;
     6938
    71896939  case 362:
    71906940
    71916941/* Line 1806 of yacc.c  */
    7192 #line 1442 "parser.yy"
    7193     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6942#line 1462 "parser.yy"
     6943    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
    71946944    break;
    71956945
     
    71976947
    71986948/* Line 1806 of yacc.c  */
    7199 #line 1444 "parser.yy"
    7200     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7201     break;
    7202 
    7203   case 366:
    7204 
    7205 /* Line 1806 of yacc.c  */
    7206 #line 1454 "parser.yy"
    7207     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
    7208     break;
    7209 
    7210   case 367:
    7211 
    7212 /* Line 1806 of yacc.c  */
    7213 #line 1456 "parser.yy"
     6949#line 1464 "parser.yy"
    72146950    {
    72156951                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    72186954    break;
    72196955
     6956  case 364:
     6957
     6958/* Line 1806 of yacc.c  */
     6959#line 1469 "parser.yy"
     6960    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     6961    break;
     6962
     6963  case 365:
     6964
     6965/* Line 1806 of yacc.c  */
     6966#line 1471 "parser.yy"
     6967    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     6968    break;
     6969
     6970  case 366:
     6971
     6972/* Line 1806 of yacc.c  */
     6973#line 1473 "parser.yy"
     6974    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     6975    break;
     6976
     6977  case 367:
     6978
     6979/* Line 1806 of yacc.c  */
     6980#line 1475 "parser.yy"
     6981    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     6982    break;
     6983
    72206984  case 368:
    72216985
    72226986/* Line 1806 of yacc.c  */
    7223 #line 1461 "parser.yy"
    7224     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     6987#line 1480 "parser.yy"
     6988    { (yyval.aggKey) = DeclarationNode::Struct; }
    72256989    break;
    72266990
     
    72286992
    72296993/* Line 1806 of yacc.c  */
    7230 #line 1463 "parser.yy"
    7231     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     6994#line 1482 "parser.yy"
     6995    { (yyval.aggKey) = DeclarationNode::Union; }
    72326996    break;
    72336997
     
    72356999
    72367000/* Line 1806 of yacc.c  */
    7237 #line 1465 "parser.yy"
    7238     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     7001#line 1487 "parser.yy"
     7002    { (yyval.decl) = 0; }
    72397003    break;
    72407004
     
    72427006
    72437007/* Line 1806 of yacc.c  */
    7244 #line 1467 "parser.yy"
    7245     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    7246     break;
    7247 
    7248   case 372:
    7249 
    7250 /* Line 1806 of yacc.c  */
    7251 #line 1472 "parser.yy"
    7252     { (yyval.aggKey) = DeclarationNode::Struct; }
     7008#line 1489 "parser.yy"
     7009    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    72537010    break;
    72547011
     
    72567013
    72577014/* Line 1806 of yacc.c  */
    7258 #line 1474 "parser.yy"
    7259     { (yyval.aggKey) = DeclarationNode::Union; }
    7260     break;
    7261 
    7262   case 374:
    7263 
    7264 /* Line 1806 of yacc.c  */
    7265 #line 1479 "parser.yy"
    7266     { (yyval.decl) = 0; }
     7015#line 1495 "parser.yy"
     7016    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
    72677017    break;
    72687018
     
    72707020
    72717021/* Line 1806 of yacc.c  */
    7272 #line 1481 "parser.yy"
    7273     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    7274     break;
    7275 
    7276   case 377:
    7277 
    7278 /* Line 1806 of yacc.c  */
    7279 #line 1487 "parser.yy"
    7280     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
    7281     break;
    7282 
    7283   case 379:
    7284 
    7285 /* Line 1806 of yacc.c  */
    7286 #line 1490 "parser.yy"
     7022#line 1498 "parser.yy"
    72877023    {   // mark all fields in list
    7288                         for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     7024                        for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    72897025                                iter->set_extension( true );
    72907026                        (yyval.decl) = (yyvsp[(2) - (3)].decl);
     
    72927028    break;
    72937029
     7030  case 377:
     7031
     7032/* Line 1806 of yacc.c  */
     7033#line 1508 "parser.yy"
     7034    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     7035    break;
     7036
     7037  case 378:
     7038
     7039/* Line 1806 of yacc.c  */
     7040#line 1510 "parser.yy"
     7041    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     7042    break;
     7043
     7044  case 379:
     7045
     7046/* Line 1806 of yacc.c  */
     7047#line 1512 "parser.yy"
     7048    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     7049    break;
     7050
     7051  case 380:
     7052
     7053/* Line 1806 of yacc.c  */
     7054#line 1517 "parser.yy"
     7055    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7056    break;
     7057
    72947058  case 381:
    72957059
    72967060/* Line 1806 of yacc.c  */
    7297 #line 1500 "parser.yy"
    7298     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     7061#line 1519 "parser.yy"
     7062    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    72997063    break;
    73007064
     
    73027066
    73037067/* Line 1806 of yacc.c  */
    7304 #line 1502 "parser.yy"
    7305     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     7068#line 1524 "parser.yy"
     7069    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    73067070    break;
    73077071
     
    73097073
    73107074/* Line 1806 of yacc.c  */
    7311 #line 1504 "parser.yy"
    7312     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     7075#line 1526 "parser.yy"
     7076    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    73137077    break;
    73147078
     
    73167080
    73177081/* Line 1806 of yacc.c  */
    7318 #line 1509 "parser.yy"
    7319     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7082#line 1529 "parser.yy"
     7083    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    73207084    break;
    73217085
     
    73237087
    73247088/* Line 1806 of yacc.c  */
    7325 #line 1511 "parser.yy"
    7326     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    7327     break;
    7328 
    7329   case 386:
    7330 
    7331 /* Line 1806 of yacc.c  */
    7332 #line 1516 "parser.yy"
    7333     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     7089#line 1532 "parser.yy"
     7090    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    73347091    break;
    73357092
     
    73377094
    73387095/* Line 1806 of yacc.c  */
    7339 #line 1518 "parser.yy"
    7340     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     7096#line 1538 "parser.yy"
     7097    { (yyval.en) = 0; }
    73417098    break;
    73427099
     
    73447101
    73457102/* Line 1806 of yacc.c  */
    7346 #line 1521 "parser.yy"
    7347     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     7103#line 1540 "parser.yy"
     7104    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    73487105    break;
    73497106
     
    73517108
    73527109/* Line 1806 of yacc.c  */
    7353 #line 1524 "parser.yy"
    7354     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     7110#line 1545 "parser.yy"
     7111    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    73557112    break;
    73567113
     
    73587115
    73597116/* Line 1806 of yacc.c  */
    7360 #line 1530 "parser.yy"
    7361     { (yyval.en) = 0; }
     7117#line 1554 "parser.yy"
     7118    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    73627119    break;
    73637120
     
    73657122
    73667123/* Line 1806 of yacc.c  */
    7367 #line 1532 "parser.yy"
    7368     { (yyval.en) = (yyvsp[(1) - (1)].en); }
    7369     break;
    7370 
    7371   case 393:
    7372 
    7373 /* Line 1806 of yacc.c  */
    7374 #line 1537 "parser.yy"
    7375     { (yyval.en) = (yyvsp[(2) - (2)].en); }
    7376     break;
    7377 
    7378   case 395:
    7379 
    7380 /* Line 1806 of yacc.c  */
    7381 #line 1546 "parser.yy"
    7382     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    7383     break;
    7384 
    7385   case 396:
    7386 
    7387 /* Line 1806 of yacc.c  */
    7388 #line 1548 "parser.yy"
     7124#line 1556 "parser.yy"
    73897125    {
    73907126                        typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
     
    73937129    break;
    73947130
     7131  case 393:
     7132
     7133/* Line 1806 of yacc.c  */
     7134#line 1561 "parser.yy"
     7135    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     7136    break;
     7137
     7138  case 394:
     7139
     7140/* Line 1806 of yacc.c  */
     7141#line 1563 "parser.yy"
     7142    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     7143    break;
     7144
     7145  case 395:
     7146
     7147/* Line 1806 of yacc.c  */
     7148#line 1568 "parser.yy"
     7149    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     7150    break;
     7151
     7152  case 396:
     7153
     7154/* Line 1806 of yacc.c  */
     7155#line 1570 "parser.yy"
     7156    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     7157    break;
     7158
    73957159  case 397:
    73967160
    73977161/* Line 1806 of yacc.c  */
    7398 #line 1553 "parser.yy"
    7399     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     7162#line 1575 "parser.yy"
     7163    { (yyval.en) = 0; }
    74007164    break;
    74017165
     
    74037167
    74047168/* Line 1806 of yacc.c  */
    7405 #line 1555 "parser.yy"
    7406     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     7169#line 1577 "parser.yy"
     7170    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    74077171    break;
    74087172
     
    74107174
    74117175/* Line 1806 of yacc.c  */
    7412 #line 1560 "parser.yy"
    7413     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    7414     break;
    7415 
    7416   case 400:
    7417 
    7418 /* Line 1806 of yacc.c  */
    7419 #line 1562 "parser.yy"
    7420     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    7421     break;
    7422 
    7423   case 401:
    7424 
    7425 /* Line 1806 of yacc.c  */
    7426 #line 1567 "parser.yy"
    7427     { (yyval.en) = 0; }
    7428     break;
    7429 
    7430   case 402:
    7431 
    7432 /* Line 1806 of yacc.c  */
    7433 #line 1569 "parser.yy"
    7434     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     7176#line 1584 "parser.yy"
     7177    { (yyval.decl) = 0; }
    74357178    break;
    74367179
     
    74387181
    74397182/* Line 1806 of yacc.c  */
    7440 #line 1576 "parser.yy"
    7441     { (yyval.decl) = 0; }
     7183#line 1592 "parser.yy"
     7184    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7185    break;
     7186
     7187  case 404:
     7188
     7189/* Line 1806 of yacc.c  */
     7190#line 1594 "parser.yy"
     7191    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7192    break;
     7193
     7194  case 405:
     7195
     7196/* Line 1806 of yacc.c  */
     7197#line 1596 "parser.yy"
     7198    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    74427199    break;
    74437200
     
    74457202
    74467203/* Line 1806 of yacc.c  */
    7447 #line 1584 "parser.yy"
     7204#line 1604 "parser.yy"
    74487205    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    74497206    break;
    74507207
    74517208  case 408:
    7452 
    7453 /* Line 1806 of yacc.c  */
    7454 #line 1586 "parser.yy"
    7455     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7456     break;
    7457 
    7458   case 409:
    7459 
    7460 /* Line 1806 of yacc.c  */
    7461 #line 1588 "parser.yy"
    7462     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7463     break;
    7464 
    7465   case 411:
    7466 
    7467 /* Line 1806 of yacc.c  */
    7468 #line 1596 "parser.yy"
    7469     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7470     break;
    7471 
    7472   case 412:
    7473 
    7474 /* Line 1806 of yacc.c  */
    7475 #line 1598 "parser.yy"
    7476     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7477     break;
    7478 
    7479   case 413:
    7480 
    7481 /* Line 1806 of yacc.c  */
    7482 #line 1600 "parser.yy"
    7483     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    7484     break;
    7485 
    7486   case 415:
    74877209
    74887210/* Line 1806 of yacc.c  */
     
    74917213    break;
    74927214
    7493   case 416:
    7494 
    7495 /* Line 1806 of yacc.c  */
    7496 #line 1611 "parser.yy"
     7215  case 409:
     7216
     7217/* Line 1806 of yacc.c  */
     7218#line 1608 "parser.yy"
     7219    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     7220    break;
     7221
     7222  case 411:
     7223
     7224/* Line 1806 of yacc.c  */
     7225#line 1614 "parser.yy"
     7226    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7227    break;
     7228
     7229  case 412:
     7230
     7231/* Line 1806 of yacc.c  */
     7232#line 1619 "parser.yy"
    74977233    { (yyval.decl) = 0; }
    74987234    break;
    74997235
     7236  case 415:
     7237
     7238/* Line 1806 of yacc.c  */
     7239#line 1626 "parser.yy"
     7240    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7241    break;
     7242
     7243  case 418:
     7244
     7245/* Line 1806 of yacc.c  */
     7246#line 1633 "parser.yy"
     7247    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7248    break;
     7249
    75007250  case 419:
    75017251
    75027252/* Line 1806 of yacc.c  */
    7503 #line 1618 "parser.yy"
    7504     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7253#line 1635 "parser.yy"
     7254    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7255    break;
     7256
     7257  case 421:
     7258
     7259/* Line 1806 of yacc.c  */
     7260#line 1644 "parser.yy"
     7261    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    75057262    break;
    75067263
     
    75087265
    75097266/* Line 1806 of yacc.c  */
    7510 #line 1625 "parser.yy"
    7511     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7267#line 1647 "parser.yy"
     7268    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    75127269    break;
    75137270
     
    75157272
    75167273/* Line 1806 of yacc.c  */
    7517 #line 1627 "parser.yy"
    7518     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7519     break;
    7520 
    7521   case 425:
    7522 
    7523 /* Line 1806 of yacc.c  */
    7524 #line 1636 "parser.yy"
    7525     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7526     break;
    7527 
    7528   case 426:
    7529 
    7530 /* Line 1806 of yacc.c  */
    7531 #line 1639 "parser.yy"
    7532     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7533     break;
    7534 
    7535   case 427:
    7536 
    7537 /* Line 1806 of yacc.c  */
    7538 #line 1641 "parser.yy"
     7274#line 1649 "parser.yy"
    75397275    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    75407276    break;
    75417277
    7542   case 432:
    7543 
    7544 /* Line 1806 of yacc.c  */
    7545 #line 1651 "parser.yy"
     7278  case 428:
     7279
     7280/* Line 1806 of yacc.c  */
     7281#line 1659 "parser.yy"
    75467282    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75477283    break;
    75487284
    7549   case 434:
    7550 
    7551 /* Line 1806 of yacc.c  */
    7552 #line 1657 "parser.yy"
     7285  case 430:
     7286
     7287/* Line 1806 of yacc.c  */
     7288#line 1665 "parser.yy"
    75537289    {
    75547290                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75577293    break;
    75587294
    7559   case 435:
    7560 
    7561 /* Line 1806 of yacc.c  */
    7562 #line 1662 "parser.yy"
     7295  case 431:
     7296
     7297/* Line 1806 of yacc.c  */
     7298#line 1670 "parser.yy"
    75637299    {
    75647300                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    75677303    break;
    75687304
    7569   case 437:
    7570 
    7571 /* Line 1806 of yacc.c  */
    7572 #line 1671 "parser.yy"
     7305  case 433:
     7306
     7307/* Line 1806 of yacc.c  */
     7308#line 1679 "parser.yy"
    75737309    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    75747310    break;
    75757311
    7576   case 438:
    7577 
    7578 /* Line 1806 of yacc.c  */
    7579 #line 1680 "parser.yy"
     7312  case 434:
     7313
     7314/* Line 1806 of yacc.c  */
     7315#line 1688 "parser.yy"
    75807316    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    75817317    break;
    75827318
    7583   case 439:
    7584 
    7585 /* Line 1806 of yacc.c  */
    7586 #line 1682 "parser.yy"
     7319  case 435:
     7320
     7321/* Line 1806 of yacc.c  */
     7322#line 1690 "parser.yy"
    75877323    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    75887324    break;
    75897325
    7590   case 451:
    7591 
    7592 /* Line 1806 of yacc.c  */
    7593 #line 1707 "parser.yy"
    7594     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    7595     break;
    7596 
    7597   case 455:
     7326  case 447:
    75987327
    75997328/* Line 1806 of yacc.c  */
     
    76027331    break;
    76037332
     7333  case 451:
     7334
     7335/* Line 1806 of yacc.c  */
     7336#line 1723 "parser.yy"
     7337    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7338    break;
     7339
     7340  case 452:
     7341
     7342/* Line 1806 of yacc.c  */
     7343#line 1728 "parser.yy"
     7344    { (yyval.in) = 0; }
     7345    break;
     7346
     7347  case 453:
     7348
     7349/* Line 1806 of yacc.c  */
     7350#line 1730 "parser.yy"
     7351    { (yyval.in) = (yyvsp[(2) - (2)].in); }
     7352    break;
     7353
     7354  case 454:
     7355
     7356/* Line 1806 of yacc.c  */
     7357#line 1732 "parser.yy"
     7358    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     7359    break;
     7360
     7361  case 455:
     7362
     7363/* Line 1806 of yacc.c  */
     7364#line 1736 "parser.yy"
     7365    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     7366    break;
     7367
    76047368  case 456:
    76057369
    76067370/* Line 1806 of yacc.c  */
    7607 #line 1720 "parser.yy"
     7371#line 1737 "parser.yy"
     7372    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     7373    break;
     7374
     7375  case 457:
     7376
     7377/* Line 1806 of yacc.c  */
     7378#line 1742 "parser.yy"
    76087379    { (yyval.in) = 0; }
    76097380    break;
    76107381
    7611   case 457:
    7612 
    7613 /* Line 1806 of yacc.c  */
    7614 #line 1722 "parser.yy"
    7615     { (yyval.in) = (yyvsp[(2) - (2)].in); }
    7616     break;
    7617 
    7618   case 458:
    7619 
    7620 /* Line 1806 of yacc.c  */
    7621 #line 1724 "parser.yy"
    7622     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
    7623     break;
    7624 
    76257382  case 459:
    76267383
    76277384/* Line 1806 of yacc.c  */
    7628 #line 1728 "parser.yy"
    7629     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     7385#line 1744 "parser.yy"
     7386    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    76307387    break;
    76317388
     
    76337390
    76347391/* Line 1806 of yacc.c  */
    7635 #line 1729 "parser.yy"
    7636     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     7392#line 1745 "parser.yy"
     7393    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
    76377394    break;
    76387395
     
    76407397
    76417398/* Line 1806 of yacc.c  */
    7642 #line 1734 "parser.yy"
    7643     { (yyval.in) = 0; }
     7399#line 1747 "parser.yy"
     7400    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    76447401    break;
    76457402
     
    76477404
    76487405/* Line 1806 of yacc.c  */
    7649 #line 1736 "parser.yy"
    7650     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    7651     break;
    7652 
    7653   case 464:
    7654 
    7655 /* Line 1806 of yacc.c  */
    7656 #line 1737 "parser.yy"
    7657     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     7406#line 1763 "parser.yy"
     7407    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
    76587408    break;
    76597409
     
    76617411
    76627412/* Line 1806 of yacc.c  */
    7663 #line 1739 "parser.yy"
    7664     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     7413#line 1769 "parser.yy"
     7414    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
     7415    break;
     7416
     7417  case 466:
     7418
     7419/* Line 1806 of yacc.c  */
     7420#line 1775 "parser.yy"
     7421    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
    76657422    break;
    76667423
     
    76687425
    76697426/* Line 1806 of yacc.c  */
    7670 #line 1755 "parser.yy"
    7671     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     7427#line 1778 "parser.yy"
     7428    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     7429    break;
     7430
     7431  case 468:
     7432
     7433/* Line 1806 of yacc.c  */
     7434#line 1780 "parser.yy"
     7435    { (yyval.en) = (yyvsp[(3) - (5)].en); }
    76727436    break;
    76737437
     
    76757439
    76767440/* Line 1806 of yacc.c  */
    7677 #line 1761 "parser.yy"
    7678     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     7441#line 1782 "parser.yy"
     7442    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
    76797443    break;
    76807444
     
    76827446
    76837447/* Line 1806 of yacc.c  */
    7684 #line 1769 "parser.yy"
    7685     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    7686     break;
    7687 
    7688   case 471:
    7689 
    7690 /* Line 1806 of yacc.c  */
    7691 #line 1771 "parser.yy"
    7692     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     7448#line 1784 "parser.yy"
     7449    { (yyval.en) = (yyvsp[(4) - (6)].en); }
    76937450    break;
    76947451
     
    76967453
    76977454/* Line 1806 of yacc.c  */
    7698 #line 1774 "parser.yy"
    7699     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     7455#line 1808 "parser.yy"
     7456    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77007457    break;
    77017458
     
    77037460
    77047461/* Line 1806 of yacc.c  */
    7705 #line 1776 "parser.yy"
    7706     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     7462#line 1810 "parser.yy"
     7463    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77077464    break;
    77087465
     
    77107467
    77117468/* Line 1806 of yacc.c  */
    7712 #line 1778 "parser.yy"
    7713     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    7714     break;
    7715 
    7716   case 475:
    7717 
    7718 /* Line 1806 of yacc.c  */
    7719 #line 1780 "parser.yy"
    7720     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     7469#line 1812 "parser.yy"
     7470    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     7471    break;
     7472
     7473  case 476:
     7474
     7475/* Line 1806 of yacc.c  */
     7476#line 1818 "parser.yy"
     7477    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    77217478    break;
    77227479
     
    77247481
    77257482/* Line 1806 of yacc.c  */
    7726 #line 1804 "parser.yy"
    7727     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     7483#line 1820 "parser.yy"
     7484    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    77287485    break;
    77297486
     
    77317488
    77327489/* Line 1806 of yacc.c  */
    7733 #line 1806 "parser.yy"
    7734     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7735     break;
    7736 
    7737   case 479:
    7738 
    7739 /* Line 1806 of yacc.c  */
    7740 #line 1808 "parser.yy"
    7741     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     7490#line 1825 "parser.yy"
     7491    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     7492    break;
     7493
     7494  case 480:
     7495
     7496/* Line 1806 of yacc.c  */
     7497#line 1831 "parser.yy"
     7498    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    77427499    break;
    77437500
     
    77457502
    77467503/* Line 1806 of yacc.c  */
    7747 #line 1814 "parser.yy"
    7748     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     7504#line 1836 "parser.yy"
     7505    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    77497506    break;
    77507507
     
    77527509
    77537510/* Line 1806 of yacc.c  */
    7754 #line 1816 "parser.yy"
    7755     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7756     break;
    7757 
    7758   case 483:
    7759 
    7760 /* Line 1806 of yacc.c  */
    7761 #line 1821 "parser.yy"
    7762     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     7511#line 1838 "parser.yy"
     7512    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     7513    break;
     7514
     7515  case 484:
     7516
     7517/* Line 1806 of yacc.c  */
     7518#line 1844 "parser.yy"
     7519    { (yyval.tclass) = DeclarationNode::Type; }
    77637520    break;
    77647521
     
    77667523
    77677524/* Line 1806 of yacc.c  */
    7768 #line 1827 "parser.yy"
    7769     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     7525#line 1846 "parser.yy"
     7526    { (yyval.tclass) = DeclarationNode::Ftype; }
    77707527    break;
    77717528
     
    77737530
    77747531/* Line 1806 of yacc.c  */
    7775 #line 1832 "parser.yy"
    7776     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     7532#line 1848 "parser.yy"
     7533    { (yyval.tclass) = DeclarationNode::Dtype; }
    77777534    break;
    77787535
     
    77807537
    77817538/* Line 1806 of yacc.c  */
    7782 #line 1834 "parser.yy"
    7783     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     7539#line 1853 "parser.yy"
     7540    { (yyval.decl) = 0; }
     7541    break;
     7542
     7543  case 488:
     7544
     7545/* Line 1806 of yacc.c  */
     7546#line 1855 "parser.yy"
     7547    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    77847548    break;
    77857549
     
    77877551
    77887552/* Line 1806 of yacc.c  */
    7789 #line 1840 "parser.yy"
    7790     { (yyval.tclass) = DeclarationNode::Type; }
    7791     break;
    7792 
    7793   case 490:
    7794 
    7795 /* Line 1806 of yacc.c  */
    7796 #line 1842 "parser.yy"
    7797     { (yyval.tclass) = DeclarationNode::Ftype; }
    7798     break;
    7799 
    7800   case 491:
    7801 
    7802 /* Line 1806 of yacc.c  */
    7803 #line 1844 "parser.yy"
    7804     { (yyval.tclass) = DeclarationNode::Dtype; }
    7805     break;
    7806 
    7807   case 492:
    7808 
    7809 /* Line 1806 of yacc.c  */
    7810 #line 1849 "parser.yy"
    7811     { (yyval.decl) = 0; }
    7812     break;
    7813 
    7814   case 493:
    7815 
    7816 /* Line 1806 of yacc.c  */
    7817 #line 1851 "parser.yy"
    7818     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
    7819     break;
    7820 
    7821   case 494:
    7822 
    7823 /* Line 1806 of yacc.c  */
    7824 #line 1856 "parser.yy"
     7553#line 1860 "parser.yy"
    78257554    {
    78267555                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    78297558    break;
    78307559
     7560  case 490:
     7561
     7562/* Line 1806 of yacc.c  */
     7563#line 1865 "parser.yy"
     7564    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     7565    break;
     7566
     7567  case 491:
     7568
     7569/* Line 1806 of yacc.c  */
     7570#line 1867 "parser.yy"
     7571    { (yyval.decl) = 0; }
     7572    break;
     7573
     7574  case 492:
     7575
     7576/* Line 1806 of yacc.c  */
     7577#line 1872 "parser.yy"
     7578    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     7579    break;
     7580
     7581  case 494:
     7582
     7583/* Line 1806 of yacc.c  */
     7584#line 1875 "parser.yy"
     7585    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     7586    break;
     7587
    78317588  case 495:
    78327589
    78337590/* Line 1806 of yacc.c  */
    7834 #line 1861 "parser.yy"
    7835     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     7591#line 1877 "parser.yy"
     7592    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
    78367593    break;
    78377594
     
    78397596
    78407597/* Line 1806 of yacc.c  */
    7841 #line 1863 "parser.yy"
    7842     { (yyval.decl) = 0; }
     7598#line 1882 "parser.yy"
     7599    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78437600    break;
    78447601
     
    78467603
    78477604/* Line 1806 of yacc.c  */
    7848 #line 1868 "parser.yy"
    7849     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     7605#line 1884 "parser.yy"
     7606    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     7607    break;
     7608
     7609  case 498:
     7610
     7611/* Line 1806 of yacc.c  */
     7612#line 1886 "parser.yy"
     7613    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    78507614    break;
    78517615
     
    78537617
    78547618/* Line 1806 of yacc.c  */
    7855 #line 1871 "parser.yy"
    7856     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     7619#line 1891 "parser.yy"
     7620    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    78577621    break;
    78587622
     
    78607624
    78617625/* Line 1806 of yacc.c  */
    7862 #line 1873 "parser.yy"
    7863     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     7626#line 1893 "parser.yy"
     7627    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    78647628    break;
    78657629
     
    78677631
    78687632/* Line 1806 of yacc.c  */
    7869 #line 1878 "parser.yy"
    7870     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    7871     break;
    7872 
    7873   case 502:
    7874 
    7875 /* Line 1806 of yacc.c  */
    7876 #line 1880 "parser.yy"
    7877     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    7878     break;
    7879 
    7880   case 503:
    7881 
    7882 /* Line 1806 of yacc.c  */
    7883 #line 1882 "parser.yy"
    7884     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    7885     break;
    7886 
    7887   case 504:
    7888 
    7889 /* Line 1806 of yacc.c  */
    7890 #line 1887 "parser.yy"
    7891     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    7892     break;
    7893 
    7894   case 505:
    7895 
    7896 /* Line 1806 of yacc.c  */
    7897 #line 1889 "parser.yy"
    7898     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    7899     break;
    7900 
    7901   case 506:
    7902 
    7903 /* Line 1806 of yacc.c  */
    7904 #line 1894 "parser.yy"
     7633#line 1898 "parser.yy"
    79057634    {
    79067635                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    79097638    break;
    79107639
    7911   case 507:
    7912 
    7913 /* Line 1806 of yacc.c  */
    7914 #line 1899 "parser.yy"
     7640  case 502:
     7641
     7642/* Line 1806 of yacc.c  */
     7643#line 1903 "parser.yy"
    79157644    {
    79167645                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    79197648    break;
    79207649
    7921   case 508:
    7922 
    7923 /* Line 1806 of yacc.c  */
    7924 #line 1907 "parser.yy"
     7650  case 503:
     7651
     7652/* Line 1806 of yacc.c  */
     7653#line 1911 "parser.yy"
    79257654    {
    79267655                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    79297658    break;
    79307659
    7931   case 509:
    7932 
    7933 /* Line 1806 of yacc.c  */
    7934 #line 1912 "parser.yy"
     7660  case 504:
     7661
     7662/* Line 1806 of yacc.c  */
     7663#line 1916 "parser.yy"
    79357664    {
    79367665                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    79397668    break;
    79407669
    7941   case 510:
    7942 
    7943 /* Line 1806 of yacc.c  */
    7944 #line 1917 "parser.yy"
     7670  case 505:
     7671
     7672/* Line 1806 of yacc.c  */
     7673#line 1921 "parser.yy"
    79457674    {
    79467675                        typedefTable.leaveTrait();
     
    79507679    break;
    79517680
    7952   case 512:
    7953 
    7954 /* Line 1806 of yacc.c  */
    7955 #line 1927 "parser.yy"
     7681  case 507:
     7682
     7683/* Line 1806 of yacc.c  */
     7684#line 1931 "parser.yy"
    79567685    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    79577686    break;
    79587687
    7959   case 515:
    7960 
    7961 /* Line 1806 of yacc.c  */
    7962 #line 1937 "parser.yy"
     7688  case 510:
     7689
     7690/* Line 1806 of yacc.c  */
     7691#line 1941 "parser.yy"
    79637692    {
    79647693                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79677696    break;
    79687697
    7969   case 516:
    7970 
    7971 /* Line 1806 of yacc.c  */
    7972 #line 1942 "parser.yy"
     7698  case 511:
     7699
     7700/* Line 1806 of yacc.c  */
     7701#line 1946 "parser.yy"
    79737702    {
    79747703                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79777706    break;
    79787707
    7979   case 517:
    7980 
    7981 /* Line 1806 of yacc.c  */
    7982 #line 1947 "parser.yy"
     7708  case 512:
     7709
     7710/* Line 1806 of yacc.c  */
     7711#line 1951 "parser.yy"
    79837712    {
    79847713                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    79877716    break;
    79887717
    7989   case 518:
    7990 
    7991 /* Line 1806 of yacc.c  */
    7992 #line 1955 "parser.yy"
     7718  case 513:
     7719
     7720/* Line 1806 of yacc.c  */
     7721#line 1959 "parser.yy"
    79937722    {
    79947723                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    79977726    break;
    79987727
    7999   case 519:
    8000 
    8001 /* Line 1806 of yacc.c  */
    8002 #line 1960 "parser.yy"
     7728  case 514:
     7729
     7730/* Line 1806 of yacc.c  */
     7731#line 1964 "parser.yy"
    80037732    {
    80047733                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    80077736    break;
    80087737
    8009   case 520:
    8010 
    8011 /* Line 1806 of yacc.c  */
    8012 #line 1970 "parser.yy"
     7738  case 515:
     7739
     7740/* Line 1806 of yacc.c  */
     7741#line 1974 "parser.yy"
    80137742    {}
    80147743    break;
    80157744
    8016   case 521:
    8017 
    8018 /* Line 1806 of yacc.c  */
    8019 #line 1972 "parser.yy"
     7745  case 516:
     7746
     7747/* Line 1806 of yacc.c  */
     7748#line 1976 "parser.yy"
    80207749    {
    80217750                        if ( theTree ) {
     
    80277756    break;
    80287757
     7758  case 518:
     7759
     7760/* Line 1806 of yacc.c  */
     7761#line 1988 "parser.yy"
     7762    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     7763    break;
     7764
     7765  case 519:
     7766
     7767/* Line 1806 of yacc.c  */
     7768#line 1993 "parser.yy"
     7769    { (yyval.decl) = 0; }
     7770    break;
     7771
    80297772  case 523:
    80307773
    80317774/* Line 1806 of yacc.c  */
    8032 #line 1984 "parser.yy"
    8033     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     7775#line 2001 "parser.yy"
     7776    {}
    80347777    break;
    80357778
     
    80377780
    80387781/* Line 1806 of yacc.c  */
    8039 #line 1989 "parser.yy"
    8040     { (yyval.decl) = 0; }
    8041     break;
    8042 
    8043   case 528:
    8044 
    8045 /* Line 1806 of yacc.c  */
    8046 #line 1997 "parser.yy"
    8047     {}
    8048     break;
    8049 
    8050   case 529:
    8051 
    8052 /* Line 1806 of yacc.c  */
    8053 #line 1999 "parser.yy"
     7782#line 2003 "parser.yy"
    80547783    {
    80557784                        linkageStack.push( linkage );
     
    80587787    break;
    80597788
    8060   case 530:
    8061 
    8062 /* Line 1806 of yacc.c  */
    8063 #line 2004 "parser.yy"
     7789  case 525:
     7790
     7791/* Line 1806 of yacc.c  */
     7792#line 2008 "parser.yy"
    80647793    {
    80657794                        linkage = linkageStack.top();
     
    80697798    break;
    80707799
    8071   case 531:
    8072 
    8073 /* Line 1806 of yacc.c  */
    8074 #line 2010 "parser.yy"
     7800  case 526:
     7801
     7802/* Line 1806 of yacc.c  */
     7803#line 2014 "parser.yy"
    80757804    {   // mark all fields in list
    8076                         for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     7805                        for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    80777806                                iter->set_extension( true );
    80787807                        (yyval.decl) = (yyvsp[(2) - (2)].decl);
     
    80807809    break;
    80817810
    8082   case 533:
    8083 
    8084 /* Line 1806 of yacc.c  */
    8085 #line 2025 "parser.yy"
     7811  case 528:
     7812
     7813/* Line 1806 of yacc.c  */
     7814#line 2029 "parser.yy"
    80867815    {
    80877816                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80917820    break;
    80927821
    8093   case 534:
    8094 
    8095 /* Line 1806 of yacc.c  */
    8096 #line 2031 "parser.yy"
     7822  case 529:
     7823
     7824/* Line 1806 of yacc.c  */
     7825#line 2035 "parser.yy"
    80977826    {
    80987827                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81027831    break;
    81037832
    8104   case 535:
    8105 
    8106 /* Line 1806 of yacc.c  */
    8107 #line 2040 "parser.yy"
     7833  case 530:
     7834
     7835/* Line 1806 of yacc.c  */
     7836#line 2044 "parser.yy"
    81087837    {
    81097838                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81137842    break;
    81147843
    8115   case 536:
    8116 
    8117 /* Line 1806 of yacc.c  */
    8118 #line 2046 "parser.yy"
     7844  case 531:
     7845
     7846/* Line 1806 of yacc.c  */
     7847#line 2050 "parser.yy"
    81197848    {
    81207849                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81247853    break;
    81257854
    8126   case 537:
    8127 
    8128 /* Line 1806 of yacc.c  */
    8129 #line 2052 "parser.yy"
     7855  case 532:
     7856
     7857/* Line 1806 of yacc.c  */
     7858#line 2056 "parser.yy"
    81307859    {
    81317860                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81357864    break;
    81367865
    8137   case 538:
    8138 
    8139 /* Line 1806 of yacc.c  */
    8140 #line 2058 "parser.yy"
     7866  case 533:
     7867
     7868/* Line 1806 of yacc.c  */
     7869#line 2062 "parser.yy"
    81417870    {
    81427871                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81467875    break;
    81477876
    8148   case 539:
    8149 
    8150 /* Line 1806 of yacc.c  */
    8151 #line 2064 "parser.yy"
     7877  case 534:
     7878
     7879/* Line 1806 of yacc.c  */
     7880#line 2068 "parser.yy"
    81527881    {
    81537882                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81577886    break;
    81587887
    8159   case 540:
    8160 
    8161 /* Line 1806 of yacc.c  */
    8162 #line 2072 "parser.yy"
     7888  case 535:
     7889
     7890/* Line 1806 of yacc.c  */
     7891#line 2076 "parser.yy"
    81637892    {
    81647893                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81687897    break;
    81697898
    8170   case 541:
    8171 
    8172 /* Line 1806 of yacc.c  */
    8173 #line 2078 "parser.yy"
     7899  case 536:
     7900
     7901/* Line 1806 of yacc.c  */
     7902#line 2082 "parser.yy"
    81747903    {
    81757904                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81797908    break;
    81807909
    8181   case 542:
    8182 
    8183 /* Line 1806 of yacc.c  */
    8184 #line 2086 "parser.yy"
     7910  case 537:
     7911
     7912/* Line 1806 of yacc.c  */
     7913#line 2090 "parser.yy"
    81857914    {
    81867915                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    81907919    break;
    81917920
    8192   case 543:
    8193 
    8194 /* Line 1806 of yacc.c  */
    8195 #line 2092 "parser.yy"
     7921  case 538:
     7922
     7923/* Line 1806 of yacc.c  */
     7924#line 2096 "parser.yy"
    81967925    {
    81977926                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    82017930    break;
    82027931
    8203   case 547:
    8204 
    8205 /* Line 1806 of yacc.c  */
    8206 #line 2107 "parser.yy"
    8207     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    8208     break;
    8209 
    8210   case 550:
    8211 
    8212 /* Line 1806 of yacc.c  */
    8213 #line 2117 "parser.yy"
     7932  case 542:
     7933
     7934/* Line 1806 of yacc.c  */
     7935#line 2111 "parser.yy"
     7936    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     7937    break;
     7938
     7939  case 545:
     7940
     7941/* Line 1806 of yacc.c  */
     7942#line 2121 "parser.yy"
    82147943    { (yyval.decl) = 0; }
    82157944    break;
    82167945
    8217   case 553:
    8218 
    8219 /* Line 1806 of yacc.c  */
    8220 #line 2124 "parser.yy"
     7946  case 548:
     7947
     7948/* Line 1806 of yacc.c  */
     7949#line 2128 "parser.yy"
    82217950    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    82227951    break;
    82237952
    8224   case 554:
    8225 
    8226 /* Line 1806 of yacc.c  */
    8227 #line 2130 "parser.yy"
     7953  case 549:
     7954
     7955/* Line 1806 of yacc.c  */
     7956#line 2134 "parser.yy"
    82287957    { (yyval.decl) = 0; }
    82297958    break;
    82307959
    8231   case 560:
    8232 
    8233 /* Line 1806 of yacc.c  */
    8234 #line 2145 "parser.yy"
     7960  case 555:
     7961
     7962/* Line 1806 of yacc.c  */
     7963#line 2149 "parser.yy"
    82357964    {}
    82367965    break;
    82377966
     7967  case 556:
     7968
     7969/* Line 1806 of yacc.c  */
     7970#line 2150 "parser.yy"
     7971    {}
     7972    break;
     7973
     7974  case 557:
     7975
     7976/* Line 1806 of yacc.c  */
     7977#line 2151 "parser.yy"
     7978    {}
     7979    break;
     7980
     7981  case 558:
     7982
     7983/* Line 1806 of yacc.c  */
     7984#line 2152 "parser.yy"
     7985    {}
     7986    break;
     7987
     7988  case 559:
     7989
     7990/* Line 1806 of yacc.c  */
     7991#line 2187 "parser.yy"
     7992    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7993    break;
     7994
    82387995  case 561:
    82397996
    82407997/* Line 1806 of yacc.c  */
    8241 #line 2146 "parser.yy"
    8242     {}
     7998#line 2190 "parser.yy"
     7999    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82438000    break;
    82448001
     
    82468003
    82478004/* Line 1806 of yacc.c  */
    8248 #line 2147 "parser.yy"
    8249     {}
     8005#line 2192 "parser.yy"
     8006    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82508007    break;
    82518008
     
    82538010
    82548011/* Line 1806 of yacc.c  */
    8255 #line 2148 "parser.yy"
    8256     {}
    8257     break;
    8258 
    8259   case 564:
    8260 
    8261 /* Line 1806 of yacc.c  */
    8262 #line 2183 "parser.yy"
    8263     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8264     break;
    8265 
    8266   case 566:
    8267 
    8268 /* Line 1806 of yacc.c  */
    8269 #line 2186 "parser.yy"
    8270     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8271     break;
    8272 
    8273   case 567:
    8274 
    8275 /* Line 1806 of yacc.c  */
    8276 #line 2188 "parser.yy"
    8277     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8278     break;
    8279 
    8280   case 568:
    8281 
    8282 /* Line 1806 of yacc.c  */
    8283 #line 2193 "parser.yy"
     8012#line 2197 "parser.yy"
    82848013    {
    82858014                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    82888017    break;
    82898018
     8019  case 564:
     8020
     8021/* Line 1806 of yacc.c  */
     8022#line 2202 "parser.yy"
     8023    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8024    break;
     8025
     8026  case 565:
     8027
     8028/* Line 1806 of yacc.c  */
     8029#line 2207 "parser.yy"
     8030    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8031    break;
     8032
     8033  case 566:
     8034
     8035/* Line 1806 of yacc.c  */
     8036#line 2209 "parser.yy"
     8037    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8038    break;
     8039
     8040  case 567:
     8041
     8042/* Line 1806 of yacc.c  */
     8043#line 2211 "parser.yy"
     8044    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8045    break;
     8046
     8047  case 568:
     8048
     8049/* Line 1806 of yacc.c  */
     8050#line 2216 "parser.yy"
     8051    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8052    break;
     8053
    82908054  case 569:
    82918055
    82928056/* Line 1806 of yacc.c  */
    8293 #line 2198 "parser.yy"
     8057#line 2218 "parser.yy"
     8058    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8059    break;
     8060
     8061  case 570:
     8062
     8063/* Line 1806 of yacc.c  */
     8064#line 2220 "parser.yy"
     8065    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8066    break;
     8067
     8068  case 571:
     8069
     8070/* Line 1806 of yacc.c  */
     8071#line 2222 "parser.yy"
    82948072    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82958073    break;
    82968074
    8297   case 570:
    8298 
    8299 /* Line 1806 of yacc.c  */
    8300 #line 2203 "parser.yy"
     8075  case 572:
     8076
     8077/* Line 1806 of yacc.c  */
     8078#line 2227 "parser.yy"
     8079    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8080    break;
     8081
     8082  case 573:
     8083
     8084/* Line 1806 of yacc.c  */
     8085#line 2229 "parser.yy"
     8086    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8087    break;
     8088
     8089  case 574:
     8090
     8091/* Line 1806 of yacc.c  */
     8092#line 2238 "parser.yy"
     8093    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8094    break;
     8095
     8096  case 576:
     8097
     8098/* Line 1806 of yacc.c  */
     8099#line 2241 "parser.yy"
     8100    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8101    break;
     8102
     8103  case 577:
     8104
     8105/* Line 1806 of yacc.c  */
     8106#line 2246 "parser.yy"
     8107    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8108    break;
     8109
     8110  case 578:
     8111
     8112/* Line 1806 of yacc.c  */
     8113#line 2248 "parser.yy"
     8114    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8115    break;
     8116
     8117  case 579:
     8118
     8119/* Line 1806 of yacc.c  */
     8120#line 2250 "parser.yy"
     8121    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8122    break;
     8123
     8124  case 580:
     8125
     8126/* Line 1806 of yacc.c  */
     8127#line 2255 "parser.yy"
    83018128    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83028129    break;
    83038130
    8304   case 571:
    8305 
    8306 /* Line 1806 of yacc.c  */
    8307 #line 2205 "parser.yy"
     8131  case 581:
     8132
     8133/* Line 1806 of yacc.c  */
     8134#line 2257 "parser.yy"
    83088135    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83098136    break;
    83108137
    8311   case 572:
    8312 
    8313 /* Line 1806 of yacc.c  */
    8314 #line 2207 "parser.yy"
     8138  case 582:
     8139
     8140/* Line 1806 of yacc.c  */
     8141#line 2259 "parser.yy"
    83158142    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83168143    break;
    83178144
    8318   case 573:
    8319 
    8320 /* Line 1806 of yacc.c  */
    8321 #line 2212 "parser.yy"
     8145  case 583:
     8146
     8147/* Line 1806 of yacc.c  */
     8148#line 2264 "parser.yy"
     8149    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8150    break;
     8151
     8152  case 584:
     8153
     8154/* Line 1806 of yacc.c  */
     8155#line 2266 "parser.yy"
     8156    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8157    break;
     8158
     8159  case 585:
     8160
     8161/* Line 1806 of yacc.c  */
     8162#line 2268 "parser.yy"
     8163    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8164    break;
     8165
     8166  case 589:
     8167
     8168/* Line 1806 of yacc.c  */
     8169#line 2283 "parser.yy"
     8170    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     8171    break;
     8172
     8173  case 590:
     8174
     8175/* Line 1806 of yacc.c  */
     8176#line 2285 "parser.yy"
     8177    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     8178    break;
     8179
     8180  case 591:
     8181
     8182/* Line 1806 of yacc.c  */
     8183#line 2287 "parser.yy"
     8184    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8185    break;
     8186
     8187  case 592:
     8188
     8189/* Line 1806 of yacc.c  */
     8190#line 2292 "parser.yy"
     8191    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8192    break;
     8193
     8194  case 593:
     8195
     8196/* Line 1806 of yacc.c  */
     8197#line 2294 "parser.yy"
     8198    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8199    break;
     8200
     8201  case 594:
     8202
     8203/* Line 1806 of yacc.c  */
     8204#line 2296 "parser.yy"
     8205    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8206    break;
     8207
     8208  case 595:
     8209
     8210/* Line 1806 of yacc.c  */
     8211#line 2301 "parser.yy"
     8212    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8213    break;
     8214
     8215  case 596:
     8216
     8217/* Line 1806 of yacc.c  */
     8218#line 2303 "parser.yy"
     8219    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8220    break;
     8221
     8222  case 597:
     8223
     8224/* Line 1806 of yacc.c  */
     8225#line 2305 "parser.yy"
     8226    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8227    break;
     8228
     8229  case 598:
     8230
     8231/* Line 1806 of yacc.c  */
     8232#line 2320 "parser.yy"
     8233    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8234    break;
     8235
     8236  case 600:
     8237
     8238/* Line 1806 of yacc.c  */
     8239#line 2323 "parser.yy"
     8240    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8241    break;
     8242
     8243  case 601:
     8244
     8245/* Line 1806 of yacc.c  */
     8246#line 2325 "parser.yy"
     8247    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8248    break;
     8249
     8250  case 603:
     8251
     8252/* Line 1806 of yacc.c  */
     8253#line 2331 "parser.yy"
     8254    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8255    break;
     8256
     8257  case 604:
     8258
     8259/* Line 1806 of yacc.c  */
     8260#line 2336 "parser.yy"
     8261    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8262    break;
     8263
     8264  case 605:
     8265
     8266/* Line 1806 of yacc.c  */
     8267#line 2338 "parser.yy"
     8268    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8269    break;
     8270
     8271  case 606:
     8272
     8273/* Line 1806 of yacc.c  */
     8274#line 2340 "parser.yy"
     8275    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8276    break;
     8277
     8278  case 607:
     8279
     8280/* Line 1806 of yacc.c  */
     8281#line 2345 "parser.yy"
    83228282    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83238283    break;
    83248284
    8325   case 574:
    8326 
    8327 /* Line 1806 of yacc.c  */
    8328 #line 2214 "parser.yy"
     8285  case 608:
     8286
     8287/* Line 1806 of yacc.c  */
     8288#line 2347 "parser.yy"
    83298289    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83308290    break;
    83318291
    8332   case 575:
    8333 
    8334 /* Line 1806 of yacc.c  */
    8335 #line 2216 "parser.yy"
     8292  case 609:
     8293
     8294/* Line 1806 of yacc.c  */
     8295#line 2349 "parser.yy"
    83368296    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83378297    break;
    83388298
    8339   case 576:
    8340 
    8341 /* Line 1806 of yacc.c  */
    8342 #line 2218 "parser.yy"
     8299  case 610:
     8300
     8301/* Line 1806 of yacc.c  */
     8302#line 2351 "parser.yy"
    83438303    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83448304    break;
    83458305
    8346   case 577:
    8347 
    8348 /* Line 1806 of yacc.c  */
    8349 #line 2223 "parser.yy"
     8306  case 611:
     8307
     8308/* Line 1806 of yacc.c  */
     8309#line 2356 "parser.yy"
     8310    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8311    break;
     8312
     8313  case 612:
     8314
     8315/* Line 1806 of yacc.c  */
     8316#line 2358 "parser.yy"
    83508317    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83518318    break;
    83528319
    8353   case 578:
    8354 
    8355 /* Line 1806 of yacc.c  */
    8356 #line 2225 "parser.yy"
     8320  case 613:
     8321
     8322/* Line 1806 of yacc.c  */
     8323#line 2360 "parser.yy"
    83578324    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83588325    break;
    83598326
    8360   case 579:
    8361 
    8362 /* Line 1806 of yacc.c  */
    8363 #line 2234 "parser.yy"
     8327  case 614:
     8328
     8329/* Line 1806 of yacc.c  */
     8330#line 2370 "parser.yy"
    83648331    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83658332    break;
    83668333
    8367   case 581:
    8368 
    8369 /* Line 1806 of yacc.c  */
    8370 #line 2237 "parser.yy"
     8334  case 616:
     8335
     8336/* Line 1806 of yacc.c  */
     8337#line 2373 "parser.yy"
    83718338    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83728339    break;
    83738340
    8374   case 582:
    8375 
    8376 /* Line 1806 of yacc.c  */
    8377 #line 2242 "parser.yy"
     8341  case 617:
     8342
     8343/* Line 1806 of yacc.c  */
     8344#line 2375 "parser.yy"
     8345    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8346    break;
     8347
     8348  case 618:
     8349
     8350/* Line 1806 of yacc.c  */
     8351#line 2380 "parser.yy"
     8352    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8353    break;
     8354
     8355  case 619:
     8356
     8357/* Line 1806 of yacc.c  */
     8358#line 2382 "parser.yy"
     8359    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8360    break;
     8361
     8362  case 620:
     8363
     8364/* Line 1806 of yacc.c  */
     8365#line 2384 "parser.yy"
     8366    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8367    break;
     8368
     8369  case 621:
     8370
     8371/* Line 1806 of yacc.c  */
     8372#line 2389 "parser.yy"
     8373    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8374    break;
     8375
     8376  case 622:
     8377
     8378/* Line 1806 of yacc.c  */
     8379#line 2391 "parser.yy"
     8380    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8381    break;
     8382
     8383  case 623:
     8384
     8385/* Line 1806 of yacc.c  */
     8386#line 2393 "parser.yy"
     8387    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8388    break;
     8389
     8390  case 624:
     8391
     8392/* Line 1806 of yacc.c  */
     8393#line 2395 "parser.yy"
     8394    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8395    break;
     8396
     8397  case 625:
     8398
     8399/* Line 1806 of yacc.c  */
     8400#line 2400 "parser.yy"
    83788401    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83798402    break;
    83808403
    8381   case 583:
    8382 
    8383 /* Line 1806 of yacc.c  */
    8384 #line 2244 "parser.yy"
     8404  case 626:
     8405
     8406/* Line 1806 of yacc.c  */
     8407#line 2402 "parser.yy"
    83858408    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83868409    break;
    83878410
    8388   case 584:
    8389 
    8390 /* Line 1806 of yacc.c  */
    8391 #line 2246 "parser.yy"
     8411  case 627:
     8412
     8413/* Line 1806 of yacc.c  */
     8414#line 2404 "parser.yy"
    83928415    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83938416    break;
    83948417
    8395   case 585:
    8396 
    8397 /* Line 1806 of yacc.c  */
    8398 #line 2251 "parser.yy"
    8399     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8400     break;
    8401 
    8402   case 586:
    8403 
    8404 /* Line 1806 of yacc.c  */
    8405 #line 2253 "parser.yy"
    8406     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8407     break;
    8408 
    8409   case 587:
    8410 
    8411 /* Line 1806 of yacc.c  */
    8412 #line 2255 "parser.yy"
    8413     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8414     break;
    8415 
    8416   case 588:
    8417 
    8418 /* Line 1806 of yacc.c  */
    8419 #line 2260 "parser.yy"
    8420     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8421     break;
    8422 
    8423   case 589:
    8424 
    8425 /* Line 1806 of yacc.c  */
    8426 #line 2262 "parser.yy"
    8427     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8428     break;
    8429 
    8430   case 590:
    8431 
    8432 /* Line 1806 of yacc.c  */
    8433 #line 2264 "parser.yy"
    8434     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8435     break;
    8436 
    8437   case 594:
    8438 
    8439 /* Line 1806 of yacc.c  */
    8440 #line 2279 "parser.yy"
    8441     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    8442     break;
    8443 
    8444   case 595:
    8445 
    8446 /* Line 1806 of yacc.c  */
    8447 #line 2281 "parser.yy"
    8448     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    8449     break;
    8450 
    8451   case 596:
    8452 
    8453 /* Line 1806 of yacc.c  */
    8454 #line 2283 "parser.yy"
    8455     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8456     break;
    8457 
    8458   case 597:
    8459 
    8460 /* Line 1806 of yacc.c  */
    8461 #line 2288 "parser.yy"
    8462     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8463     break;
    8464 
    8465   case 598:
    8466 
    8467 /* Line 1806 of yacc.c  */
    8468 #line 2290 "parser.yy"
    8469     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8470     break;
    8471 
    8472   case 599:
    8473 
    8474 /* Line 1806 of yacc.c  */
    8475 #line 2292 "parser.yy"
    8476     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8477     break;
    8478 
    8479   case 600:
    8480 
    8481 /* Line 1806 of yacc.c  */
    8482 #line 2297 "parser.yy"
    8483     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8484     break;
    8485 
    8486   case 601:
    8487 
    8488 /* Line 1806 of yacc.c  */
    8489 #line 2299 "parser.yy"
    8490     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8491     break;
    8492 
    8493   case 602:
    8494 
    8495 /* Line 1806 of yacc.c  */
    8496 #line 2301 "parser.yy"
    8497     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8498     break;
    8499 
    8500   case 603:
    8501 
    8502 /* Line 1806 of yacc.c  */
    8503 #line 2316 "parser.yy"
     8418  case 628:
     8419
     8420/* Line 1806 of yacc.c  */
     8421#line 2435 "parser.yy"
    85048422    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85058423    break;
    85068424
    8507   case 605:
    8508 
    8509 /* Line 1806 of yacc.c  */
    8510 #line 2319 "parser.yy"
     8425  case 630:
     8426
     8427/* Line 1806 of yacc.c  */
     8428#line 2438 "parser.yy"
    85118429    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85128430    break;
    85138431
    8514   case 606:
    8515 
    8516 /* Line 1806 of yacc.c  */
    8517 #line 2321 "parser.yy"
     8432  case 631:
     8433
     8434/* Line 1806 of yacc.c  */
     8435#line 2440 "parser.yy"
    85188436    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85198437    break;
    85208438
    8521   case 608:
    8522 
    8523 /* Line 1806 of yacc.c  */
    8524 #line 2327 "parser.yy"
    8525     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8526     break;
    8527 
    8528   case 609:
    8529 
    8530 /* Line 1806 of yacc.c  */
    8531 #line 2332 "parser.yy"
    8532     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8533     break;
    8534 
    8535   case 610:
    8536 
    8537 /* Line 1806 of yacc.c  */
    8538 #line 2334 "parser.yy"
    8539     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8540     break;
    8541 
    8542   case 611:
    8543 
    8544 /* Line 1806 of yacc.c  */
    8545 #line 2336 "parser.yy"
    8546     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8547     break;
    8548 
    8549   case 612:
    8550 
    8551 /* Line 1806 of yacc.c  */
    8552 #line 2341 "parser.yy"
    8553     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8554     break;
    8555 
    8556   case 613:
    8557 
    8558 /* Line 1806 of yacc.c  */
    8559 #line 2343 "parser.yy"
    8560     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8561     break;
    8562 
    8563   case 614:
    8564 
    8565 /* Line 1806 of yacc.c  */
    8566 #line 2345 "parser.yy"
    8567     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8568     break;
    8569 
    8570   case 615:
    8571 
    8572 /* Line 1806 of yacc.c  */
    8573 #line 2347 "parser.yy"
    8574     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8575     break;
    8576 
    8577   case 616:
    8578 
    8579 /* Line 1806 of yacc.c  */
    8580 #line 2352 "parser.yy"
    8581     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8582     break;
    8583 
    8584   case 617:
    8585 
    8586 /* Line 1806 of yacc.c  */
    8587 #line 2354 "parser.yy"
    8588     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8589     break;
    8590 
    8591   case 618:
    8592 
    8593 /* Line 1806 of yacc.c  */
    8594 #line 2356 "parser.yy"
    8595     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8596     break;
    8597 
    8598   case 619:
    8599 
    8600 /* Line 1806 of yacc.c  */
    8601 #line 2366 "parser.yy"
    8602     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8603     break;
    8604 
    8605   case 621:
    8606 
    8607 /* Line 1806 of yacc.c  */
    8608 #line 2369 "parser.yy"
    8609     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8610     break;
    8611 
    8612   case 622:
    8613 
    8614 /* Line 1806 of yacc.c  */
    8615 #line 2371 "parser.yy"
    8616     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8617     break;
    8618 
    8619   case 623:
    8620 
    8621 /* Line 1806 of yacc.c  */
    8622 #line 2376 "parser.yy"
    8623     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8624     break;
    8625 
    8626   case 624:
    8627 
    8628 /* Line 1806 of yacc.c  */
    8629 #line 2378 "parser.yy"
    8630     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8631     break;
    8632 
    8633   case 625:
    8634 
    8635 /* Line 1806 of yacc.c  */
    8636 #line 2380 "parser.yy"
    8637     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8638     break;
    8639 
    8640   case 626:
    8641 
    8642 /* Line 1806 of yacc.c  */
    8643 #line 2385 "parser.yy"
    8644     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8645     break;
    8646 
    8647   case 627:
    8648 
    8649 /* Line 1806 of yacc.c  */
    8650 #line 2387 "parser.yy"
    8651     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8652     break;
    8653 
    8654   case 628:
    8655 
    8656 /* Line 1806 of yacc.c  */
    8657 #line 2389 "parser.yy"
    8658     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8659     break;
    8660 
    8661   case 629:
    8662 
    8663 /* Line 1806 of yacc.c  */
    8664 #line 2391 "parser.yy"
    8665     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8666     break;
    8667 
    8668   case 630:
    8669 
    8670 /* Line 1806 of yacc.c  */
    8671 #line 2396 "parser.yy"
    8672     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8673     break;
    8674 
    8675   case 631:
    8676 
    8677 /* Line 1806 of yacc.c  */
    8678 #line 2398 "parser.yy"
    8679     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8680     break;
    8681 
    86828439  case 632:
    86838440
    86848441/* Line 1806 of yacc.c  */
    8685 #line 2400 "parser.yy"
    8686     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8687     break;
    8688 
    8689   case 633:
    8690 
    8691 /* Line 1806 of yacc.c  */
    8692 #line 2431 "parser.yy"
    8693     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8694     break;
    8695 
    8696   case 635:
    8697 
    8698 /* Line 1806 of yacc.c  */
    8699 #line 2434 "parser.yy"
    8700     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8701     break;
    8702 
    8703   case 636:
    8704 
    8705 /* Line 1806 of yacc.c  */
    8706 #line 2436 "parser.yy"
    8707     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8708     break;
    8709 
    8710   case 637:
    8711 
    8712 /* Line 1806 of yacc.c  */
    8713 #line 2441 "parser.yy"
     8442#line 2445 "parser.yy"
    87148443    {
    87158444                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87188447    break;
    87198448
    8720   case 638:
    8721 
    8722 /* Line 1806 of yacc.c  */
    8723 #line 2446 "parser.yy"
     8449  case 633:
     8450
     8451/* Line 1806 of yacc.c  */
     8452#line 2450 "parser.yy"
    87248453    {
    87258454                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    87288457    break;
    87298458
     8459  case 634:
     8460
     8461/* Line 1806 of yacc.c  */
     8462#line 2458 "parser.yy"
     8463    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8464    break;
     8465
     8466  case 635:
     8467
     8468/* Line 1806 of yacc.c  */
     8469#line 2460 "parser.yy"
     8470    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8471    break;
     8472
     8473  case 636:
     8474
     8475/* Line 1806 of yacc.c  */
     8476#line 2462 "parser.yy"
     8477    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8478    break;
     8479
     8480  case 637:
     8481
     8482/* Line 1806 of yacc.c  */
     8483#line 2467 "parser.yy"
     8484    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8485    break;
     8486
     8487  case 638:
     8488
     8489/* Line 1806 of yacc.c  */
     8490#line 2469 "parser.yy"
     8491    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8492    break;
     8493
    87308494  case 639:
    87318495
    87328496/* Line 1806 of yacc.c  */
    8733 #line 2454 "parser.yy"
     8497#line 2474 "parser.yy"
     8498    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8499    break;
     8500
     8501  case 640:
     8502
     8503/* Line 1806 of yacc.c  */
     8504#line 2476 "parser.yy"
     8505    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8506    break;
     8507
     8508  case 642:
     8509
     8510/* Line 1806 of yacc.c  */
     8511#line 2491 "parser.yy"
     8512    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8513    break;
     8514
     8515  case 643:
     8516
     8517/* Line 1806 of yacc.c  */
     8518#line 2493 "parser.yy"
     8519    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8520    break;
     8521
     8522  case 644:
     8523
     8524/* Line 1806 of yacc.c  */
     8525#line 2498 "parser.yy"
     8526    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8527    break;
     8528
     8529  case 645:
     8530
     8531/* Line 1806 of yacc.c  */
     8532#line 2500 "parser.yy"
     8533    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8534    break;
     8535
     8536  case 646:
     8537
     8538/* Line 1806 of yacc.c  */
     8539#line 2502 "parser.yy"
    87348540    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87358541    break;
    87368542
    8737   case 640:
    8738 
    8739 /* Line 1806 of yacc.c  */
    8740 #line 2456 "parser.yy"
     8543  case 647:
     8544
     8545/* Line 1806 of yacc.c  */
     8546#line 2504 "parser.yy"
    87418547    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87428548    break;
    87438549
    8744   case 641:
    8745 
    8746 /* Line 1806 of yacc.c  */
    8747 #line 2458 "parser.yy"
     8550  case 648:
     8551
     8552/* Line 1806 of yacc.c  */
     8553#line 2506 "parser.yy"
    87488554    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87498555    break;
    87508556
    8751   case 642:
    8752 
    8753 /* Line 1806 of yacc.c  */
    8754 #line 2463 "parser.yy"
     8557  case 650:
     8558
     8559/* Line 1806 of yacc.c  */
     8560#line 2512 "parser.yy"
     8561    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8562    break;
     8563
     8564  case 651:
     8565
     8566/* Line 1806 of yacc.c  */
     8567#line 2514 "parser.yy"
     8568    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8569    break;
     8570
     8571  case 652:
     8572
     8573/* Line 1806 of yacc.c  */
     8574#line 2516 "parser.yy"
     8575    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8576    break;
     8577
     8578  case 653:
     8579
     8580/* Line 1806 of yacc.c  */
     8581#line 2521 "parser.yy"
     8582    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8583    break;
     8584
     8585  case 654:
     8586
     8587/* Line 1806 of yacc.c  */
     8588#line 2523 "parser.yy"
     8589    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8590    break;
     8591
     8592  case 655:
     8593
     8594/* Line 1806 of yacc.c  */
     8595#line 2525 "parser.yy"
     8596    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8597    break;
     8598
     8599  case 656:
     8600
     8601/* Line 1806 of yacc.c  */
     8602#line 2531 "parser.yy"
     8603    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     8604    break;
     8605
     8606  case 657:
     8607
     8608/* Line 1806 of yacc.c  */
     8609#line 2533 "parser.yy"
     8610    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     8611    break;
     8612
     8613  case 659:
     8614
     8615/* Line 1806 of yacc.c  */
     8616#line 2539 "parser.yy"
     8617    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     8618    break;
     8619
     8620  case 660:
     8621
     8622/* Line 1806 of yacc.c  */
     8623#line 2541 "parser.yy"
     8624    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     8625    break;
     8626
     8627  case 661:
     8628
     8629/* Line 1806 of yacc.c  */
     8630#line 2543 "parser.yy"
     8631    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     8632    break;
     8633
     8634  case 662:
     8635
     8636/* Line 1806 of yacc.c  */
     8637#line 2545 "parser.yy"
     8638    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     8639    break;
     8640
     8641  case 664:
     8642
     8643/* Line 1806 of yacc.c  */
     8644#line 2560 "parser.yy"
     8645    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8646    break;
     8647
     8648  case 665:
     8649
     8650/* Line 1806 of yacc.c  */
     8651#line 2562 "parser.yy"
     8652    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8653    break;
     8654
     8655  case 666:
     8656
     8657/* Line 1806 of yacc.c  */
     8658#line 2567 "parser.yy"
     8659    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8660    break;
     8661
     8662  case 667:
     8663
     8664/* Line 1806 of yacc.c  */
     8665#line 2569 "parser.yy"
     8666    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8667    break;
     8668
     8669  case 668:
     8670
     8671/* Line 1806 of yacc.c  */
     8672#line 2571 "parser.yy"
     8673    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8674    break;
     8675
     8676  case 669:
     8677
     8678/* Line 1806 of yacc.c  */
     8679#line 2573 "parser.yy"
     8680    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8681    break;
     8682
     8683  case 670:
     8684
     8685/* Line 1806 of yacc.c  */
     8686#line 2575 "parser.yy"
     8687    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8688    break;
     8689
     8690  case 672:
     8691
     8692/* Line 1806 of yacc.c  */
     8693#line 2581 "parser.yy"
     8694    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8695    break;
     8696
     8697  case 673:
     8698
     8699/* Line 1806 of yacc.c  */
     8700#line 2583 "parser.yy"
     8701    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8702    break;
     8703
     8704  case 674:
     8705
     8706/* Line 1806 of yacc.c  */
     8707#line 2585 "parser.yy"
     8708    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8709    break;
     8710
     8711  case 675:
     8712
     8713/* Line 1806 of yacc.c  */
     8714#line 2590 "parser.yy"
     8715    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8716    break;
     8717
     8718  case 676:
     8719
     8720/* Line 1806 of yacc.c  */
     8721#line 2592 "parser.yy"
     8722    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8723    break;
     8724
     8725  case 677:
     8726
     8727/* Line 1806 of yacc.c  */
     8728#line 2594 "parser.yy"
     8729    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8730    break;
     8731
     8732  case 679:
     8733
     8734/* Line 1806 of yacc.c  */
     8735#line 2601 "parser.yy"
    87558736    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87568737    break;
    87578738
    8758   case 643:
    8759 
    8760 /* Line 1806 of yacc.c  */
    8761 #line 2465 "parser.yy"
     8739  case 681:
     8740
     8741/* Line 1806 of yacc.c  */
     8742#line 2612 "parser.yy"
     8743    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     8744    break;
     8745
     8746  case 682:
     8747
     8748/* Line 1806 of yacc.c  */
     8749#line 2615 "parser.yy"
     8750    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     8751    break;
     8752
     8753  case 683:
     8754
     8755/* Line 1806 of yacc.c  */
     8756#line 2617 "parser.yy"
     8757    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     8758    break;
     8759
     8760  case 684:
     8761
     8762/* Line 1806 of yacc.c  */
     8763#line 2620 "parser.yy"
     8764    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     8765    break;
     8766
     8767  case 685:
     8768
     8769/* Line 1806 of yacc.c  */
     8770#line 2622 "parser.yy"
     8771    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     8772    break;
     8773
     8774  case 686:
     8775
     8776/* Line 1806 of yacc.c  */
     8777#line 2624 "parser.yy"
     8778    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     8779    break;
     8780
     8781  case 688:
     8782
     8783/* Line 1806 of yacc.c  */
     8784#line 2638 "parser.yy"
     8785    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8786    break;
     8787
     8788  case 689:
     8789
     8790/* Line 1806 of yacc.c  */
     8791#line 2640 "parser.yy"
     8792    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8793    break;
     8794
     8795  case 690:
     8796
     8797/* Line 1806 of yacc.c  */
     8798#line 2645 "parser.yy"
     8799    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8800    break;
     8801
     8802  case 691:
     8803
     8804/* Line 1806 of yacc.c  */
     8805#line 2647 "parser.yy"
     8806    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8807    break;
     8808
     8809  case 692:
     8810
     8811/* Line 1806 of yacc.c  */
     8812#line 2649 "parser.yy"
     8813    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8814    break;
     8815
     8816  case 693:
     8817
     8818/* Line 1806 of yacc.c  */
     8819#line 2651 "parser.yy"
     8820    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8821    break;
     8822
     8823  case 694:
     8824
     8825/* Line 1806 of yacc.c  */
     8826#line 2653 "parser.yy"
     8827    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8828    break;
     8829
     8830  case 696:
     8831
     8832/* Line 1806 of yacc.c  */
     8833#line 2659 "parser.yy"
    87628834    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87638835    break;
    87648836
    8765   case 644:
    8766 
    8767 /* Line 1806 of yacc.c  */
    8768 #line 2470 "parser.yy"
    8769     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8770     break;
    8771 
    8772   case 645:
    8773 
    8774 /* Line 1806 of yacc.c  */
    8775 #line 2472 "parser.yy"
     8837  case 697:
     8838
     8839/* Line 1806 of yacc.c  */
     8840#line 2661 "parser.yy"
     8841    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8842    break;
     8843
     8844  case 698:
     8845
     8846/* Line 1806 of yacc.c  */
     8847#line 2663 "parser.yy"
     8848    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8849    break;
     8850
     8851  case 699:
     8852
     8853/* Line 1806 of yacc.c  */
     8854#line 2668 "parser.yy"
    87768855    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87778856    break;
    87788857
    8779   case 647:
    8780 
    8781 /* Line 1806 of yacc.c  */
    8782 #line 2487 "parser.yy"
    8783     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8784     break;
    8785 
    8786   case 648:
    8787 
    8788 /* Line 1806 of yacc.c  */
    8789 #line 2489 "parser.yy"
    8790     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8791     break;
    8792 
    8793   case 649:
    8794 
    8795 /* Line 1806 of yacc.c  */
    8796 #line 2494 "parser.yy"
    8797     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8798     break;
    8799 
    8800   case 650:
    8801 
    8802 /* Line 1806 of yacc.c  */
    8803 #line 2496 "parser.yy"
    8804     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8805     break;
    8806 
    8807   case 651:
    8808 
    8809 /* Line 1806 of yacc.c  */
    8810 #line 2498 "parser.yy"
    8811     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8812     break;
    8813 
    8814   case 652:
    8815 
    8816 /* Line 1806 of yacc.c  */
    8817 #line 2500 "parser.yy"
    8818     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8819     break;
    8820 
    8821   case 653:
    8822 
    8823 /* Line 1806 of yacc.c  */
    8824 #line 2502 "parser.yy"
     8858  case 700:
     8859
     8860/* Line 1806 of yacc.c  */
     8861#line 2670 "parser.yy"
    88258862    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88268863    break;
    88278864
    8828   case 655:
    8829 
    8830 /* Line 1806 of yacc.c  */
    8831 #line 2508 "parser.yy"
    8832     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8833     break;
    8834 
    8835   case 656:
    8836 
    8837 /* Line 1806 of yacc.c  */
    8838 #line 2510 "parser.yy"
    8839     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8840     break;
    8841 
    8842   case 657:
    8843 
    8844 /* Line 1806 of yacc.c  */
    8845 #line 2512 "parser.yy"
    8846     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8847     break;
    8848 
    8849   case 658:
    8850 
    8851 /* Line 1806 of yacc.c  */
    8852 #line 2517 "parser.yy"
    8853     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8854     break;
    8855 
    8856   case 659:
    8857 
    8858 /* Line 1806 of yacc.c  */
    8859 #line 2519 "parser.yy"
    8860     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8861     break;
    8862 
    8863   case 660:
    8864 
    8865 /* Line 1806 of yacc.c  */
    8866 #line 2521 "parser.yy"
    8867     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8868     break;
    8869 
    8870   case 661:
    8871 
    8872 /* Line 1806 of yacc.c  */
    8873 #line 2527 "parser.yy"
    8874     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    8875     break;
    8876 
    8877   case 662:
    8878 
    8879 /* Line 1806 of yacc.c  */
    8880 #line 2529 "parser.yy"
    8881     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    8882     break;
    8883 
    8884   case 664:
    8885 
    8886 /* Line 1806 of yacc.c  */
    8887 #line 2535 "parser.yy"
    8888     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    8889     break;
    8890 
    8891   case 665:
    8892 
    8893 /* Line 1806 of yacc.c  */
    8894 #line 2537 "parser.yy"
    8895     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    8896     break;
    8897 
    8898   case 666:
    8899 
    8900 /* Line 1806 of yacc.c  */
    8901 #line 2539 "parser.yy"
    8902     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    8903     break;
    8904 
    8905   case 667:
    8906 
    8907 /* Line 1806 of yacc.c  */
    8908 #line 2541 "parser.yy"
    8909     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    8910     break;
    8911 
    8912   case 669:
    8913 
    8914 /* Line 1806 of yacc.c  */
    8915 #line 2556 "parser.yy"
    8916     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8917     break;
    8918 
    8919   case 670:
    8920 
    8921 /* Line 1806 of yacc.c  */
    8922 #line 2558 "parser.yy"
    8923     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8924     break;
    8925 
    8926   case 671:
    8927 
    8928 /* Line 1806 of yacc.c  */
    8929 #line 2563 "parser.yy"
    8930     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8931     break;
    8932 
    8933   case 672:
    8934 
    8935 /* Line 1806 of yacc.c  */
    8936 #line 2565 "parser.yy"
    8937     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8938     break;
    8939 
    8940   case 673:
    8941 
    8942 /* Line 1806 of yacc.c  */
    8943 #line 2567 "parser.yy"
    8944     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8945     break;
    8946 
    8947   case 674:
    8948 
    8949 /* Line 1806 of yacc.c  */
    8950 #line 2569 "parser.yy"
    8951     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8952     break;
    8953 
    8954   case 675:
    8955 
    8956 /* Line 1806 of yacc.c  */
    8957 #line 2571 "parser.yy"
    8958     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8959     break;
    8960 
    8961   case 677:
    8962 
    8963 /* Line 1806 of yacc.c  */
    8964 #line 2577 "parser.yy"
    8965     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8966     break;
    8967 
    8968   case 678:
    8969 
    8970 /* Line 1806 of yacc.c  */
    8971 #line 2579 "parser.yy"
    8972     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8973     break;
    8974 
    8975   case 679:
    8976 
    8977 /* Line 1806 of yacc.c  */
    8978 #line 2581 "parser.yy"
    8979     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8980     break;
    8981 
    8982   case 680:
    8983 
    8984 /* Line 1806 of yacc.c  */
    8985 #line 2586 "parser.yy"
    8986     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8987     break;
    8988 
    8989   case 681:
    8990 
    8991 /* Line 1806 of yacc.c  */
    8992 #line 2588 "parser.yy"
    8993     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8994     break;
    8995 
    8996   case 682:
    8997 
    8998 /* Line 1806 of yacc.c  */
    8999 #line 2590 "parser.yy"
    9000     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    9001     break;
    9002 
    9003   case 684:
    9004 
    9005 /* Line 1806 of yacc.c  */
    9006 #line 2597 "parser.yy"
    9007     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    9008     break;
    9009 
    9010   case 686:
    9011 
    9012 /* Line 1806 of yacc.c  */
    9013 #line 2608 "parser.yy"
    9014     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    9015     break;
    9016 
    9017   case 687:
    9018 
    9019 /* Line 1806 of yacc.c  */
    9020 #line 2611 "parser.yy"
    9021     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    9022     break;
    9023 
    9024   case 688:
    9025 
    9026 /* Line 1806 of yacc.c  */
    9027 #line 2613 "parser.yy"
    9028     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    9029     break;
    9030 
    9031   case 689:
    9032 
    9033 /* Line 1806 of yacc.c  */
    9034 #line 2616 "parser.yy"
    9035     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    9036     break;
    9037 
    9038   case 690:
    9039 
    9040 /* Line 1806 of yacc.c  */
    9041 #line 2618 "parser.yy"
    9042     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    9043     break;
    9044 
    9045   case 691:
    9046 
    9047 /* Line 1806 of yacc.c  */
    9048 #line 2620 "parser.yy"
    9049     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    9050     break;
    9051 
    9052   case 693:
    9053 
    9054 /* Line 1806 of yacc.c  */
    9055 #line 2634 "parser.yy"
    9056     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    9057     break;
    9058 
    9059   case 694:
    9060 
    9061 /* Line 1806 of yacc.c  */
    9062 #line 2636 "parser.yy"
    9063     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    9064     break;
    9065 
    9066   case 695:
    9067 
    9068 /* Line 1806 of yacc.c  */
    9069 #line 2641 "parser.yy"
    9070     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    9071     break;
    9072 
    9073   case 696:
    9074 
    9075 /* Line 1806 of yacc.c  */
    9076 #line 2643 "parser.yy"
    9077     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    9078     break;
    9079 
    9080   case 697:
    9081 
    9082 /* Line 1806 of yacc.c  */
    9083 #line 2645 "parser.yy"
    9084     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    9085     break;
    9086 
    9087   case 698:
    9088 
    9089 /* Line 1806 of yacc.c  */
    9090 #line 2647 "parser.yy"
    9091     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    9092     break;
    9093 
    9094   case 699:
    9095 
    9096 /* Line 1806 of yacc.c  */
    9097 #line 2649 "parser.yy"
    9098     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    9099     break;
    9100 
    9101   case 701:
    9102 
    9103 /* Line 1806 of yacc.c  */
    9104 #line 2655 "parser.yy"
    9105     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    9106     break;
    9107 
    9108   case 702:
    9109 
    9110 /* Line 1806 of yacc.c  */
    9111 #line 2657 "parser.yy"
    9112     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    9113     break;
    9114 
    91158865  case 703:
    91168866
    91178867/* Line 1806 of yacc.c  */
    9118 #line 2659 "parser.yy"
    9119     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    9120     break;
    9121 
    9122   case 704:
    9123 
    9124 /* Line 1806 of yacc.c  */
    9125 #line 2664 "parser.yy"
    9126     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    9127     break;
    9128 
    9129   case 705:
    9130 
    9131 /* Line 1806 of yacc.c  */
    9132 #line 2666 "parser.yy"
    9133     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    9134     break;
    9135 
    9136   case 708:
    9137 
    9138 /* Line 1806 of yacc.c  */
    9139 #line 2676 "parser.yy"
     8868#line 2680 "parser.yy"
    91408869    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    91418870    break;
    91428871
    9143   case 711:
    9144 
    9145 /* Line 1806 of yacc.c  */
    9146 #line 2686 "parser.yy"
    9147     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9148     break;
    9149 
    9150   case 712:
    9151 
    9152 /* Line 1806 of yacc.c  */
    9153 #line 2688 "parser.yy"
    9154     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9155     break;
    9156 
    9157   case 713:
     8872  case 706:
    91588873
    91598874/* Line 1806 of yacc.c  */
     
    91628877    break;
    91638878
    9164   case 714:
     8879  case 707:
    91658880
    91668881/* Line 1806 of yacc.c  */
     
    91698884    break;
    91708885
    9171   case 715:
     8886  case 708:
    91728887
    91738888/* Line 1806 of yacc.c  */
     
    91768891    break;
    91778892
    9178   case 716:
     8893  case 709:
    91798894
    91808895/* Line 1806 of yacc.c  */
     
    91838898    break;
    91848899
    9185   case 717:
    9186 
    9187 /* Line 1806 of yacc.c  */
    9188 #line 2703 "parser.yy"
     8900  case 710:
     8901
     8902/* Line 1806 of yacc.c  */
     8903#line 2698 "parser.yy"
     8904    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8905    break;
     8906
     8907  case 711:
     8908
     8909/* Line 1806 of yacc.c  */
     8910#line 2700 "parser.yy"
     8911    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8912    break;
     8913
     8914  case 712:
     8915
     8916/* Line 1806 of yacc.c  */
     8917#line 2707 "parser.yy"
    91898918    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91908919    break;
    91918920
    9192   case 718:
    9193 
    9194 /* Line 1806 of yacc.c  */
    9195 #line 2705 "parser.yy"
     8921  case 713:
     8922
     8923/* Line 1806 of yacc.c  */
     8924#line 2709 "parser.yy"
    91968925    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91978926    break;
    91988927
    9199   case 719:
    9200 
    9201 /* Line 1806 of yacc.c  */
    9202 #line 2707 "parser.yy"
     8928  case 714:
     8929
     8930/* Line 1806 of yacc.c  */
     8931#line 2711 "parser.yy"
    92038932    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    92048933    break;
    92058934
    9206   case 720:
    9207 
    9208 /* Line 1806 of yacc.c  */
    9209 #line 2709 "parser.yy"
     8935  case 715:
     8936
     8937/* Line 1806 of yacc.c  */
     8938#line 2713 "parser.yy"
    92108939    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    92118940    break;
    92128941
    9213   case 721:
    9214 
    9215 /* Line 1806 of yacc.c  */
    9216 #line 2711 "parser.yy"
    9217     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9218     break;
    9219 
    9220   case 722:
    9221 
    9222 /* Line 1806 of yacc.c  */
    9223 #line 2713 "parser.yy"
    9224     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9225     break;
    9226 
    9227   case 723:
     8942  case 716:
    92288943
    92298944/* Line 1806 of yacc.c  */
     
    92328947    break;
    92338948
     8949  case 717:
     8950
     8951/* Line 1806 of yacc.c  */
     8952#line 2717 "parser.yy"
     8953    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8954    break;
     8955
     8956  case 718:
     8957
     8958/* Line 1806 of yacc.c  */
     8959#line 2719 "parser.yy"
     8960    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8961    break;
     8962
     8963  case 719:
     8964
     8965/* Line 1806 of yacc.c  */
     8966#line 2721 "parser.yy"
     8967    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8968    break;
     8969
     8970  case 720:
     8971
     8972/* Line 1806 of yacc.c  */
     8973#line 2723 "parser.yy"
     8974    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     8975    break;
     8976
     8977  case 721:
     8978
     8979/* Line 1806 of yacc.c  */
     8980#line 2725 "parser.yy"
     8981    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8982    break;
     8983
     8984  case 722:
     8985
     8986/* Line 1806 of yacc.c  */
     8987#line 2730 "parser.yy"
     8988    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     8989    break;
     8990
     8991  case 723:
     8992
     8993/* Line 1806 of yacc.c  */
     8994#line 2732 "parser.yy"
     8995    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     8996    break;
     8997
    92348998  case 724:
    92358999
    92369000/* Line 1806 of yacc.c  */
    9237 #line 2717 "parser.yy"
    9238     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9001#line 2737 "parser.yy"
     9002    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    92399003    break;
    92409004
     
    92429006
    92439007/* Line 1806 of yacc.c  */
    9244 #line 2719 "parser.yy"
    9245     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    9246     break;
    9247 
    9248   case 726:
    9249 
    9250 /* Line 1806 of yacc.c  */
    9251 #line 2721 "parser.yy"
    9252     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9008#line 2739 "parser.yy"
     9009    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    92539010    break;
    92549011
     
    92569013
    92579014/* Line 1806 of yacc.c  */
    9258 #line 2726 "parser.yy"
    9259     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    9260     break;
    9261 
    9262   case 728:
    9263 
    9264 /* Line 1806 of yacc.c  */
    9265 #line 2728 "parser.yy"
    9266     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    9267     break;
    9268 
    9269   case 729:
    9270 
    9271 /* Line 1806 of yacc.c  */
    9272 #line 2733 "parser.yy"
    9273     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    9274     break;
    9275 
    9276   case 730:
    9277 
    9278 /* Line 1806 of yacc.c  */
    9279 #line 2735 "parser.yy"
    9280     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    9281     break;
    9282 
    9283   case 732:
    9284 
    9285 /* Line 1806 of yacc.c  */
    9286 #line 2762 "parser.yy"
     9015#line 2766 "parser.yy"
    92879016    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    92889017    break;
    92899018
    9290   case 736:
    9291 
    9292 /* Line 1806 of yacc.c  */
    9293 #line 2773 "parser.yy"
    9294     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9295     break;
    9296 
    9297   case 737:
    9298 
    9299 /* Line 1806 of yacc.c  */
    9300 #line 2775 "parser.yy"
    9301     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9302     break;
    9303 
    9304   case 738:
     9019  case 731:
    93059020
    93069021/* Line 1806 of yacc.c  */
     
    93099024    break;
    93109025
    9311   case 739:
     9026  case 732:
    93129027
    93139028/* Line 1806 of yacc.c  */
     
    93169031    break;
    93179032
    9318   case 740:
     9033  case 733:
    93199034
    93209035/* Line 1806 of yacc.c  */
     
    93239038    break;
    93249039
    9325   case 741:
     9040  case 734:
    93269041
    93279042/* Line 1806 of yacc.c  */
     
    93309045    break;
    93319046
     9047  case 735:
     9048
     9049/* Line 1806 of yacc.c  */
     9050#line 2785 "parser.yy"
     9051    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     9052    break;
     9053
     9054  case 736:
     9055
     9056/* Line 1806 of yacc.c  */
     9057#line 2787 "parser.yy"
     9058    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     9059    break;
     9060
     9061  case 737:
     9062
     9063/* Line 1806 of yacc.c  */
     9064#line 2794 "parser.yy"
     9065    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9066    break;
     9067
     9068  case 738:
     9069
     9070/* Line 1806 of yacc.c  */
     9071#line 2796 "parser.yy"
     9072    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9073    break;
     9074
     9075  case 739:
     9076
     9077/* Line 1806 of yacc.c  */
     9078#line 2798 "parser.yy"
     9079    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9080    break;
     9081
     9082  case 740:
     9083
     9084/* Line 1806 of yacc.c  */
     9085#line 2800 "parser.yy"
     9086    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9087    break;
     9088
     9089  case 741:
     9090
     9091/* Line 1806 of yacc.c  */
     9092#line 2802 "parser.yy"
     9093    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9094    break;
     9095
    93329096  case 742:
    93339097
    93349098/* Line 1806 of yacc.c  */
    9335 #line 2790 "parser.yy"
    9336     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9099#line 2804 "parser.yy"
     9100    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    93379101    break;
    93389102
     
    93409104
    93419105/* Line 1806 of yacc.c  */
    9342 #line 2792 "parser.yy"
    9343     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9106#line 2809 "parser.yy"
     9107    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    93449108    break;
    93459109
     
    93479111
    93489112/* Line 1806 of yacc.c  */
    9349 #line 2794 "parser.yy"
    9350     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     9113#line 2814 "parser.yy"
     9114    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    93519115    break;
    93529116
     
    93549118
    93559119/* Line 1806 of yacc.c  */
    9356 #line 2796 "parser.yy"
    9357     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9120#line 2816 "parser.yy"
     9121    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    93589122    break;
    93599123
     
    93619125
    93629126/* Line 1806 of yacc.c  */
    9363 #line 2798 "parser.yy"
    9364     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9365     break;
    9366 
    9367   case 747:
    9368 
    9369 /* Line 1806 of yacc.c  */
    9370 #line 2800 "parser.yy"
    9371     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9372     break;
    9373 
    9374   case 748:
    9375 
    9376 /* Line 1806 of yacc.c  */
    9377 #line 2805 "parser.yy"
    9378     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     9127#line 2818 "parser.yy"
     9128    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    93799129    break;
    93809130
     
    93829132
    93839133/* Line 1806 of yacc.c  */
    9384 #line 2810 "parser.yy"
    9385     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     9134#line 2842 "parser.yy"
     9135    { (yyval.en) = 0; }
    93869136    break;
    93879137
     
    93899139
    93909140/* Line 1806 of yacc.c  */
    9391 #line 2812 "parser.yy"
    9392     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    9393     break;
    9394 
    9395   case 751:
    9396 
    9397 /* Line 1806 of yacc.c  */
    9398 #line 2814 "parser.yy"
    9399     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    9400     break;
    9401 
    9402   case 754:
    9403 
    9404 /* Line 1806 of yacc.c  */
    9405 #line 2838 "parser.yy"
    9406     { (yyval.en) = 0; }
    9407     break;
    9408 
    9409   case 755:
    9410 
    9411 /* Line 1806 of yacc.c  */
    9412 #line 2840 "parser.yy"
     9141#line 2844 "parser.yy"
    94139142    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    94149143    break;
     
    94179146
    94189147/* Line 1806 of yacc.c  */
    9419 #line 9420 "Parser/parser.cc"
     9148#line 9149 "Parser/parser.cc"
    94209149      default: break;
    94219150    }
     
    96489377
    96499378/* Line 2067 of yacc.c  */
    9650 #line 2843 "parser.yy"
     9379#line 2847 "parser.yy"
    96519380
    96529381// ----end of grammar----
  • src/Parser/parser.h

    r950f7a7 r7527e63  
    262262
    263263/* Line 2068 of yacc.c  */
    264 #line 110 "parser.yy"
     264#line 115 "parser.yy"
    265265
    266266        Token tok;
     
    271271        DeclarationNode::TypeClass tclass;
    272272        StatementNode *sn;
    273         ConstantNode *constant;
     273        ConstantExpr *constant;
     274        ForCtl *fctl;
    274275        LabelNode *label;
    275276        InitializerNode *in;
     277        OperKinds op;
    276278        bool flag;
    277279
     
    279281
    280282/* Line 2068 of yacc.c  */
    281 #line 282 "Parser/parser.h"
     283#line 284 "Parser/parser.h"
    282284} YYSTYPE;
    283285# define YYSTYPE_IS_TRIVIAL 1
  • src/Parser/parser.yy

    r950f7a7 r7527e63  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 20:52:53 2016
    13 // Update Count     : 1661
     12// Last Modified On : Mon Aug 15 15:18:19 2016
     13// Update Count     : 1891
    1414//
    1515
     
    6060std::stack< LinkageSpec::Type > linkageStack;
    6161TypedefTable typedefTable;
     62
     63void appendStr( std::string &to, std::string *from ) {
     64        // "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
     65        to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
     66} // appendStr
    6267%}
    6368
     
    116121        DeclarationNode::TypeClass tclass;
    117122        StatementNode *sn;
    118         ConstantNode *constant;
     123        ConstantExpr *constant;
     124        ForCtl *fctl;
    119125        LabelNode *label;
    120126        InitializerNode *in;
     127        OperKinds op;
    121128        bool flag;
    122129}
     
    127134
    128135// expressions
    129 %type<constant> constant
     136%type<en> constant
    130137%type<en> tuple                                                 tuple_expression_list
    131 %type<en> ptrref_operator                               unary_operator                          assignment_operator
     138%type<op> ptrref_operator                               unary_operator                          assignment_operator
    132139%type<en> primary_expression                    postfix_expression                      unary_expression
    133140%type<en> cast_expression                               multiplicative_expression       additive_expression                     shift_expression
     
    136143%type<en> constant_expression                   assignment_expression           assignment_expression_opt
    137144%type<en> comma_expression                              comma_expression_opt
    138 %type<en> argument_expression_list              argument_expression                     for_control_expression          assignment_opt
     145%type<en> argument_expression_list              argument_expression                     assignment_opt
     146%type<fctl> for_control_expression
    139147%type<en> subrange
    140148%type<en> asm_operands_opt asm_operands_list asm_operand
    141149%type<label> label_list
    142 %type<constant> asm_clobbers_list_opt
     150%type<en> asm_clobbers_list_opt
    143151%type<flag> asm_volatile_opt
    144152
     
    150158%type<sn> block_item_list                               block_item
    151159%type<sn> case_clause
    152 %type<en> case_value                                    case_value_list
    153 %type<sn> case_label                                    case_label_list
     160%type<en> case_value
     161%type<sn> case_value_list                               case_label                                      case_label_list
    154162%type<sn> switch_clause_list_opt                switch_clause_list                      choose_clause_list_opt          choose_clause_list
    155 %type<pn> handler_list                                  handler_clause                          finally_clause
     163%type<sn> handler_list                                  handler_clause                          finally_clause
    156164
    157165// declarations
     
    303311constant:
    304312                // ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
    305 INTEGERconstant                                                                 { $$ = makeConstant( ConstantNode::Integer, $1 ); }
    306         | FLOATINGconstant                                                      { $$ = makeConstant( ConstantNode::Float, $1 ); }
    307         | CHARACTERconstant                                                     { $$ = makeConstant( ConstantNode::Character, $1 ); }
     313INTEGERconstant                                                                 { $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
     314        | FLOATINGconstant                                                      { $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
     315        | CHARACTERconstant                                                     { $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
    308316        ;
    309317
     
    330338
    331339string_literal_list:                                                                    // juxtaposed strings are concatenated
    332         STRINGliteral                                                           { $$ = makeConstantStr( ConstantNode::String, $1 ); }
    333         | string_literal_list STRINGliteral                     { $$ = $1->appendstr( $2 ); }
     340        STRINGliteral                                                           { $$ = build_constantStr( *$1 ); }
     341        | string_literal_list STRINGliteral
     342                {
     343                        appendStr( $1->get_constant()->get_value(), $2 );
     344                        delete $2;                                                                      // allocated by lexer
     345                        $$ = $1;
     346                }
    334347        ;
    335348
     
    338351primary_expression:
    339352        IDENTIFIER                                                                                      // typedef name cannot be used as a variable name
    340                 { $$ = new VarRefNode( $1 ); }
     353                { $$ = new ExpressionNode( build_varref( $1 ) ); }
    341354        | zero_one
    342                 { $$ = new VarRefNode( $1 ); }
     355                { $$ = new ExpressionNode( build_varref( $1 ) ); }
    343356        | '(' comma_expression ')'
    344357                { $$ = $2; }
    345358        | '(' compound_statement ')'                                            // GCC, lambda expression
    346                 { $$ = new ValofExprNode( $2 ); }
     359        { $$ = new ExpressionNode( build_valexpr( $2 ) ); }
    347360        ;
    348361
     
    354367                // little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
    355368                // equivalent to the old x[i,j].
    356                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), $1, $4 ); }
     369                { $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
    357370        | postfix_expression '(' argument_expression_list ')'
    358                 { $$ = new CompositeExprNode( $1, $3 ); }
     371                { $$ = new ExpressionNode( build_func( $1, $3 ) ); }
    359372        // ambiguity with .0 so space required after field-selection, e.g.
    360373                //   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
    361374        | postfix_expression '.' no_attr_identifier
    362                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), $1, new VarRefNode( $3 )); }
     375                { $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
    363376        | postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
    364377        | postfix_expression ARROW no_attr_identifier
    365                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), $1, new VarRefNode( $3 )); }
     378                { $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
    366379        | postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
    367380        | postfix_expression ICR
    368                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), $1 ); }
     381                { $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
    369382        | postfix_expression DECR
    370                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); }
     383                { $$ = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
    371384        | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
    372                 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
     385                { $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
    373386        | postfix_expression '{' argument_expression_list '}' // CFA
    374387                {
    375                         Token fn; fn.str = new std::string( "?{}" ); // location undefined
    376                         $$ = new CompositeExprNode( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) );
     388                        Token fn;
     389                        fn.str = new std::string( "?{}" ); // location undefined
     390                        $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) );
    377391                }
    378392        ;
     
    381395        argument_expression
    382396        | argument_expression_list ',' argument_expression
    383                 { $$ = (ExpressionNode *)( $1->set_link( $3 )); }
     397                { $$ = (ExpressionNode *)( $1->set_last( $3 )); }
    384398        ;
    385399
     
    388402                { $$ = 0; }                                                                             // use default argument
    389403        | assignment_expression
    390         | no_attr_identifier ':' assignment_expression
    391                 { $$ = $3->set_argName( $1 ); }
    392                 // Only a list of no_attr_identifier_or_type_name is allowed in this context. However, there is insufficient
    393                 // look ahead to distinguish between this list of parameter names and a tuple, so the tuple form must be used
    394                 // with an appropriate semantic check.
    395         | '[' push assignment_expression pop ']' ':' assignment_expression
    396                 { $$ = $7->set_argName( $3 ); }
    397         | '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression
    398                 { $$ = $9->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 )))); }
    399404        ;
    400405
    401406field_list:                                                                                             // CFA, tuple field selector
    402407        field
    403         | field_list ',' field                                          { $$ = (ExpressionNode *)$1->set_link( $3 ); }
     408        | field_list ',' field                                          { $$ = (ExpressionNode *)$1->set_last( $3 ); }
    404409        ;
    405410
    406411field:                                                                                                  // CFA, tuple field selector
    407412        no_attr_identifier
    408                 { $$ = new VarRefNode( $1 ); }
     413                { $$ = new ExpressionNode( build_varref( $1 ) ); }
    409414        // ambiguity with .0 so space required after field-selection, e.g.
    410415                //   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
    411416        | no_attr_identifier '.' field
    412                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $3 ); }
     417                { $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); }
    413418        | no_attr_identifier '.' '[' push field_list pop ']'
    414                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $5 ); }
     419                { $$ = new ExpressionNode( build_fieldSel( $5, build_varref( $1 ) ) ); }
    415420        | no_attr_identifier ARROW field
    416                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $3 ); }
     421                { $$ = new ExpressionNode( build_pfieldSel( $3, build_varref( $1 ) ) ); }
    417422        | no_attr_identifier ARROW '[' push field_list pop ']'
    418                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $5 ); }
     423                { $$ = new ExpressionNode( build_pfieldSel( $5, build_varref( $1 ) ) ); }
    419424        ;
    420425
     
    426431                { $$ = $1; }
    427432        | string_literal_list
    428                 { $$ = $1; }
     433                { $$ = new ExpressionNode( $1 ); }
    429434        | EXTENSION cast_expression                                                     // GCC
    430435                { $$ = $2->set_extension( true ); }
    431         | ptrref_operator cast_expression                                       // CFA
    432                 { $$ = new CompositeExprNode( $1, $2 ); }
    433436                // '*' ('&') is separated from unary_operator because of shift/reduce conflict in:
    434437                //              { * X; }         // dereference X
    435438                //              { * int X; } // CFA declaration of pointer to int
     439        | ptrref_operator cast_expression                                       // CFA
     440                {
     441                        switch ( $1 ) {
     442                          case OperKinds::AddressOf:
     443                                $$ = new ExpressionNode( build_addressOf( $2 ) );
     444                                break;
     445                          case OperKinds::PointTo:
     446                                $$ = new ExpressionNode( build_unary_val( $1, $2 ) );
     447                                break;
     448                          default:
     449                                assert( false );
     450                        }
     451                }
    436452        | unary_operator cast_expression
    437                 { $$ = new CompositeExprNode( $1, $2 ); }
     453                { $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); }
    438454        | ICR unary_expression
    439                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), $2 ); }
     455                { $$ = new ExpressionNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
    440456        | DECR unary_expression
    441                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); }
     457                { $$ = new ExpressionNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
    442458        | SIZEOF unary_expression
    443                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2 ); }
     459                { $$ = new ExpressionNode( build_sizeOfexpr( $2 ) ); }
    444460        | SIZEOF '(' type_name_no_function ')'
    445                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
     461                { $$ = new ExpressionNode( build_sizeOftype( $3 ) ); }
     462        | ALIGNOF unary_expression                                                      // GCC, variable alignment
     463                { $$ = new ExpressionNode( build_alignOfexpr( $2 ) ); }
     464        | ALIGNOF '(' type_name_no_function ')'                         // GCC, type alignment
     465                { $$ = new ExpressionNode( build_alignOftype( $3 ) ); }
    446466        | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
    447                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
     467                { $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); }
    448468        | ATTR_IDENTIFIER
    449                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
     469                { $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), nullptr ) ); }
     470        | ATTR_IDENTIFIER '(' argument_expression ')'
     471                { $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), $3 ) ); }
    450472        | ATTR_IDENTIFIER '(' type_name ')'
    451                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3 )); }
    452         | ATTR_IDENTIFIER '(' argument_expression ')'
    453                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); }
    454         | ALIGNOF unary_expression                                                      // GCC, variable alignment
    455                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), $2 ); }
    456         | ALIGNOF '(' type_name_no_function ')'                         // GCC, type alignment
    457                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 ) ); }
     473                { $$ = new ExpressionNode( build_attrtype( build_varref( $1 ), $3 ) ); }
    458474//      | ANDAND IDENTIFIER                                                                     // GCC, address of label
    459 //              { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
     475//              { $$ = new ExpressionNode( new OperatorNode( OperKinds::LabelAddress ), new ExpressionNode( build_varref( $2, true ) ); }
    460476        ;
    461477
    462478ptrref_operator:
    463         '*'                                                                                     { $$ = new OperatorNode( OperatorNode::PointTo ); }
    464         | '&'                                                                           { $$ = new OperatorNode( OperatorNode::AddressOf ); }
     479        '*'                                                                                     { $$ = OperKinds::PointTo; }
     480        | '&'                                                                           { $$ = OperKinds::AddressOf; }
    465481                // GCC, address of label must be handled by semantic check for ref,ref,label
    466         | ANDAND                                                                        { $$ = new OperatorNode( OperatorNode::And ); }
     482//      | ANDAND                                                                        { $$ = OperKinds::And; }
    467483        ;
    468484
    469485unary_operator:
    470         '+'                                                                                     { $$ = new OperatorNode( OperatorNode::UnPlus ); }
    471         | '-'                                                                           { $$ = new OperatorNode( OperatorNode::UnMinus ); }
    472         | '!'                                                                           { $$ = new OperatorNode( OperatorNode::Neg ); }
    473         | '~'                                                                           { $$ = new OperatorNode( OperatorNode::BitNeg ); }
     486        '+'                                                                                     { $$ = OperKinds::UnPlus; }
     487        | '-'                                                                           { $$ = OperKinds::UnMinus; }
     488        | '!'                                                                           { $$ = OperKinds::Neg; }
     489        | '~'                                                                           { $$ = OperKinds::BitNeg; }
    474490        ;
    475491
     
    477493        unary_expression
    478494        | '(' type_name_no_function ')' cast_expression
    479                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
     495                { $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
    480496        | '(' type_name_no_function ')' tuple
    481                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
     497                { $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
    482498        ;
    483499
     
    485501        cast_expression
    486502        | multiplicative_expression '*' cast_expression
    487                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), $1, $3 ); }
     503                { $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
    488504        | multiplicative_expression '/' cast_expression
    489                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), $1, $3 ); }
     505                { $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
    490506        | multiplicative_expression '%' cast_expression
    491                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), $1, $3 ); }
     507                { $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
    492508        ;
    493509
     
    495511        multiplicative_expression
    496512        | additive_expression '+' multiplicative_expression
    497                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), $1, $3 ); }
     513                { $$ = new ExpressionNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
    498514        | additive_expression '-' multiplicative_expression
    499                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), $1, $3 ); }
     515                { $$ = new ExpressionNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
    500516        ;
    501517
     
    503519        additive_expression
    504520        | shift_expression LS additive_expression
    505                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), $1, $3 ); }
     521                { $$ = new ExpressionNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
    506522        | shift_expression RS additive_expression
    507                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), $1, $3 ); }
     523                { $$ = new ExpressionNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
    508524        ;
    509525
     
    511527        shift_expression
    512528        | relational_expression '<' shift_expression
    513                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), $1, $3 ); }
     529                { $$ = new ExpressionNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
    514530        | relational_expression '>' shift_expression
    515                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), $1, $3 ); }
     531                { $$ = new ExpressionNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
    516532        | relational_expression LE shift_expression
    517                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), $1, $3 ); }
     533                { $$ = new ExpressionNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
    518534        | relational_expression GE shift_expression
    519                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), $1, $3 ); }
     535                { $$ = new ExpressionNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
    520536        ;
    521537
     
    523539        relational_expression
    524540        | equality_expression EQ relational_expression
    525                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), $1, $3 ); }
     541                { $$ = new ExpressionNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
    526542        | equality_expression NE relational_expression
    527                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), $1, $3 ); }
     543                { $$ = new ExpressionNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
    528544        ;
    529545
     
    531547        equality_expression
    532548        | AND_expression '&' equality_expression
    533                 { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), $1, $3 ); }
     549                { $$ = new ExpressionNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
    534550        ;
    535551
     
    537553        AND_expression
    538554        | exclusive_OR_expression '^' AND_expression
    539                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), $1, $3 ); }
     555                { $$ = new ExpressionNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
    540556        ;
    541557
     
    543559        exclusive_OR_expression
    544560        | inclusive_OR_expression '|' exclusive_OR_expression
    545                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), $1, $3 ); }
     561                { $$ = new ExpressionNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
    546562        ;
    547563
     
    549565        inclusive_OR_expression
    550566        | logical_AND_expression ANDAND inclusive_OR_expression
    551                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::And ), $1, $3 ); }
     567                { $$ = new ExpressionNode( build_and_or( $1, $3, true ) ); }
    552568        ;
    553569
     
    555571        logical_AND_expression
    556572        | logical_OR_expression OROR logical_AND_expression
    557                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), $1, $3 ); }
     573                { $$ = new ExpressionNode( build_and_or( $1, $3, false ) ); }
    558574        ;
    559575
     
    561577        logical_OR_expression
    562578        | logical_OR_expression '?' comma_expression ':' conditional_expression
    563                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 ) ) ); }
     579                { $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
     580                // FIX ME: this hack computes $1 twice
    564581        | logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
    565                 { $$=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4 ); }
     582                { $$ = new ExpressionNode( build_cond( $1, $1, $4 ) ); }
    566583        | logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
    567                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 ) ) ); }
     584                { $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
    568585        ;
    569586
     
    575592                // CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples
    576593        conditional_expression
    577         | unary_expression '=' assignment_expression
    578                 { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }
    579594        | unary_expression assignment_operator assignment_expression
    580                 { $$ =new CompositeExprNode( $2, $1, $3 ); }
     595                { $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
    581596        | tuple assignment_opt                                                          // CFA, tuple expression
    582                 { $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2 ); }
     597                { $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
    583598        ;
    584599
    585600assignment_expression_opt:
    586601        // empty
    587                 { $$ = new NullExprNode; }
     602                { $$ = nullptr; }
    588603        | assignment_expression
     604        ;
     605
     606assignment_operator:
     607        '='                                                                                     { $$ = OperKinds::Assign; }
     608        | MULTassign                                                            { $$ = OperKinds::MulAssn; }
     609        | DIVassign                                                                     { $$ = OperKinds::DivAssn; }
     610        | MODassign                                                                     { $$ = OperKinds::ModAssn; }
     611        | PLUSassign                                                            { $$ = OperKinds::PlusAssn; }
     612        | MINUSassign                                                           { $$ = OperKinds::MinusAssn; }
     613        | LSassign                                                                      { $$ = OperKinds::LSAssn; }
     614        | RSassign                                                                      { $$ = OperKinds::RSAssn; }
     615        | ANDassign                                                                     { $$ = OperKinds::AndAssn; }
     616        | ERassign                                                                      { $$ = OperKinds::ERAssn; }
     617        | ORassign                                                                      { $$ = OperKinds::OrAssn; }
    589618        ;
    590619
     
    593622                // comma_expression in new_identifier_parameter_array and new_abstract_array
    594623        '[' ']'
    595                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     624                { $$ = new ExpressionNode( build_tuple() ); }
    596625        | '[' push assignment_expression pop ']'
    597                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), $3 ); }
     626                { $$ = new ExpressionNode( build_tuple( $3 ) ); }
    598627        | '[' push ',' tuple_expression_list pop ']'
    599                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ); }
     628                { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
    600629        | '[' push assignment_expression ',' tuple_expression_list pop ']'
    601                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)$3->set_link( flattenCommas( $5 ) ) ); }
     630                { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
    602631        ;
    603632
     
    605634        assignment_expression_opt
    606635        | tuple_expression_list ',' assignment_expression_opt
    607                 { $$ = (ExpressionNode *)$1->set_link( $3 ); }
    608         ;
    609 
    610 assignment_operator:
    611         MULTassign                                                                      { $$ = new OperatorNode( OperatorNode::MulAssn ); }
    612         | DIVassign                                                                     { $$ = new OperatorNode( OperatorNode::DivAssn ); }
    613         | MODassign                                                                     { $$ = new OperatorNode( OperatorNode::ModAssn ); }
    614         | PLUSassign                                                            { $$ = new OperatorNode( OperatorNode::PlusAssn ); }
    615         | MINUSassign                                                           { $$ = new OperatorNode( OperatorNode::MinusAssn ); }
    616         | LSassign                                                                      { $$ = new OperatorNode( OperatorNode::LSAssn ); }
    617         | RSassign                                                                      { $$ = new OperatorNode( OperatorNode::RSAssn ); }
    618         | ANDassign                                                                     { $$ = new OperatorNode( OperatorNode::AndAssn ); }
    619         | ERassign                                                                      { $$ = new OperatorNode( OperatorNode::ERAssn ); }
    620         | ORassign                                                                      { $$ = new OperatorNode( OperatorNode::OrAssn ); }
     636                { $$ = (ExpressionNode *)$1->set_last( $3 ); }
    621637        ;
    622638
    623639comma_expression:
    624640        assignment_expression
    625         | comma_expression ',' assignment_expression    // { $$ = (ExpressionNode *)$1->add_to_list( $3 ); }
    626                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3 ); }
     641        | comma_expression ',' assignment_expression
     642                { $$ = new ExpressionNode( build_comma( $1, $3 ) ); }
    627643        ;
    628644
     
    646662        | '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
    647663                {
    648                         Token fn; fn.str = new std::string( "^?{}" ); // location undefined
    649                         $$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( new VarRefNode( fn ),
    650                                 (ExpressionNode *)( $2 )->set_link( $4 ) ), 0 );
     664                        Token fn;
     665                        fn.str = new std::string( "^?{}" ); // location undefined
     666                        $$ = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
    651667                }
    652668        ;
     
    662678compound_statement:
    663679        '{' '}'
    664                 { $$ = new CompoundStmtNode( (StatementNode *)0 ); }
     680                { $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
    665681        | '{'
    666682                // Two scopes are necessary because the block itself has a scope, but every declaration within the block also
     
    669685          local_label_declaration_opt                                           // GCC, local labels
    670686          block_item_list pop '}'                                                       // C99, intermix declarations and statements
    671                 { $$ = new CompoundStmtNode( $5 ); }
     687                { $$ = new StatementNode( build_compound( $5 ) ); }
    672688        ;
    673689
     
    675691        block_item
    676692        | block_item_list push block_item
    677                 { if ( $1 != 0 ) { $1->set_link( $3 ); $$ = $1; } }
     693                { if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
    678694        ;
    679695
     
    683699        | EXTENSION declaration                                                         // GCC
    684700                {       // mark all fields in list
    685                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     701                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    686702                                iter->set_extension( true );
    687703                        $$ = new StatementNode( $2 );
     
    695711        statement
    696712        | statement_list statement
    697                 { if ( $1 != 0 ) { $1->set_link( $2 ); $$ = $1; } }
     713                { if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
    698714        ;
    699715
    700716expression_statement:
    701717        comma_expression_opt ';'
    702                 { $$ = new StatementNode( StatementNode::Exp, $1, 0 ); }
     718                { $$ = new StatementNode( build_expr( $1 ) ); }
    703719        ;
    704720
     
    706722        IF '(' comma_expression ')' statement                           %prec THEN
    707723                // explicitly deal with the shift/reduce conflict on if/else
    708                 { $$ = new StatementNode( StatementNode::If, $3, $5 ); }
     724                { $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
    709725        | IF '(' comma_expression ')' statement ELSE statement
    710                 { $$ = new StatementNode( StatementNode::If, $3, (StatementNode *)mkList((*$5, *$7 )) ); }
     726                { $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
    711727        | SWITCH '(' comma_expression ')' case_clause           // CFA
    712                 { $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
     728                { $$ = new StatementNode( build_switch( $3, $5 ) ); }
    713729        | SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
    714730                {
    715                         StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
     731                        StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
    716732                        // The semantics of the declaration list is changed to include associated initialization, which is performed
    717733                        // *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
    718734                        // 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;
     735                        // therefore, are removed from the grammar even though C allows it. The change also applies to choose
     736                        // statement.
     737                        $$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
    721738                }
    722739        | CHOOSE '(' comma_expression ')' case_clause           // CFA
    723                 { $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
     740                { $$ = new StatementNode( build_switch( $3, $5 ) ); }
    724741        | CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
    725742                {
    726                         StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
    727                         $$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
     743                        StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
     744                        $$ = $7 != 0 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
    728745                }
    729746        ;
     
    735752        constant_expression                                                     { $$ = $1; }
    736753        | constant_expression ELLIPSIS constant_expression      // GCC, subrange
    737                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3 ); }
     754                { $$ = new ExpressionNode( build_range( $1, $3 ) ); }
    738755        | subrange                                                                                      // CFA, subrange
    739756        ;
    740757
    741758case_value_list:                                                                                // CFA
    742         case_value
    743         | case_value_list ',' case_value
    744                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( $1 ))->set_link( $3 ) ); }
     759        case_value                                                                      { $$ = new StatementNode( build_case( $1 ) ); }
     760                // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
     761        | case_value_list ',' case_value                        { $$ = (StatementNode *)($1->set_last( new StatementNode( build_case( $3 ) ) ) ); }
    745762        ;
    746763
    747764case_label:                                                                                             // CFA
    748         CASE case_value_list ':'                                        { $$ = new StatementNode( StatementNode::Case, $2, 0 ); }
    749         | DEFAULT ':'                                                           { $$ = new StatementNode( StatementNode::Default ); }
     765        CASE case_value_list ':'                                        { $$ = $2; }
     766        | DEFAULT ':'                                                           { $$ = new StatementNode( build_default() ); }
    750767                // A semantic check is required to ensure only one default clause per switch/choose statement.
    751768        ;
     
    753770case_label_list:                                                                                // CFA
    754771        case_label
    755         | case_label_list case_label                            { $$ = (StatementNode *)( $1->set_link( $2 )); }
     772        | case_label_list case_label                            { $$ = (StatementNode *)( $1->set_last( $2 )); }
    756773        ;
    757774
    758775case_clause:                                                                                    // CFA
    759         case_label_list statement                                       { $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
     776        case_label_list statement                                       { $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
    760777        ;
    761778
     
    768785switch_clause_list:                                                                             // CFA
    769786        case_label_list statement_list
    770                 { $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
     787                { $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
    771788        | switch_clause_list case_label_list statement_list
    772                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
     789                { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( $3 ) ) ) ) ); }
    773790        ;
    774791
     
    783800                { $$ = $1->append_last_case( $2 ); }
    784801        | case_label_list statement_list fall_through_opt
    785                 { $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); }
     802                { $$ = $1->append_last_case( new StatementNode( build_compound( (StatementNode *)$2->set_last( $3 ) ) ) ); }
    786803        | choose_clause_list case_label_list fall_through
    787                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); }
     804                { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); }
    788805        | choose_clause_list case_label_list statement_list fall_through_opt
    789                 { $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
     806                { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( (StatementNode *)$3->set_last( $4 ) ) ) ) ) ); }
    790807        ;
    791808
    792809fall_through_opt:                                                                               // CFA
    793810        // empty
    794                 { $$ = new StatementNode( StatementNode::Break ); }     // insert implicit break
     811                { $$ = new StatementNode( build_branch( "", BranchStmt::Break ) ); } // insert implicit break
    795812        | fall_through
    796813        ;
     
    805822iteration_statement:
    806823        WHILE '(' comma_expression ')' statement
    807                 { $$ = new StatementNode( StatementNode::While, $3, $5 ); }
     824                { $$ = new StatementNode( build_while( $3, $5 ) ); }
    808825        | DO statement WHILE '(' comma_expression ')' ';'
    809                 { $$ = new StatementNode( StatementNode::Do, $5, $2 ); }
     826                { $$ = new StatementNode( build_while( $5, $2 ) ); }
    810827        | FOR '(' push for_control_expression ')' statement
    811                 { $$ = new StatementNode( StatementNode::For, $4, $6 ); }
     828                { $$ = new StatementNode( build_for( $4, $6 ) ); }
    812829        ;
    813830
    814831for_control_expression:
    815832        comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt
    816                 { $$ = new ForCtlExprNode( $1, $4, $6 ); }
     833                { $$ = new ForCtl( $1, $4, $6 ); }
    817834        | declaration comma_expression_opt ';' comma_expression_opt // C99
    818                 { $$ = new ForCtlExprNode( $1, $2, $4 ); }
    819         ;
     835                { $$ = new ForCtl( $1, $2, $4 ); }
     836        ;
    820837
    821838jump_statement:
    822839        GOTO IDENTIFIER ';'
    823                 { $$ = new StatementNode( StatementNode::Goto, $2 ); }
     840                { $$ = new StatementNode( build_branch( *$2, BranchStmt::Goto ) ); }
    824841        | GOTO '*' comma_expression ';'                                         // GCC, computed goto
    825842                // The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
    826843                // whereas normal operator precedence yields goto (*i)+3;
    827                 { $$ = new StatementNode( StatementNode::Goto, $3 ); }
     844                { $$ = new StatementNode( build_computedgoto( $3 ) ); }
    828845        | CONTINUE ';'
    829846                // A semantic check is required to ensure this statement appears only in the body of an iteration statement.
    830                 { $$ = new StatementNode( StatementNode::Continue ); }
     847                { $$ = new StatementNode( build_branch( "", BranchStmt::Continue ) ); }
    831848        | CONTINUE IDENTIFIER ';'                                                       // CFA, multi-level continue
    832849                // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
    833850                // the target of the transfer appears only at the start of an iteration statement.
    834                 { $$ = new StatementNode( StatementNode::Continue, $2 ); }
     851                { $$ = new StatementNode( build_branch( *$2, BranchStmt::Continue ) ); delete $2; }
    835852        | BREAK ';'
    836853                // A semantic check is required to ensure this statement appears only in the body of an iteration statement.
    837                 { $$ = new StatementNode( StatementNode::Break ); }
     854                { $$ = new StatementNode( build_branch( "", BranchStmt::Break ) ); }
    838855        | BREAK IDENTIFIER ';'                                                          // CFA, multi-level exit
    839856                // A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
    840857                // the target of the transfer appears only at the start of an iteration statement.
    841                 { $$ = new StatementNode( StatementNode::Break, $2 ); }
     858                { $$ = new StatementNode( build_branch( *$2, BranchStmt::Break ) ); delete $2; }
    842859        | RETURN comma_expression_opt ';'
    843                 { $$ = new StatementNode( StatementNode::Return, $2, 0 ); }
    844         | THROW assignment_expression_opt ';'
    845                 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
    846 //      | THROW ';'
    847 //              { $$ = new StatementNode( StatementNode::Throw ); }
    848         | THROWRESUME assignment_expression_opt ';'
    849                 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
    850         | THROWRESUME assignment_expression_opt AT assignment_expression ';'
    851                 { $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
    852 //      | THROWRESUME ';'
    853 //              { $$ = new StatementNode( StatementNode::Throw ); }
     860                { $$ = new StatementNode( build_return( $2 ) ); }
     861        | THROW assignment_expression_opt ';'                           // handles rethrow
     862                { $$ = new StatementNode( build_throw( $2 ) ); }
     863        | THROWRESUME assignment_expression_opt ';'                     // handles reresume
     864                { $$ = new StatementNode( build_throw( $2 ) ); }
     865        | THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
     866                { $$ = new StatementNode( build_throw( $2 ) ); }
    854867        ;
    855868
    856869exception_statement:
    857870        TRY compound_statement handler_list
    858                 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
     871                { $$ = new StatementNode( build_try( $2, $3, 0 ) ); }
    859872        | TRY compound_statement finally_clause
    860                 { $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
     873                { $$ = new StatementNode( build_try( $2, 0, $3 ) ); }
    861874        | TRY compound_statement handler_list finally_clause
    862                 {
    863                         $3->set_link( $4 );
    864                         $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 ))));
    865                 }
     875                { $$ = new StatementNode( build_try( $2, $3, $4 ) ); }
    866876        ;
    867877
    868878handler_list:
    869                 // There must be at least one catch clause
    870879        handler_clause
    871880                // ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block.
    872881        | CATCH '(' ELLIPSIS ')' compound_statement
    873                 { $$ = StatementNode::newCatchStmt( 0, $5, true ); }
     882                { $$ = new StatementNode( build_catch( 0, $5, true ) ); }
    874883        | handler_clause CATCH '(' ELLIPSIS ')' compound_statement
    875                 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
     884                { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
    876885        | CATCHRESUME '(' ELLIPSIS ')' compound_statement
    877                 { $$ = StatementNode::newCatchStmt( 0, $5, true ); }
     886                { $$ = new StatementNode( build_catch( 0, $5, true ) ); }
    878887        | handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
    879                 { $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
     888                { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
    880889        ;
    881890
    882891handler_clause:
    883892        CATCH '(' push push exception_declaration pop ')' compound_statement pop
    884                 { $$ = StatementNode::newCatchStmt( $5, $8 ); }
     893                { $$ = new StatementNode( build_catch( $5, $8 ) ); }
    885894        | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
    886                 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
     895        { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
    887896        | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
    888                 { $$ = StatementNode::newCatchStmt( $5, $8 ); }
     897                { $$ = new StatementNode( build_catch( $5, $8 ) ); }
    889898        | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
    890                 { $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
     899                { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
    891900        ;
    892901
     
    894903        FINALLY compound_statement
    895904                {
    896                         $$ = new StatementNode( StatementNode::Finally, 0, $2 );
    897                         std::cout << "Just created a finally node" << std::endl;
     905                        $$ = new StatementNode( build_finally( $2 ) );
    898906                }
    899907        ;
     
    923931asm_statement:
    924932        ASM asm_volatile_opt '(' string_literal_list ')' ';'
    925                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, 0 ); }
     933                { $$ = new StatementNode( build_asmstmt( $2, $4, 0 ) ); }
    926934        | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ')' ';' // remaining GCC
    927                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6 ); }
     935                { $$ = new StatementNode( build_asmstmt( $2, $4, $6 ) ); }
    928936        | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ')' ';'
    929                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8 ); }
     937                { $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8 ) ); }
    930938        | ASM asm_volatile_opt '(' string_literal_list ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';'
    931                 { $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10 ); }
     939                { $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8, $10 ) ); }
    932940        | ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
    933         { $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
     941                { $$ = new StatementNode( build_asmstmt( $2, $5, 0, $8, $10, $12 ) ); }
    934942        ;
    935943
     
    950958        asm_operand
    951959        | asm_operands_list ',' asm_operand
    952                 { $$ = (ExpressionNode *)$1->set_link( $3 ); }
     960                { $$ = (ExpressionNode *)$1->set_last( $3 ); }
    953961        ;
    954962
    955963asm_operand:                                                                                    // GCC
    956964        string_literal_list '(' constant_expression ')'
    957                 { $$ = new AsmExprNode( 0, $1, $3 ); }
     965                { $$ = new ExpressionNode( build_asmexpr( 0, $1, $3 ) ); }
    958966        | '[' constant_expression ']' string_literal_list '(' constant_expression ')'
    959                 { $$ = new AsmExprNode( $2, $4, $6 ); }
     967        { $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); }
    960968        ;
    961969
     
    964972                { $$ = 0; }                                                                             // use default argument
    965973        | string_literal_list
    966                 { $$ = $1; }
     974                { $$ = new ExpressionNode( $1 ); }
    967975        | asm_clobbers_list_opt ',' string_literal_list
    968                 { $$ = (ConstantNode *)$1->set_link( $3 ); }
     976                { $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
    969977        ;
    970978
    971979label_list:
    972980        no_attr_identifier
    973                 { $$ = new LabelNode(); $$->append_label( $1 ); }
     981                { $$ = new LabelNode(); $$->labels.push_back( *$1 ); }
    974982        | label_list ',' no_attr_identifier
    975                 { $$ = $1; $1->append_label( $3 ); }
     983                { $$ = $1; $1->labels.push_back( *$3 ); }
    976984        ;
    977985
     
    14891497        | EXTENSION field_declaring_list ';'                            // GCC
    14901498                {       // mark all fields in list
    1491                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     1499                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    14921500                                iter->set_extension( true );
    14931501                        $$ = $2;
     
    17351743        | initializer
    17361744        | designation initializer                                       { $$ = $2->set_designators( $1 ); }
    1737         | initializer_list ',' initializer                      { $$ = (InitializerNode *)( $1->set_link( $3 ) ); }
     1745        | initializer_list ',' initializer                      { $$ = (InitializerNode *)( $1->set_last( $3 ) ); }
    17381746        | initializer_list ',' designation initializer
    1739                 { $$ = (InitializerNode *)( $1->set_link( $4->set_designators( $3 ) ) ); }
     1747                { $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); }
    17401748        ;
    17411749
     
    17531761        designator_list ':'                                                                     // C99, CFA uses ":" instead of "="
    17541762        | no_attr_identifier_or_type_name ':'                           // GCC, field name
    1755                 { $$ = new VarRefNode( $1 ); }
     1763                { $$ = new ExpressionNode( build_varref( $1 ) ); }
    17561764        ;
    17571765
     
    17591767        designator
    17601768        | designator_list designator
    1761                 { $$ = (ExpressionNode *)( $1->set_link( $2 )); }
    1762         //| designator_list designator                                          { $$ = new CompositeExprNode( $1, $2 ); }
     1769                { $$ = (ExpressionNode *)( $1->set_last( $2 ) ); }
     1770        //| designator_list designator                                          { $$ = new ExpressionNode( $1, $2 ); }
    17631771        ;
    17641772
    17651773designator:
    1766                 // lexer ambiguity: designator ".0" is floating-point constant or designator for name 0 only ".0" and ".1"
    1767                 // allowed => semantic check
    1768         FLOATINGconstant
    1769                 { $$ = new DesignatorNode( new VarRefNode( $1 ) ); }
    1770         | '.' no_attr_identifier_or_type_name                           // C99, field name
    1771                 { $$ = new DesignatorNode( new VarRefNode( $2 ) ); }
     1774        '.' no_attr_identifier_or_type_name                                     // C99, field name
     1775                { $$ = new ExpressionNode( build_varref( $2 ) ); }
    17721776        | '[' push assignment_expression pop ']'                        // C99, single array element
    17731777                // assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple.
    1774                 { $$ = new DesignatorNode( $3, true ); }
     1778                { $$ = $3; }
    17751779        | '[' push subrange pop ']'                                                     // CFA, multiple array elements
    1776                 { $$ = new DesignatorNode( $3, true ); }
     1780                { $$ = $3; }
    17771781        | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
    1778                 { $$ = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $3, $5 ), true ); }
     1782                { $$ = new ExpressionNode( build_range( $3, $5 ) ); }
    17791783        | '.' '[' push field_list pop ']'                                       // CFA, tuple field selector
    1780                 { $$ = new DesignatorNode( $4 ); }
     1784                { $$ = $4; }
    17811785        ;
    17821786
     
    18661870type_name_list:                                                                                 // CFA
    18671871        type_name
    1868                 { $$ = new TypeValueNode( $1 ); }
     1872                { $$ = new ExpressionNode( build_typevalue( $1 ) ); }
    18691873        | assignment_expression
    18701874        | type_name_list ',' type_name
    1871                 { $$ = (ExpressionNode *)( $1->set_link( new TypeValueNode( $3 ))); }
     1875                { $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
    18721876        | type_name_list ',' assignment_expression
    1873                 { $$ = (ExpressionNode *)( $1->set_link( $3 )); }
     1877                { $$ = (ExpressionNode *)( $1->set_last( $3 )); }
    18741878        ;
    18751879
     
    20092013        | EXTENSION external_definition
    20102014                {       // mark all fields in list
    2011                         for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
     2015                        for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
    20122016                                iter->set_extension( true );
    20132017                        $$ = $2;
     
    21052109subrange:
    21062110        constant_expression '~' constant_expression                     // CFA, integer subrange
    2107                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3 ); }
     2111                { $$ = new ExpressionNode( build_range( $1, $3 ) ); }
    21082112        ;
    21092113
  • src/Parser/parseutility.cc

    r950f7a7 r7527e63  
    1010// Created On       : Sat May 16 15:30:39 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May 16 15:31:33 2015
    13 // Update Count     : 2
     12// Last Modified On : Sun Aug 14 23:45:03 2016
     13// Update Count     : 3
    1414//
    1515
     
    1717#include "SynTree/Type.h"
    1818#include "SynTree/Expression.h"
     19
     20// rewrite
     21//    if ( x ) ...
     22// as
     23//    if ( (int)(x != 0) ) ...
    1924
    2025Expression *notZeroExpr( Expression *orig ) {
  • src/ResolvExpr/Resolver.cc

    r950f7a7 r7527e63  
    2424#include "SynTree/Initializer.h"
    2525#include "SymTab/Indexer.h"
     26#include "SymTab/Autogen.h"
    2627#include "Common/utility.h"
    2728#include "InitTweak/InitTweak.h"
     
    4142
    4243                virtual void visit( ArrayType * at );
     44                virtual void visit( PointerType * at );
    4345
    4446                virtual void visit( ExprStmt *exprStmt );
     
    5254                virtual void visit( BranchStmt *branchStmt );
    5355                virtual void visit( ReturnStmt *returnStmt );
    54                 virtual void visit( ImplicitCtorDtorStmt * impCtorDtorStmt );
    5556
    5657                virtual void visit( SingleInit *singleInit );
     
    5960          private:
    6061        typedef std::list< Initializer * >::iterator InitIterator;
     62
     63                template< typename PtrType >
     64                void handlePtrType( PtrType * type );
    6165
    6266          void resolveAggrInit( AggregateDecl *, InitIterator &, InitIterator & );
     
    192196        }
    193197
     198        template< typename PtrType >
     199        void Resolver::handlePtrType( PtrType * type ) {
     200                if ( type->get_dimension() ) {
     201                        CastExpr *castExpr = new CastExpr( type->get_dimension(), SymTab::SizeType->clone() );
     202                        Expression *newExpr = findSingleExpression( castExpr, *this );
     203                        delete type->get_dimension();
     204                        type->set_dimension( newExpr );
     205                }
     206        }
     207
    194208        void Resolver::visit( ArrayType * at ) {
    195                 if ( at->get_dimension() ) {
    196                         BasicType arrayLenType = BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    197                         CastExpr *castExpr = new CastExpr( at->get_dimension(), arrayLenType.clone() );
    198                         Expression *newExpr = findSingleExpression( castExpr, *this );
    199                         delete at->get_dimension();
    200                         at->set_dimension( newExpr );
    201                 }
     209                handlePtrType( at );
    202210                Visitor::visit( at );
     211        }
     212
     213        void Resolver::visit( PointerType * pt ) {
     214                handlePtrType( pt );
     215                Visitor::visit( pt );
    203216        }
    204217
     
    422435
    423436        void Resolver::visit( ListInit * listInit ) {
    424                 InitIterator iter = listInit->begin_initializers();
    425                 InitIterator end = listInit->end_initializers();
     437                InitIterator iter = listInit->begin();
     438                InitIterator end = listInit->end();
    426439
    427440                if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) {
     
    521534                // implicitly generated, there's no way for it to have side effects, so get rid of it
    522535                // to clean up generated code.
    523                 if ( InitTweak::isInstrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {
     536                if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {
    524537                        delete ctorInit->get_ctor();
    525538                        ctorInit->set_ctor( NULL );
    526539                }
    527                 if ( InitTweak::isInstrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {
     540
     541                // xxx - todo
     542                // if ( InitTweak::isIntrinsicCallStmt( ctorInit->get_ctor() ) ) {
     543                //      // can reduce the constructor down to a SingleInit using the
     544                //      // second argument from the ctor call
     545                // }
     546
     547                if ( InitTweak::isIntrinsicSingleArgCallStmt( ctorInit->get_dtor() ) ) {
    528548                        delete ctorInit->get_dtor();
    529549                        ctorInit->set_dtor( NULL );
    530550                }
    531         }
    532 
    533         void Resolver::visit( ImplicitCtorDtorStmt * impCtorDtorStmt ) {
    534                 // before resolving ctor/dtor, need to remove type qualifiers from the first argument (the object being constructed).
    535                 // Do this through a cast expression to greatly simplify the code.
    536                 Expression * callExpr = InitTweak::getCtorDtorCall( impCtorDtorStmt );
    537                 assert( callExpr );
    538                 Expression *& constructee = InitTweak::getCallArg( callExpr, 0 );
    539                 Type * type = 0;
    540 
    541                 // need to find the type of the first argument, which is unfortunately not uniform since array construction
    542                 // includes an untyped '+' expression.
    543                 if ( UntypedExpr * plusExpr = dynamic_cast< UntypedExpr * >( constructee ) ) {
    544                         // constructee is <array>+<index>
    545                         // get Variable <array>, then get the base type of the VariableExpr - this is the type that needs to be fixed
    546                         Expression * arr = InitTweak::getCallArg( plusExpr, 0 );
    547                         assert( dynamic_cast< VariableExpr * >( arr ) || dynamic_cast< MemberExpr *>( arr ) );
    548                         assert( arr && arr->get_results().size() == 1 );
    549                         type = arr->get_results().front()->clone();
    550                 } else {
    551                         // otherwise, constructing a plain object, which means the object's address is being taken.
    552                         // Need to get the type of the VariableExpr object, because the AddressExpr is rebuilt and uses the
    553                         // type of the VariableExpr to do so.
    554                         assert( constructee->get_results().size() == 1 );
    555                         AddressExpr * addrExpr = dynamic_cast< AddressExpr * > ( constructee );
    556                         assert( addrExpr && addrExpr->get_results().size() == 1 );
    557                         type = addrExpr->get_results().front()->clone();
    558                 }
    559                 // cast to T* with qualifiers removed.
    560                 // unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument
    561                 // must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever
    562                 // remove lvalue as a qualifier, this can change to
    563                 //   type->get_qualifiers() = Type::Qualifiers();
    564                 Type * base = InitTweak::getPointerBase( type );
    565                 assert( base );
    566                 base->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, true);
    567                 // if pointer has lvalue qualifier, cast won't appear in output
    568                 type->set_isLvalue( false );
    569                 constructee = new CastExpr( constructee, type );
    570 
    571                 // finally, resolve the ctor/dtor
    572                 impCtorDtorStmt->get_callStmt()->accept( *this );
    573551        }
    574552} // namespace ResolvExpr
  • src/SymTab/AddVisit.h

    r950f7a7 r7527e63  
    1010// Created On       : Sun May 17 16:14:32 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:46:33 2016
    13 // Update Count     : 6
     12// Last Modified On : Thu Aug  4 11:22:01 2016
     13// Update Count     : 9
    1414//
    1515
     
    3333        template< typename Visitor >
    3434        inline void addVisit(SwitchStmt *switchStmt, Visitor &visitor) {
    35                 addVisitStatementList( switchStmt->get_branches(), visitor );
     35                addVisitStatementList( switchStmt->get_statements(), visitor );
    3636                maybeAccept( switchStmt->get_condition(), visitor );
    3737        }
  • src/SymTab/Autogen.cc

    r950f7a7 r7527e63  
    2626
    2727namespace SymTab {
     28        Type * SizeType = 0;
     29
    2830        class AutogenerateRoutines : public Visitor {
    2931                public:
     
    5961        bool isUnnamedBitfield( ObjectDecl * obj ) {
    6062                return obj != NULL && obj->get_name() == "" && obj->get_bitfieldWidth() != NULL;
    61         }
    62 
    63         template< typename OutputIterator >
    64         void makeScalarFunction( Expression *src, ObjectDecl *dstParam, DeclarationWithType *member, std::string fname, OutputIterator out ) {
    65                 ObjectDecl *obj = dynamic_cast<ObjectDecl *>( member );
    66                 // unnamed bit fields are not copied as they cannot be accessed
    67                 if ( isUnnamedBitfield( obj ) ) return;
    68 
    69                 // want to be able to generate assignment, ctor, and dtor generically,
    70                 // so fname is either ?=?, ?{}, or ^?{}
    71                 UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );
    72 
    73                 UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
    74                 derefExpr->get_args().push_back( new VariableExpr( dstParam ) );
    75 
    76                 // do something special for unnamed members
    77                 Expression *dstselect = new AddressExpr( new MemberExpr( member, derefExpr ) );
    78                 fExpr->get_args().push_back( dstselect );
    79 
    80                 if ( src ) {
    81                         fExpr->get_args().push_back( src );
    82                 }
    83 
    84                 Statement * callStmt = new ExprStmt( noLabels, fExpr );
    85                 if ( (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) ) ) {
    86                         // implicitly generated ctor/dtor calls should be wrapped
    87                         // so that later passes are aware they were generated.
    88                         // xxx - don't mark as an implicit ctor/dtor if obj is a bitfield,
    89                         // because this causes the address to be taken at codegen, which is illegal in C.
    90                         callStmt = new ImplicitCtorDtorStmt( callStmt );
    91                 }
    92                 *out++ = callStmt;
    9363        }
    9464
     
    203173        }
    204174
    205         void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric, bool forward = true ) {
    206                 if ( isGeneric ) {
    207                         // rewrite member type in terms of the type variables on this operator
    208                         field = field->clone();
    209                         genericSubs.apply( field );
    210 
    211                         if ( src ) {
    212                                 genericSubs.apply( src );
    213                         }
    214                 }
     175        void makeStructMemberOp( ObjectDecl * dstParam, Expression * src, DeclarationWithType * field, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) {
     176//              if ( isDynamicLayout && src ) {
     177//                      genericSubs.apply( src );
     178//              }
    215179
    216180                ObjectDecl * returnVal = NULL;
     
    219183                }
    220184
     185                InitTweak::InitExpander srcParam( src );
     186
    221187                // assign to destination (and return value if generic)
    222                 if ( ArrayType *array = dynamic_cast< ArrayType * >( field->get_type() ) ) {
    223                         UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
    224                         derefExpr->get_args().push_back( new VariableExpr( dstParam ) );
    225                         Expression *dstselect = new MemberExpr( field, derefExpr );
    226 
    227                         makeArrayFunction( src, dstselect, array, func->get_name(), back_inserter( func->get_statements()->get_kids() ), forward );
    228                         if ( isGeneric && returnVal ) {
    229                                 UntypedExpr *derefRet = new UntypedExpr( new NameExpr( "*?" ) );
    230                                 derefRet->get_args().push_back( new VariableExpr( returnVal ) );
    231                                 Expression *retselect = new MemberExpr( field, derefRet );
    232 
    233                                 makeArrayFunction( src, retselect, array, func->get_name(), back_inserter( func->get_statements()->get_kids() ), forward );
    234                         }
    235                 } else {
    236                         makeScalarFunction( src, dstParam, field, func->get_name(), back_inserter( func->get_statements()->get_kids() ) );
    237                         if ( isGeneric && returnVal ) makeScalarFunction( src, returnVal, field, func->get_name(), back_inserter( func->get_statements()->get_kids() ) );
     188                UntypedExpr *derefExpr = new UntypedExpr( new NameExpr( "*?" ) );
     189                derefExpr->get_args().push_back( new VariableExpr( dstParam ) );
     190                Expression *dstselect = new MemberExpr( field, derefExpr );
     191                genImplicitCall( srcParam, dstselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward );
     192
     193                if ( isDynamicLayout && returnVal ) {
     194                        UntypedExpr *derefRet = new UntypedExpr( new NameExpr( "*?" ) );
     195                        derefRet->get_args().push_back( new VariableExpr( returnVal ) );
     196                        Expression *retselect = new MemberExpr( field, derefRet );
     197                        genImplicitCall( srcParam, retselect, func->get_name(), back_inserter( func->get_statements()->get_kids() ), field, forward );
    238198                } // if
    239199        }
    240200
    241201        template<typename Iterator>
    242         void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric, bool forward = true ) {
     202        void makeStructFunctionBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout, bool forward = true ) {
    243203                for ( ; member != end; ++member ) {
    244204                        if ( DeclarationWithType *field = dynamic_cast< DeclarationWithType * >( *member ) ) { // otherwise some form of type declaration, e.g. Aggregate
     
    276236
    277237                                Expression *srcselect = srcParam ? new MemberExpr( field, new VariableExpr( srcParam ) ) : NULL;
    278                                 makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isGeneric, forward );
     238                                makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout, forward );
    279239                        } // if
    280240                } // for
     
    284244        /// void ?{}(A *, int) and void?{}(A *, int, int) for a struct A which has two int fields.
    285245        template<typename Iterator>
    286         void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isGeneric ) {
     246        void makeStructFieldCtorBody( Iterator member, Iterator end, FunctionDecl * func, TypeSubstitution & genericSubs, bool isDynamicLayout ) {
    287247                FunctionType * ftype = func->get_functionType();
    288248                std::list<DeclarationWithType*> & params = ftype->get_parameters();
     
    310270                                        // matching parameter, initialize field with copy ctor
    311271                                        Expression *srcselect = new VariableExpr(*parameter);
    312                                         makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isGeneric );
     272                                        makeStructMemberOp( dstParam, srcselect, field, func, genericSubs, isDynamicLayout );
    313273                                        ++parameter;
    314274                                } else {
    315275                                        // no matching parameter, initialize field with default ctor
    316                                         makeStructMemberOp( dstParam, NULL, field, func, genericSubs, isGeneric );
     276                                        makeStructMemberOp( dstParam, NULL, field, func, genericSubs, isDynamicLayout );
    317277                                }
    318278                        }
     
    324284
    325285                // Make function polymorphic in same parameters as generic struct, if applicable
    326                 bool isGeneric = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)
     286                bool isDynamicLayout = false;  // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for union)
    327287                std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters();
    328288                std::list< Expression* > structParams;  // List of matching parameters to put on types
    329289                TypeSubstitution genericSubs; // Substitutions to make to member types of struct
    330290                for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) {
    331                         isGeneric = true;
     291                        if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true;
    332292                        TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() );
    333293                        assignType->get_forall().push_back( typeParam );
     
    389349                        FunctionDecl * ctor = new FunctionDecl( "?{}", functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, memCtorType->clone(), new CompoundStmt( noLabels ), true, false );
    390350                        ctor->fixUniqueId();
    391                         makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, isGeneric );
     351                        makeStructFieldCtorBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctor, genericSubs, isDynamicLayout );
    392352                        memCtors.push_back( ctor );
    393353                }
     
    395355
    396356                // generate appropriate calls to member ctor, assignment
    397                 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, isGeneric );
    398                 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, isGeneric );
    399                 makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, isGeneric );
     357                makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), assignDecl, genericSubs, isDynamicLayout );
     358                makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), ctorDecl, genericSubs, isDynamicLayout );
     359                makeStructFunctionBody( aggregateDecl->get_members().begin(), aggregateDecl->get_members().end(), copyCtorDecl, genericSubs, isDynamicLayout );
    400360                // needs to do everything in reverse, so pass "forward" as false
    401                 makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, isGeneric, false );
    402 
    403                 if ( ! isGeneric ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
     361                makeStructFunctionBody( aggregateDecl->get_members().rbegin(), aggregateDecl->get_members().rend(), dtorDecl, genericSubs, isDynamicLayout, false );
     362
     363                if ( ! isDynamicLayout ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
    404364
    405365                declsToAdd.push_back( assignDecl );
     
    414374
    415375                // Make function polymorphic in same parameters as generic union, if applicable
    416                 bool isGeneric = false; // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct)
     376                bool isDynamicLayout = false; // NOTE this flag is an incredibly ugly kludge; we should fix the assignment signature instead (ditto for struct)
    417377                std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters();
    418378                std::list< Expression* > unionParams;  // List of matching parameters to put on types
    419379                for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) {
    420                         isGeneric = true;
     380                        if ( (*param)->get_kind() == TypeDecl::Any ) isDynamicLayout = true;
    421381                        TypeDecl *typeParam = cloneAndRename( *param, "_autoassign_" + aggregateDecl->get_name() + "_" + (*param)->get_name() );
    422382                        assignType->get_forall().push_back( typeParam );
     
    454414
    455415                makeUnionFieldsAssignment( srcParam, dstParam, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
    456                 if ( isGeneric ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
    457 
    458                 if ( ! isGeneric ) assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
     416                if ( isDynamicLayout ) makeUnionFieldsAssignment( srcParam, returnVal, cloneWithParams( refType, unionParams ), back_inserter( assignDecl->get_statements()->get_kids() ) );
     417                else assignDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
    459418
    460419                // body of assignment and copy ctor is the same
  • src/SymTab/Autogen.h

    r950f7a7 r7527e63  
    2222#include "SynTree/Declaration.h"
    2323#include "SynTree/Initializer.h"
     24#include "InitTweak/InitTweak.h"
    2425
    2526namespace SymTab {
    26   /// Generates assignment operators, constructors, and destructor for aggregate types as required
    27   void autogenerateRoutines( std::list< Declaration * > &translationUnit );
     27        /// Generates assignment operators, constructors, and destructor for aggregate types as required
     28        void autogenerateRoutines( std::list< Declaration * > &translationUnit );
    2829
    29   // originally makeArrayAssignment - changed to Function because it is now used for ctors and dtors as well
    30   // admittedly not a great name change. This used to live in Validate.cc, but has been moved so it can be reused elsewhere
     30        /// returns true if obj's name is the empty string and it has a bitfield width
     31        bool isUnnamedBitfield( ObjectDecl * obj );
    3132
    32   /// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments.
    33   /// If forward is true, loop goes from 0 to N-1, else N-1 to 0
    34   template< typename OutputIterator >
    35   void makeArrayFunction( Expression *srcParam, Expression *dstParam, ArrayType *array, std::string fname, OutputIterator out, bool forward = true ) {
    36     static UniqueName indexName( "_index" );
     33        /// size_t type - set when size_t typedef is seen. Useful in a few places,
     34        /// such as in determining array dimension type
     35        extern Type * SizeType;
    3736
    38     // for a flexible array member nothing is done -- user must define own assignment
    39     if ( ! array->get_dimension() ) return;
     37        /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls.
     38        template< typename OutputIterator >
     39        Statement * genCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false, bool forward = true );
    4040
    41     Expression * begin, * end, * update, * cmp;
    42     if ( forward ) {
    43       // generate: for ( int i = 0; i < 0; ++i )
    44       begin = new NameExpr( "0" );
    45       end = array->get_dimension()->clone();
    46       cmp = new NameExpr( "?<?" );
    47       update = new NameExpr( "++?" );
    48     } else {
    49       // generate: for ( int i = N-1; i >= 0; --i )
    50       begin = new UntypedExpr( new NameExpr( "?-?" ) );
    51       ((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() );
    52       ((UntypedExpr*)begin)->get_args().push_back( new NameExpr( "1" ) );
    53       end = new NameExpr( "0" );
    54       cmp = new NameExpr( "?>=?" );
    55       update = new NameExpr( "--?" );
    56     }
     41        /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Should only be called with non-array types.
     42        /// optionally returns a statement which must be inserted prior to the containing loop, if there is one
     43        template< typename OutputIterator >
     44        Statement * genScalarCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false ) {
     45                // want to be able to generate assignment, ctor, and dtor generically,
     46                // so fname is either ?=?, ?{}, or ^?{}
     47                UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );
    5748
    58     ObjectDecl *index = new ObjectDecl( indexName.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), NULL );
     49                // do something special for unnamed members
     50                dstParam = new AddressExpr( dstParam );
     51                if ( addCast ) {
     52                        // cast to T* with qualifiers removed, so that qualified objects can be constructed
     53                        // and destructed with the same functions as non-qualified objects.
     54                        // unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument
     55                        // must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever
     56                        // remove lvalue as a qualifier, this can change to
     57                        //   type->get_qualifiers() = Type::Qualifiers();
     58                        assert( type );
     59                        Type * castType = type->clone();
     60                        castType->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, true);
     61                        castType->set_isLvalue( true ); // xxx - might not need this
     62                        dstParam = new CastExpr( dstParam, new PointerType( Type::Qualifiers(), castType ) );
     63                }
     64                fExpr->get_args().push_back( dstParam );
    5965
    60     UntypedExpr *init = new UntypedExpr( new NameExpr( "?=?" ) );
    61     init->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
    62     init->get_args().push_back( begin );
    63     index->set_init( new SingleInit( init, std::list<Expression*>() ) );
     66                Statement * listInit = srcParam.buildListInit( fExpr );
    6467
    65     UntypedExpr *cond = new UntypedExpr( cmp );
    66     cond->get_args().push_back( new VariableExpr( index ) );
    67     cond->get_args().push_back( end );
     68                std::list< Expression * > args = *++srcParam;
     69                fExpr->get_args().splice( fExpr->get_args().end(), args );
    6870
    69     UntypedExpr *inc = new UntypedExpr( update );
    70     inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
     71                *out++ = new ExprStmt( noLabels, fExpr );
    7172
    72     // want to be able to generate assignment, ctor, and dtor generically,
    73     // so fname is either ?=?, ?{}, or ^?{}
    74     UntypedExpr *fExpr = new UntypedExpr( new NameExpr( fname ) );
     73                srcParam.clearArrayIndices();
    7574
    76     UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?+?" ) );
    77     dstIndex->get_args().push_back( dstParam );
    78     dstIndex->get_args().push_back( new VariableExpr( index ) );
    79     fExpr->get_args().push_back( dstIndex );
     75                return listInit;
     76        }
    8077
    81     // srcParam is NULL for default ctor/dtor
    82     if ( srcParam ) {
    83       UntypedExpr *srcIndex = new UntypedExpr( new NameExpr( "?[?]" ) );
    84       srcIndex->get_args().push_back( srcParam );
    85       srcIndex->get_args().push_back( new VariableExpr( index ) );
    86       fExpr->get_args().push_back( srcIndex );
    87     }
     78        /// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments.
     79        /// If forward is true, loop goes from 0 to N-1, else N-1 to 0
     80        template< typename OutputIterator >
     81        void genArrayCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, ArrayType *array, bool addCast = false, bool forward = true ) {
     82                static UniqueName indexName( "_index" );
    8883
    89     std::list<Statement *> initList;
    90     CompoundStmt * block = new CompoundStmt( noLabels );
    91     block->get_kids().push_back( new DeclStmt( noLabels, index ) );
    92     block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, new ExprStmt( noLabels, fExpr ) ) );
     84                // for a flexible array member nothing is done -- user must define own assignment
     85                if ( ! array->get_dimension() ) return ;
    9386
    94     Statement * stmt = block;
    95     if ( fname == "?{}" || fname == "^?{}" ) {
    96       // implicitly generated ctor/dtor calls should be wrapped
    97       // so that later passes are aware they were generated
    98       stmt = new ImplicitCtorDtorStmt( stmt );
    99     }
    100     *out++ = stmt;
    101   }
     87                Expression * begin, * end, * update, * cmp;
     88                if ( forward ) {
     89                        // generate: for ( int i = 0; i < 0; ++i )
     90                        begin = new NameExpr( "0" );
     91                        end = array->get_dimension()->clone();
     92                        cmp = new NameExpr( "?<?" );
     93                        update = new NameExpr( "++?" );
     94                } else {
     95                        // generate: for ( int i = N-1; i >= 0; --i )
     96                        begin = new UntypedExpr( new NameExpr( "?-?" ) );
     97                        ((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() );
     98                        ((UntypedExpr*)begin)->get_args().push_back( new NameExpr( "1" ) );
     99                        end = new NameExpr( "0" );
     100                        cmp = new NameExpr( "?>=?" );
     101                        update = new NameExpr( "--?" );
     102                }
     103
     104                ObjectDecl *index = new ObjectDecl( indexName.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), NULL );
     105
     106                UntypedExpr *init = new UntypedExpr( new NameExpr( "?=?" ) );
     107                init->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
     108                init->get_args().push_back( begin );
     109                index->set_init( new SingleInit( init, std::list<Expression*>() ) );
     110
     111                UntypedExpr *cond = new UntypedExpr( cmp );
     112                cond->get_args().push_back( new VariableExpr( index ) );
     113                cond->get_args().push_back( end );
     114
     115                UntypedExpr *inc = new UntypedExpr( update );
     116                inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) );
     117
     118                UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?[?]" ) );
     119                dstIndex->get_args().push_back( dstParam );
     120                dstIndex->get_args().push_back( new VariableExpr( index ) );
     121                dstParam = dstIndex;
     122
     123                // srcParam must keep track of the array indices to build the
     124                // source parameter and/or array list initializer
     125                srcParam.addArrayIndex( new VariableExpr( index ), array->get_dimension()->clone() );
     126
     127                // for stmt's body, eventually containing call
     128                CompoundStmt * body = new CompoundStmt( noLabels );
     129                Statement * listInit = genCall( srcParam, dstParam, fname, back_inserter( body->get_kids() ), array->get_base(), addCast, forward );
     130
     131                // block containing for stmt and index variable
     132                std::list<Statement *> initList;
     133                CompoundStmt * block = new CompoundStmt( noLabels );
     134                block->get_kids().push_back( new DeclStmt( noLabels, index ) );
     135                if ( listInit ) block->get_kids().push_back( listInit );
     136                block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, body ) );
     137
     138                *out++ = block;
     139        }
     140
     141        template< typename OutputIterator >
     142        Statement * genCall( InitTweak::InitExpander &  srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast, bool forward ) {
     143                if ( ArrayType * at = dynamic_cast< ArrayType * >( type ) ) {
     144                        genArrayCall( srcParam, dstParam, fname, out, at, addCast, forward );
     145                        return 0;
     146                } else {
     147                        return genScalarCall( srcParam, dstParam, fname, out, type, addCast );
     148                }
     149        }
     150
     151        /// inserts into out a generated call expression to function fname with arguments dstParam
     152        /// and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls. decl is the
     153        /// object being constructed. The function wraps constructor and destructor calls in an
     154        /// ImplicitCtorDtorStmt node.
     155        template< typename OutputIterator >
     156        void genImplicitCall( InitTweak::InitExpander &  srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, DeclarationWithType * decl, bool forward = true ) {
     157                ObjectDecl *obj = dynamic_cast<ObjectDecl *>( decl );
     158                assert( obj );
     159                // unnamed bit fields are not copied as they cannot be accessed
     160                if ( isUnnamedBitfield( obj ) ) return;
     161
     162                bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) );
     163                std::list< Statement * > stmts;
     164                genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->get_type(), addCast, forward );
     165
     166                // currently genCall should produce at most one element, but if that changes then the next line needs to be updated to grab the statement which contains the call
     167                assert( stmts.size() <= 1 );
     168                if ( stmts.size() == 1 ) {
     169                        Statement * callStmt = stmts.front();
     170                        if ( addCast ) {
     171                                // implicitly generated ctor/dtor calls should be wrapped
     172                                // so that later passes are aware they were generated.
     173                                // xxx - don't mark as an implicit ctor/dtor if obj is a bitfield,
     174                                // because this causes the address to be taken at codegen, which is illegal in C.
     175                                callStmt = new ImplicitCtorDtorStmt( callStmt );
     176                        }
     177                        *out++ = callStmt;
     178                }
     179        }
    102180} // namespace SymTab
    103181#endif // AUTOGEN_H
  • src/SymTab/FixFunction.cc

    r950f7a7 r7527e63  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // FixFunction.cc -- 
     7// FixFunction.cc --
    88//
    99// Author           : Richard C. Bilson
     
    4444
    4545        Type * FixFunction::mutate(ArrayType *arrayType) {
    46                 PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), maybeClone( arrayType->get_base()->clone() ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() );
     46                // need to recursively mutate the base type in order for multi-dimensional arrays to work.
     47                PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->get_base()->clone()->acceptMutator( *this ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() );
    4748                delete arrayType;
    4849                return pointerType;
  • src/SymTab/Validate.cc

    r950f7a7 r7527e63  
    174174
    175175                virtual void visit( FunctionDecl *funcDecl );
    176 };
     176        };
    177177
    178178        class CompoundLiteral : public GenPoly::DeclMutator {
     
    191191                EliminateTypedef::eliminateTypedef( translationUnit );
    192192                HoistStruct::hoistStruct( translationUnit );
     193                autogenerateRoutines( translationUnit ); // moved up, used to be below compoundLiteral - currently needs Pass1
    193194                acceptAll( translationUnit, pass1 );
    194195                acceptAll( translationUnit, pass2 );
    195196                ReturnChecker::checkFunctionReturns( translationUnit );
    196                 mutateAll( translationUnit, compoundliteral );
    197                 autogenerateRoutines( translationUnit );
     197                compoundliteral.mutateDeclarationList( translationUnit );
    198198                acceptAll( translationUnit, pass3 );
    199199                VerifyCtorDtor::verify( translationUnit );
     
    490490                EliminateTypedef eliminator;
    491491                mutateAll( translationUnit, eliminator );
     492                if ( eliminator.typedefNames.count( "size_t" ) ) {
     493                        // grab and remember declaration of size_t
     494                        SizeType = eliminator.typedefNames["size_t"].first->get_base()->clone();
     495                } else {
     496                        // xxx - missing global typedef for size_t - default to long unsigned int, even though that may be wrong
     497                        // eventually should have a warning for this case.
     498                        SizeType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     499                }
    492500                filter( translationUnit, isTypedef, true );
     501
    493502        }
    494503
     
    518527        Declaration *EliminateTypedef::mutate( TypedefDecl * tyDecl ) {
    519528                Declaration *ret = Mutator::mutate( tyDecl );
     529
    520530                if ( typedefNames.count( tyDecl->get_name() ) == 1 && typedefNames[ tyDecl->get_name() ].second == scopeLevel ) {
    521531                        // typedef to the same name from the same scope
     
    541551                if ( StructInstType *aggDecl = dynamic_cast< StructInstType * >( tyDecl->get_base() ) ) {
    542552                        return new StructDecl( aggDecl->get_name() );
    543 //                      return aggDecl->get_baseStruct();
    544553                } else if ( UnionInstType *aggDecl = dynamic_cast< UnionInstType * >( tyDecl->get_base() ) ) {
    545554                        return new UnionDecl( aggDecl->get_name() );
     555                } else if ( EnumInstType *enumDecl = dynamic_cast< EnumInstType * >( tyDecl->get_base() ) ) {
     556                        return new EnumDecl( enumDecl->get_name() );
    546557                } else {
    547558                        return ret;
  • src/SynTree/AddStmtVisitor.cc

    r950f7a7 r7527e63  
    1010// Created On       : Wed Jun 22 12:11:17 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:49:59 2016
    13 // Update Count     : 12
     12// Last Modified On : Thu Aug  4 11:23:47 2016
     13// Update Count     : 16
    1414//
    1515
     
    7171
    7272void AddStmtVisitor::visit(SwitchStmt *switchStmt) {
    73         visitStatementList( switchStmt->get_branches() );
     73        visitStatementList( switchStmt->get_statements() );
    7474        maybeAccept( switchStmt->get_condition(), *this );
    7575}
  • src/SynTree/Declaration.cc

    r950f7a7 r7527e63  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Declaration.cc -- 
     7// Declaration.cc --
    88//
    99// Author           : Richard C. Bilson
     
    2020#include "Initializer.h"
    2121#include "Type.h"
     22#include "Attribute.h"
    2223#include "Common/utility.h"
    2324
  • src/SynTree/Declaration.h

    r950f7a7 r7527e63  
    6464class DeclarationWithType : public Declaration {
    6565  public:
    66         DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage );
     66        DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes );
    6767        DeclarationWithType( const DeclarationWithType &other );
    6868        virtual ~DeclarationWithType();
     
    7575        int get_scopeLevel() const { return scopeLevel; }
    7676        void set_scopeLevel( int newValue ) { scopeLevel = newValue; }
     77
     78        std::list< Attribute * >& get_attributes() { return attributes; }
     79        const std::list< Attribute * >& get_attributes() const { return attributes; }
    7780
    7881        virtual DeclarationWithType *clone() const = 0;
     
    8790        // shadowed identifiers can be accessed
    8891        int scopeLevel = 0;
     92
     93        std::list< Attribute * > attributes;
    8994};
    9095
     
    9297        typedef DeclarationWithType Parent;
    9398  public:
    94         ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline = false, bool isNoreturn = false );
     99        ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes = std::list< Attribute * >(), bool isInline = false, bool isNoreturn = false );
    95100        ObjectDecl( const ObjectDecl &other );
    96101        virtual ~ObjectDecl();
     
    131136        std::list< std::string >& get_oldIdents() { return oldIdents; }
    132137        std::list< Declaration* >& get_oldDecls() { return oldDecls; }
    133         std::list< Attribute * >& get_attributes() { return attributes; }
    134138
    135139        virtual FunctionDecl *clone() const { return new FunctionDecl( *this ); }
     
    143147        std::list< std::string > oldIdents;
    144148        std::list< Declaration* > oldDecls;
    145         std::list< Attribute * > attributes;
    146149};
    147150
  • src/SynTree/DeclarationWithType.cc

    r950f7a7 r7527e63  
    1616#include "Declaration.h"
    1717#include "Type.h"
     18#include "Attribute.h"
    1819#include "Common/utility.h"
    1920
    20 DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage )
    21                 : Declaration( name, sc, linkage ) {
     21DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, const std::list< Attribute * > & attributes )
     22                : Declaration( name, sc, linkage ), attributes( attributes ) {
    2223}
    2324
    2425DeclarationWithType::DeclarationWithType( const DeclarationWithType &other )
    2526                : Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ) {
     27        cloneAll( other.attributes, attributes );
    2628}
    2729
    2830DeclarationWithType::~DeclarationWithType() {
     31        deleteAll( attributes );
    2932}
    3033
  • src/SynTree/Expression.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun 13 16:03:39 2016
    13 // Update Count     : 42
     12// Last Modified On : Fri Aug  5 14:23:56 2016
     13// Update Count     : 49
    1414//
    1515
     
    344344}
    345345
     346//// is this right? It's cloning the member, but the member is a declaration so probably shouldn't be cloned...
    346347MemberExpr::MemberExpr( const MemberExpr &other ) :
    347                 Expression( other ), member( maybeClone( other.member ) ), aggregate( maybeClone( other.aggregate ) ) {
     348                Expression( other ), member( other.member ), aggregate( maybeClone( other.aggregate ) ) {
    348349}
    349350
    350351MemberExpr::~MemberExpr() {
    351         delete member;
     352        // delete member;
    352353        delete aggregate;
    353354}
     
    528529}
    529530
     531RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {}
     532RangeExpr::RangeExpr( const RangeExpr &other ) : low( other.low->clone() ), high( other.high->clone() ) {}
     533void RangeExpr::print( std::ostream &os, int indent ) const {
     534        os << std::string( indent, ' ' ) << "Range Expression: ";
     535        low->print( os, indent );
     536        os << " ... ";
     537        high->print( os, indent );
     538}
    530539
    531540std::ostream & operator<<( std::ostream & out, Expression * expr ) {
  • src/SynTree/Expression.h

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jul  4 14:45:32 2016
    13 // Update Count     : 23
     12// Last Modified On : Sat Aug  6 08:52:53 2016
     13// Update Count     : 35
    1414//
    1515
     
    1818
    1919#include <map>
     20#include <memory>
    2021#include "SynTree.h"
    2122#include "Visitor.h"
     
    2728class Expression {
    2829  public:
    29         Expression(Expression *_aname = 0 );
     30        Expression( Expression *_aname = nullptr );
    3031        Expression( const Expression &other );
    3132        virtual ~Expression();
     
    6970typedef std::map< UniqueId, ParamEntry > InferredParams;
    7071
    71 /// ApplicationExpr represents the application of a function to a set of parameters.  This is the
    72 /// result of running an UntypedExpr through the expression analyzer.
     72/// ApplicationExpr represents the application of a function to a set of parameters.  This is the result of running an
     73/// UntypedExpr through the expression analyzer.
    7374class ApplicationExpr : public Expression {
    7475  public:
     
    9293};
    9394
    94 /// UntypedExpr represents the application of a function to a set of parameters, but where the
    95 /// particular overload for the function name has not yet been determined.  Most operators are
    96 /// converted into functional form automatically, to permit operator overloading.
     95/// UntypedExpr represents the application of a function to a set of parameters, but where the particular overload for
     96/// the function name has not yet been determined.  Most operators are converted into functional form automatically, to
     97/// permit operator overloading.
    9798class UntypedExpr : public Expression {
    9899  public:
    99         UntypedExpr( Expression *function, Expression *_aname = 0 );
     100        UntypedExpr( Expression *function, Expression *_aname = nullptr );
    100101        UntypedExpr( const UntypedExpr &other );
    101         UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = 0 );
     102        UntypedExpr( Expression *function, std::list<Expression *> &args, Expression *_aname = nullptr );
    102103        virtual ~UntypedExpr();
    103104
     
    123124class NameExpr : public Expression {
    124125  public:
    125         NameExpr( std::string name, Expression *_aname = 0 );
     126        NameExpr( std::string name, Expression *_aname = nullptr );
    126127        NameExpr( const NameExpr &other );
    127128        virtual ~NameExpr();
     
    144145class AddressExpr : public Expression {
    145146  public:
    146         AddressExpr( Expression *arg, Expression *_aname = 0 );
     147        AddressExpr( Expression *arg, Expression *_aname = nullptr );
    147148        AddressExpr( const AddressExpr &other );
    148149        virtual ~AddressExpr();
     
    180181class CastExpr : public Expression {
    181182  public:
    182         CastExpr( Expression *arg, Expression *_aname = 0 );
    183         CastExpr( Expression *arg, Type *toType, Expression *_aname = 0 );
     183        CastExpr( Expression *arg, Expression *_aname = nullptr );
     184        CastExpr( Expression *arg, Type *toType, Expression *_aname = nullptr );
    184185        CastExpr( const CastExpr &other );
    185186        virtual ~CastExpr();
     
    199200class UntypedMemberExpr : public Expression {
    200201  public:
    201         UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = 0 );
     202        UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = nullptr );
    202203        UntypedMemberExpr( const UntypedMemberExpr &other );
    203204        virtual ~UntypedMemberExpr();
     
    220221class MemberExpr : public Expression {
    221222  public:
    222         MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = 0 );
     223        MemberExpr( DeclarationWithType *member, Expression *aggregate, Expression *_aname = nullptr );
    223224        MemberExpr( const MemberExpr &other );
    224225        virtual ~MemberExpr();
     
    241242class VariableExpr : public Expression {
    242243  public:
    243         VariableExpr( DeclarationWithType *var, Expression *_aname = 0 );
     244        VariableExpr( DeclarationWithType *var, Expression *_aname = nullptr );
    244245        VariableExpr( const VariableExpr &other );
    245246        virtual ~VariableExpr();
     
    259260class ConstantExpr : public Expression {
    260261  public:
    261         ConstantExpr( Constant constant, Expression *_aname = 0 );
     262        ConstantExpr( Constant constant, Expression *_aname = nullptr );
    262263        ConstantExpr( const ConstantExpr &other );
    263264        virtual ~ConstantExpr();
     
    277278class SizeofExpr : public Expression {
    278279  public:
    279         SizeofExpr( Expression *expr, Expression *_aname = 0 );
     280        SizeofExpr( Expression *expr, Expression *_aname = nullptr );
    280281        SizeofExpr( const SizeofExpr &other );
    281         SizeofExpr( Type *type, Expression *_aname = 0 );
     282        SizeofExpr( Type *type, Expression *_aname = nullptr );
    282283        virtual ~SizeofExpr();
    283284
     
    302303class AlignofExpr : public Expression {
    303304  public:
    304         AlignofExpr( Expression *expr, Expression *_aname = 0 );
     305        AlignofExpr( Expression *expr, Expression *_aname = nullptr );
    305306        AlignofExpr( const AlignofExpr &other );
    306         AlignofExpr( Type *type, Expression *_aname = 0 );
     307        AlignofExpr( Type *type, Expression *_aname = nullptr );
    307308        virtual ~AlignofExpr();
    308309
     
    327328class UntypedOffsetofExpr : public Expression {
    328329  public:
    329         UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = 0 );
     330        UntypedOffsetofExpr( Type *type, const std::string &member, Expression *_aname = nullptr );
    330331        UntypedOffsetofExpr( const UntypedOffsetofExpr &other );
    331332        virtual ~UntypedOffsetofExpr();
     
    348349class OffsetofExpr : public Expression {
    349350  public:
    350         OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = 0 );
     351        OffsetofExpr( Type *type, DeclarationWithType *member, Expression *_aname = nullptr );
    351352        OffsetofExpr( const OffsetofExpr &other );
    352353        virtual ~OffsetofExpr();
     
    389390class AttrExpr : public Expression {
    390391  public:
    391         AttrExpr(Expression *attr, Expression *expr, Expression *_aname = 0 );
     392        AttrExpr(Expression *attr, Expression *expr, Expression *_aname = nullptr );
    392393        AttrExpr( const AttrExpr &other );
    393         AttrExpr( Expression *attr, Type *type, Expression *_aname = 0 );
     394        AttrExpr( Expression *attr, Type *type, Expression *_aname = nullptr );
    394395        virtual ~AttrExpr();
    395396
     
    417418class LogicalExpr : public Expression {
    418419  public:
    419         LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = 0 );
     420        LogicalExpr( Expression *arg1, Expression *arg2, bool andp = true, Expression *_aname = nullptr );
    420421        LogicalExpr( const LogicalExpr &other );
    421422        virtual ~LogicalExpr();
     
    440441class ConditionalExpr : public Expression {
    441442  public:
    442         ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = 0 );
     443        ConditionalExpr( Expression *arg1, Expression *arg2, Expression *arg3, Expression *_aname = nullptr );
    443444        ConditionalExpr( const ConditionalExpr &other );
    444445        virtual ~ConditionalExpr();
     
    464465class CommaExpr : public Expression {
    465466  public:
    466         CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = 0 );
     467        CommaExpr( Expression *arg1, Expression *arg2, Expression *_aname = nullptr );
    467468        CommaExpr( const CommaExpr &other );
    468469        virtual ~CommaExpr();
     
    485486class TupleExpr : public Expression {
    486487  public:
    487         TupleExpr( Expression *_aname = 0 );
     488        TupleExpr( Expression *_aname = nullptr );
    488489        TupleExpr( const TupleExpr &other );
    489490        virtual ~TupleExpr();
     
    503504class SolvedTupleExpr : public Expression {
    504505  public:
    505         SolvedTupleExpr( Expression *_aname = 0 ) : Expression( _aname ) {}
    506         SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = 0 );
     506        SolvedTupleExpr( Expression *_aname = nullptr ) : Expression( _aname ) {}
     507        SolvedTupleExpr( std::list<Expression *> &, Expression *_aname = nullptr );
    507508        SolvedTupleExpr( const SolvedTupleExpr &other );
    508509        virtual ~SolvedTupleExpr() {}
     
    597598class UntypedValofExpr : public Expression {
    598599  public:
    599         UntypedValofExpr( Statement *_body, Expression *_aname = 0 ) : Expression( _aname ), body ( _body ) {}
     600        UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {}
    600601        UntypedValofExpr( const UntypedValofExpr & other );
    601602        virtual ~UntypedValofExpr();
     
    632633        Type * type;
    633634        Initializer * initializer;
     635};
     636
     637class RangeExpr : public Expression {
     638  public:
     639        RangeExpr( Expression *low, Expression *high );
     640        RangeExpr( const RangeExpr &other );
     641
     642        Expression * get_low() const { return low; }
     643        Expression * get_high() const { return high; }
     644        RangeExpr * set_low( Expression *low ) { RangeExpr::low = low; return this; }
     645        RangeExpr * set_high( Expression *high ) { RangeExpr::high = high; return this; }
     646
     647        virtual RangeExpr *clone() const { return new RangeExpr( *this ); }
     648        virtual void accept( Visitor &v ) { v.visit( this ); }
     649        virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     650        virtual void print( std::ostream &os, int indent = 0 ) const;
     651  private:
     652        Expression *low, *high;
    634653};
    635654
  • src/SynTree/FunctionDecl.cc

    r950f7a7 r7527e63  
    2323
    2424FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn, std::list< Attribute * > attributes )
    25                 : Parent( name, sc, linkage ), type( type ), statements( statements ), attributes( attributes ) {
     25                : Parent( name, sc, linkage, attributes ), type( type ), statements( statements ) {
    2626        set_isInline( isInline );
    2727        set_isNoreturn( isNoreturn );
     
    3434FunctionDecl::FunctionDecl( const FunctionDecl &other )
    3535        : Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
    36                 cloneAll( other.attributes, attributes );
    3736}
    3837
     
    4039        delete type;
    4140        delete statements;
    42         deleteAll( attributes );
    4341}
    4442
     
    6967        } // if
    7068
    71         printAll( attributes, os, indent );
     69        printAll( get_attributes(), os, indent );
    7270
    7371        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
  • src/SynTree/Initializer.h

    r950f7a7 r7527e63  
    9393        std::list<Initializer*> &get_initializers() { return initializers; }
    9494
    95         std::list<Initializer*>::iterator begin_initializers() { return initializers.begin(); }
    96         std::list<Initializer*>::iterator end_initializers() { return initializers.end(); }
     95        typedef std::list<Initializer*>::iterator iterator;
     96        iterator begin() { return initializers.begin(); }
     97        iterator end() { return initializers.end(); }
    9798
    9899        virtual ListInit *clone() const { return new ListInit( *this ); }
  • src/SynTree/Label.h

    r950f7a7 r7527e63  
    99// Author           : Rob Schluntz
    1010// Created On       : Wed Jun 8 12:53:12 2016
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Wed Jun 8 12:53:28 2016
    13 // Update Count     : 1
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Sun Aug  7 14:44:29 2016
     13// Update Count     : 2
    1414//
    1515
     
    2424class Label {
    2525  public:
    26         Label( const std::string & name = "", Statement * labelled = 0 ) : name( name ), labelled( labelled ) {}
     26        Label( const std::string & name = "", Statement * labelled = 0, const std::list< Attribute * > & attributes = std::list< Attribute * >() ) : name( name ), labelled( labelled ), attributes( attributes ) {}
    2727        Label( const char * name, Statement * labelled = 0 ) : name( name ), labelled( labelled ) {}
    2828
  • src/SynTree/Mutator.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:51:19 2016
    13 // Update Count     : 17
     12// Last Modified On : Thu Aug  4 11:23:21 2016
     13// Update Count     : 19
    1414//
    1515
     
    126126Statement *Mutator::mutate( SwitchStmt *switchStmt ) {
    127127        switchStmt->set_condition( maybeMutate( switchStmt->get_condition(), *this ) );
    128         mutateAll( switchStmt->get_branches(), *this );
     128        mutateAll( switchStmt->get_statements(), *this );
    129129        return switchStmt;
    130130}
     
    349349        compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) );
    350350        return compLitExpr;
     351}
     352
     353Expression *Mutator::mutate( RangeExpr *rangeExpr ) {
     354        rangeExpr->set_low( maybeMutate( rangeExpr->get_low(), *this ) );
     355        rangeExpr->set_high( maybeMutate( rangeExpr->get_high(), *this ) );
     356        return rangeExpr;
    351357}
    352358
  • src/SynTree/Mutator.h

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:51:43 2016
    13 // Update Count     : 11
     12// Last Modified On : Wed Aug  3 16:59:45 2016
     13// Update Count     : 12
    1414//
    1515#include <cassert>
     
    7878        virtual Expression* mutate( UntypedValofExpr *valofExpr );
    7979        virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
     80        virtual Expression* mutate( RangeExpr *rangeExpr );
    8081
    8182        virtual Type* mutate( VoidType *basicType );
  • src/SynTree/ObjectDecl.cc

    r950f7a7 r7527e63  
    1818#include "Initializer.h"
    1919#include "Expression.h"
     20#include "Attribute.h"
    2021#include "Common/utility.h"
    2122#include "Statement.h"
    2223
    23 ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline, bool isNoreturn )
    24         : Parent( name, sc, linkage ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
     24ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, bool isInline, bool isNoreturn )
     25        : Parent( name, sc, linkage, attributes ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
    2526        set_isInline( isInline );
    2627        set_isNoreturn( isNoreturn );
     
    4546                os << LinkageSpec::toString( get_linkage() ) << " ";
    4647        } // if
     48
     49        printAll( get_attributes(), os, indent );
    4750
    4851        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
     
    8083        } // if
    8184
     85        // xxx - should printShort print attributes?
     86
    8287        if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
    8388                os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
  • src/SynTree/Statement.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:52:32 2016
    13 // Update Count     : 55
     12// Last Modified On : Fri Aug 12 13:58:48 2016
     13// Update Count     : 62
    1414//
    1515
     
    143143}
    144144
    145 SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_branches ):
    146         Statement( _labels ), condition( _condition ), branches( _branches ) {
     145SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_statements ):
     146        Statement( _labels ), condition( _condition ), statements( _statements ) {
    147147}
    148148
    149149SwitchStmt::SwitchStmt( const SwitchStmt & other ):
    150150        Statement( other ), condition( maybeClone( other.condition ) ) {
    151         cloneAll( other.branches, branches );
     151        cloneAll( other.statements, statements );
    152152}
    153153
    154154SwitchStmt::~SwitchStmt() {
    155155        delete condition;
    156         // destroy branches
    157 }
    158 
    159 void SwitchStmt::add_case( CaseStmt *c ) {}
     156        // destroy statements
     157}
    160158
    161159void SwitchStmt::print( std::ostream &os, int indent ) const {
     
    164162        os << endl;
    165163
    166         // branches
     164        // statements
    167165        std::list<Statement *>::const_iterator i;
    168         for ( i = branches.begin(); i != branches.end(); i++)
     166        for ( i = statements.begin(); i != statements.end(); i++)
    169167                (*i)->print( os, indent + 4 );
    170168
    171         //for_each( branches.begin(), branches.end(), mem_fun( bind1st(&Statement::print ), os ));
     169        //for_each( statements.begin(), statements.end(), mem_fun( bind1st(&Statement::print ), os ));
    172170}
    173171
     
    187185}
    188186
    189 CaseStmt * CaseStmt::makeDefault( std::list<Label> labels, std::list<Statement *> branches ) {
    190         return new CaseStmt( labels, 0, branches, true );
     187CaseStmt * CaseStmt::makeDefault( std::list<Label> labels, std::list<Statement *> stmts ) {
     188        return new CaseStmt( labels, 0, stmts, true );
    191189}
    192190
     
    311309}
    312310
    313 CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest ) :
    314         Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest ) {
     311CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool catchAny ) :
     312        Statement( labels ), decl ( _decl ), body( _body ), catchRest ( catchAny ) {
    315313}
    316314
  • src/SynTree/Statement.h

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:53:29 2016
    13 // Update Count     : 47
     12// Last Modified On : Fri Aug 12 13:57:46 2016
     13// Update Count     : 65
    1414//
    1515
     
    129129class SwitchStmt : public Statement {
    130130  public:
    131         SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches );
     131        SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &statements );
    132132        SwitchStmt( const SwitchStmt &other );
    133133        virtual ~SwitchStmt();
     
    136136        void set_condition( Expression *newValue ) { condition = newValue; }
    137137
    138         std::list<Statement *> & get_branches() { return branches; }
    139         void add_case( CaseStmt * );
     138        std::list<Statement *> & get_statements() { return statements; }
    140139
    141140        virtual void accept( Visitor &v ) { v.visit( this ); }
     
    146145  private:
    147146        Expression * condition;
    148         std::list<Statement *> branches; // should be list of CaseStmt
     147        std::list<Statement *> statements;
    149148};
    150149
    151150class CaseStmt : public Statement {
    152151  public:
    153         CaseStmt( std::list<Label> labels, Expression *conditions,
    154               std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
     152        CaseStmt( std::list<Label> labels, Expression *conditions, std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
    155153        CaseStmt( const CaseStmt &other );
    156154        virtual ~CaseStmt();
    157155
    158         static CaseStmt * makeDefault( std::list<Label> labels = std::list<Label>(),
    159                 std::list<Statement *> stmts = std::list<Statement *>() );
     156        static CaseStmt * makeDefault( std::list<Label> labels = std::list<Label>(), std::list<Statement *> stmts = std::list<Statement *>() );
    160157
    161158        bool isDefault() const { return _isDefault; }
     
    317314class CatchStmt : public Statement {
    318315  public:
    319         CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false );
     316        CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool catchAny = false );
    320317        CatchStmt( const CatchStmt &other );
    321318        virtual ~CatchStmt();
  • src/SynTree/SynTree.h

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:54:02 2016
    13 // Update Count     : 6
     12// Last Modified On : Wed Aug  3 17:02:34 2016
     13// Update Count     : 7
    1414//
    1515
     
    8383class UntypedValofExpr;
    8484class CompoundLiteralExpr;
     85class RangeExpr;
    8586
    8687class Type;
  • src/SynTree/Visitor.cc

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:54:39 2016
    13 // Update Count     : 19
     12// Last Modified On : Thu Aug  4 11:24:25 2016
     13// Update Count     : 21
    1414//
    1515
     
    109109void Visitor::visit( SwitchStmt *switchStmt ) {
    110110        maybeAccept( switchStmt->get_condition(), *this );
    111         acceptAll( switchStmt->get_branches(), *this );
     111        acceptAll( switchStmt->get_statements(), *this );
    112112}
    113113
     
    296296        maybeAccept( compLitExpr->get_type(), *this );
    297297        maybeAccept( compLitExpr->get_initializer(), *this );
     298}
     299
     300void Visitor::visit( RangeExpr *rangeExpr ) {
     301        maybeAccept( rangeExpr->get_low(), *this );
     302        maybeAccept( rangeExpr->get_high(), *this );
    298303}
    299304
  • src/SynTree/Visitor.h

    r950f7a7 r7527e63  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 17:55:09 2016
    13 // Update Count     : 8
     12// Last Modified On : Wed Aug  3 17:01:50 2016
     13// Update Count     : 9
    1414//
    1515
     
    7878        virtual void visit( UntypedValofExpr *valofExpr );
    7979        virtual void visit( CompoundLiteralExpr *compLitExpr );
     80        virtual void visit( RangeExpr *rangeExpr );
    8081
    8182        virtual void visit( VoidType *basicType );
  • src/driver/cfa.cc

    r950f7a7 r7527e63  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul  7 08:56:01 2016
    13 // Update Count     : 144
     12// Last Modified On : Sat Aug  6 16:14:55 2016
     13// Update Count     : 148
    1414//
    1515
     
    8787        bool cpp_flag = false;                                                          // -E or -M flag, preprocessor only
    8888        bool std_flag = false;                                                          // -std= flag
     89        bool noincstd_flag = false;                                                     // -no-include-stdhdr= flag
    8990        bool debugging __attribute(( unused )) = false;         // -g flag
    9091
     
    144145                        } else if ( arg == "-nohelp" ) {
    145146                                help = false;                                                   // strip the nohelp flag
     147                        } else if ( arg == "-no-include-stdhdr" ) {
     148                                noincstd_flag = true;                                   // strip the no-include-stdhdr flag
    146149                        } else if ( arg == "-compiler" ) {
    147150                                // use the user specified compiler
     
    248251        args[nargs] = "-I" CFA_INCDIR;
    249252        nargs += 1;
    250         args[nargs] = "-I" CFA_INCDIR "/stdhdr";
    251         nargs += 1;
     253        if ( ! noincstd_flag ) {                                                        // do not use during build
     254                args[nargs] = "-I" CFA_INCDIR "/stdhdr";
     255                nargs += 1;
     256        } // if
    252257        args[nargs] = "-I" CFA_INCDIR "/containers";
    253258        nargs += 1;
  • src/examples/gc_no_raii/bug-repro/return_template.c

    r950f7a7 r7527e63  
    55};
    66
     7forall(otype T) void ?{}(wrap(T)* this);
     8forall(otype T) void ?{}(wrap(T)* this, wrap(T)* rhs);
     9forall(otype T) void ^?{}(wrap(T)* this);
     10forall(otype T) void ?=?(wrap(T)* this, wrap(T)* rhs);
     11
    712forall(otype T)
    8 static inline wrap(T) test()
     13wrap(T) test()
    914{
    1015        wrap(T) tester;
  • src/examples/gc_no_raii/src/gc.h

    r950f7a7 r7527e63  
    77static inline gcpointer(T) gcmalloc()
    88{
    9     gcpointer(T) test;
    10     // ctor(&test, gc_allocate(sizeof(T)));
    11     // gc_conditional_collect();
    12     return test;
     9    gcpointer(T) ptr = { gc_allocate(sizeof(T)) };
     10    ptr{};
     11    gc_conditional_collect();
     12    return ptr;
    1313}
     14
     15forall(otype T)
     16static inline void gcmalloc(gcpointer(T)* ptr)
     17{
     18        ptr{ gc_allocate(sizeof(T)) };
     19      (*ptr){};
     20      gc_conditional_collect();
     21}
  • src/examples/gc_no_raii/src/gcpointers.c

    r950f7a7 r7527e63  
    11#include "gcpointers.h"
    22
    3 #include "gc.h"
     3// #include "gc.h"
    44#include "internal/collector.h"
    55#include "internal/object_header.h"
  • src/examples/gc_no_raii/src/gcpointers.h

    r950f7a7 r7527e63  
    1010};
    1111
    12 void gcpointer_ctor(gcpointer_t* this);
    13 void gcpointer_ctor(gcpointer_t* this, void* address);
    14 void gcpointer_ctor(gcpointer_t* this, gcpointer_t* other);
    15 void gcpointer_dtor(gcpointer_t* this);
    16 gcpointer_t* gcpointer_assign(gcpointer_t* this, gcpointer_t* rhs);
     12void ?{}(gcpointer_t* this);
     13void ?{}(gcpointer_t* this, void* address);
     14void ?{}(gcpointer_t* this, gcpointer_t other);
     15void ^?{}(gcpointer_t* this);
     16gcpointer_t* ?=?(gcpointer_t this, gcpointer_t rhs);
    1717
    1818//Logical operators
     
    2727};
    2828
    29 forall(otype T)
    30 static inline void ctor(gcpointer(T)* this)
    31 {
    32         gcpointer_ctor(&this->internal);
    33 }
     29//
     30forall(otype T) void ?{}(gcpointer(T)* this);
     31forall(otype T) void ?{}(gcpointer(T)* this, void* address);
     32forall(otype T) void ctor(gcpointer(T)* this, void* address);
     33forall(otype T) void ?{}(gcpointer(T)* this, gcpointer(T)* other);
     34forall(otype T) void ^?{}(gcpointer(T)* this);
     35forall(otype T) gcpointer(T) ?=?(gcpointer(T) this, gcpointer(T) rhs);
    3436
    35 // forall(otype T)
    36 // static inline void ctor(gcpointer(T)* this, int null)
    37 // {
    38 //      gcpointer_ctor(&this->internal, NULL);
    39 // }
    4037
    41 forall(otype T)
    42 static inline void ctor(gcpointer(T)* this, void* address)
    43 {
    44         gcpointer_ctor(&this->internal, address);
    45 }
    46 
    47 forall(otype T)
    48 static inline void ctor(gcpointer(T)* this, gcpointer(T)* other)
    49 {
    50         gcpointer_ctor(&this->internal, other);
    51 }
    52 
    53 forall(otype T)
    54 static inline void dtor(gcpointer(T)* this)
    55 {
    56         gcpointer_dtor(&this->internal);
    57 }
    58 
    59 forall(otype T)
    60 static inline gcpointer(T)* ?=?(gcpointer(T)* this, gcpointer(T)* rhs)
    61 {
    62         gcpointer_assign(&this->internal, &rhs->internal);
    63         return this;
    64 }
    65 
    66 forall(otype T)
    67 static inline T *?(gcpointer(T) this)
    68 {
    69         return *(T*)this.internal.ptr;
    70 }
     38forall(otype T) T *?(gcpointer(T) this);
    7139
    7240//Logical operators
    73 forall(otype T)
    74 static inline int ?!=?(gcpointer(T) this, gcpointer(T) rhs)
    75 {
    76         return this.internal.ptr != rhs.internal.ptr;
    77 }
    78 
    79 forall(otype T)
    80 static inline int ?==?(gcpointer(T) this, gcpointer(T) rhs)
    81 {
    82         return !(this == rhs);
    83 }
    84 
    85 forall(otype T)
    86 extern struct gcpointer(T) 0;
     41forall(otype T) int ?!=?(gcpointer(T) this, gcpointer(T) rhs);
     42forall(otype T) int ?==?(gcpointer(T) this, gcpointer(T) rhs);
  • src/examples/gc_no_raii/src/internal/memory_pool.h

    r950f7a7 r7527e63  
    33extern "C" {
    44#include <stdbool.h>
     5#include <stddef.h>
    56#include <stdint.h>
    67}
  • src/examples/gc_no_raii/src/internal/state.h

    r950f7a7 r7527e63  
    11#pragma once
    22
     3#ifdef __cforall
     4extern "C" {
     5#endif
    36#include <stddef.h>
    47#include <stdint.h>
     8#ifdef __cforall
     9}
     10#endif
     11#include <vector>
    512
    613#include "tools.h"
    7 #include "vector.h"
    814
    915typedef vector(struct gc_memory_pool*, heap_allocator(struct gc_memory_pool*)) pools_table_t;
  • src/examples/gc_no_raii/src/tools/worklist.h

    r950f7a7 r7527e63  
    1010#endif
    1111
    12 #include "vector.h"
     12#include <vector>
    1313
    1414typedef vector(intptr_t*, heap_allocator(intptr_t*)) worklist_t;
  • src/examples/gc_no_raii/test/badlll.c

    r950f7a7 r7527e63  
    77};
    88
     9void ?{}(List_t* this);
     10List_t* ?=?(List_t* this, List_t* rhs);
     11
    912typedef gcpointer(List_t) LLL;
    1013
    1114#define MAX (1024 * 1024)
    1215
    13 LLL buildLLL(int sz)
     16// LLL buildLLL(int sz)
     17void bla()
    1418{
    1519        int i;
    16         LLL ll0, lll, llc;
    17 
    18         ll0 = gcmalloc();
    19         ll0->val = 0;
    20         lll = ll0;
    21 
    22         for (i = 1; i < sz; i++)
    23         {
    24                 llc = gcmalloc();
    25                 llc->val = i;
    26                 lll->next = llc;
    27                 lll = llc;
    28         }
    29 
    30         return ll0;
     20        // LLL ll0;//, lll, llc;
     21//
     22//      ll0 = gcmalloc();
     23//      ll0->val = 0;
     24//      lll = ll0;
     25//
     26//      for (i = 1; i < sz; i++)
     27//      {
     28//              llc = gcmalloc();
     29//              llc->val = i;
     30//              lll->next = llc;
     31//              lll = llc;
     32//      }
     33//
     34        // return ll0;
    3135}
    32 
    33 void testLLL(LLL lll)
    34 {
    35         unsigned char *counted;
    36 
    37         counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
    38         while (lll)
    39         {
    40                 counted[lll->val]++;
    41                 if (counted[lll->val] > 1)
    42                 {
    43                         fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val);
    44                         exit(1);
    45                 }
    46                 lll = lll->next;
    47         }
    48 
    49         return;
    50 }
     36//
     37// void testLLL(LLL lll)
     38// {
     39//      unsigned char *counted;
     40//
     41//      counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
     42//      while (lll)
     43//      {
     44//              counted[lll->val]++;
     45//              if (counted[lll->val] > 1)
     46//              {
     47//                      fprintf(stderr, "ERROR! Encountered %d twice!\n", lll->val);
     48//                      exit(1);
     49//              }
     50//              lll = lll->next;
     51//      }
     52//
     53//      return;
     54// }
    5155
    5256int main(void)
     
    5458        LLL mylll;
    5559
    56         mylll = buildLLL(MAX);
    57 
    58         testLLL(mylll);
     60        // mylll = buildLLL(MAX);
     61        //
     62        // testLLL(mylll);
    5963
    6064        return 0;
  • src/examples/gc_no_raii/test/gctest.c

    r950f7a7 r7527e63  
    77int main() {
    88        sout | "Bonjour au monde!\n";
     9
     10        for(int i = 0; i < 1000000; i++) {
     11                gcpointer(int) anInt;
     12                gcmalloc(&anInt);
     13        }
    914}
  • src/libcfa/Makefile.am

    r950f7a7 r7527e63  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Fri Jul  8 23:05:11 2016
    14 ## Update Count     : 192
     13## Last Modified On : Thu Aug 11 15:36:32 2016
     14## Update Count     : 198
    1515###############################################################################
    1616
     
    2626# create extra forward types/declarations to reduce inclusion of library files
    2727extras.cf : extras.regx extras.c
    28         $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
     28        ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
    2929
    3030# create forward declarations for gcc builtins
    3131builtins.cf : builtins.c
    32         $(AM_V_GEN)if [ -e $< ] ; then \
     32        ${AM_V_GEN}if [ -e $< ] ; then \
    3333                @BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
    3434        fi
    3535
    3636builtins.c : builtins.def prototypes.awk
    37         $(AM_V_GEN)if [ -e $< ] ; then \
     37        ${AM_V_GEN}if [ -e $< ] ; then \
    3838                @BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
    3939        fi
     
    4848
    4949libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
    50         $(AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
     50        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
    5151
    5252libcfa-prelude.o : libcfa-prelude.c
    53          $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
     53         ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
    5454
    55 CFLAGS = -quiet -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
     55CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
    5656CC = ${abs_top_srcdir}/src/driver/cfa
    5757
    58 headers = limits stdlib math iostream fstream iterator rational containers/vector
     58headers = limits stdlib math iostream fstream iterator rational # containers/vector
    5959libobjs = ${headers:=.o}
    6060
     
    6363        @true
    6464
    65 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA}        # add dependency to cfa-cpp so all libraries are rebuilt with new translator
     65${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
    6666
    6767libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
  • src/libcfa/Makefile.in

    r950f7a7 r7527e63  
    8989libcfa_a_AR = $(AR) $(ARFLAGS)
    9090libcfa_a_LIBADD =
    91 am__dirstamp = $(am__leading_dot)dirstamp
    9291am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) math.$(OBJEXT) \
    9392        iostream.$(OBJEXT) fstream.$(OBJEXT) iterator.$(OBJEXT) \
    94         rational.$(OBJEXT) containers/vector.$(OBJEXT)
     93        rational.$(OBJEXT)
    9594am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1)
    9695libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
     
    136135CFA_LIBDIR = @CFA_LIBDIR@
    137136CFA_PREFIX = @CFA_PREFIX@
    138 CFLAGS = -quiet -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
     137CFLAGS = -quiet -no-include-stdhdr -g -Wall -Wno-unused-function @CFA_FLAGS@ -B${abs_top_srcdir}/src/driver -XCFA -t # TEMPORARY: does not build with -O2
    139138CPP = @CPP@
    140139CPPFLAGS = @CPPFLAGS@
     
    234233cfalib_DATA = builtins.cf extras.cf prelude.cf
    235234MAINTAINERCLEANFILES = builtins.cf extras.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
    236 headers = limits stdlib math iostream fstream iterator rational containers/vector
     235headers = limits stdlib math iostream fstream iterator rational # containers/vector
    237236libobjs = ${headers:=.o}
    238237libcfa_a_SOURCES = libcfa-prelude.c ${headers:=.c}
     
    304303clean-libLIBRARIES:
    305304        -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
    306 containers/$(am__dirstamp):
    307         @$(MKDIR_P) containers
    308         @: > containers/$(am__dirstamp)
    309 containers/$(DEPDIR)/$(am__dirstamp):
    310         @$(MKDIR_P) containers/$(DEPDIR)
    311         @: > containers/$(DEPDIR)/$(am__dirstamp)
    312 containers/vector.$(OBJEXT): containers/$(am__dirstamp) \
    313         containers/$(DEPDIR)/$(am__dirstamp)
    314305libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES)
    315306        $(AM_V_at)-rm -f libcfa.a
     
    319310mostlyclean-compile:
    320311        -rm -f *.$(OBJEXT)
    321         -rm -f containers/vector.$(OBJEXT)
    322312
    323313distclean-compile:
     
    332322@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@
    333323@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@
    334 @AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/vector.Po@am__quote@
    335324
    336325.c.o:
     
    505494        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
    506495        -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
    507         -rm -f containers/$(DEPDIR)/$(am__dirstamp)
    508         -rm -f containers/$(am__dirstamp)
    509496
    510497maintainer-clean-generic:
     
    517504
    518505distclean: distclean-am
    519         -rm -rf ./$(DEPDIR) containers/$(DEPDIR)
     506        -rm -rf ./$(DEPDIR)
    520507        -rm -f Makefile
    521508distclean-am: clean-am distclean-compile distclean-generic \
     
    563550
    564551maintainer-clean: maintainer-clean-am
    565         -rm -rf ./$(DEPDIR) containers/$(DEPDIR)
     552        -rm -rf ./$(DEPDIR)
    566553        -rm -f Makefile
    567554maintainer-clean-am: distclean-am maintainer-clean-generic \
     
    603590# create extra forward types/declarations to reduce inclusion of library files
    604591extras.cf : extras.regx extras.c
    605         $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
     592        ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f extras.regx > ${srcdir}/extras.cf
    606593
    607594# create forward declarations for gcc builtins
    608595builtins.cf : builtins.c
    609         $(AM_V_GEN)if [ -e $< ] ; then \
     596        ${AM_V_GEN}if [ -e $< ] ; then \
    610597                @BACKEND_CC@ -E -P $^ | sed -e "/targetm/s/.*//" -e "/_Decimal/s/.*//" -e "s/void (const char \*)0();//" -e "s/\"//g" -e "s/\(__builtin_\) /\1/" > $@ ; \
    611598        fi
    612599
    613600builtins.c : builtins.def prototypes.awk
    614         $(AM_V_GEN)if [ -e $< ] ; then \
     601        ${AM_V_GEN}if [ -e $< ] ; then \
    615602                @BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ ; \
    616603        fi
     
    623610
    624611libcfa-prelude.c : ${srcdir}/prelude.cf ${srcdir}/extras.cf ${srcdir}/builtins.cf
    625         $(AM_V_GEN)${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
     612        ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l ${srcdir}/prelude.cf $@  # use src/cfa-cpp as not in lib until after install
    626613
    627614libcfa-prelude.o : libcfa-prelude.c
    628          $(AM_V_GEN)@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
     615         ${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -c -o $@ $<
    629616
    630617# extensionless header files are overridden by -o flag in default makerule => explicitly override default rule to silently do nothing
     
    632619        @true
    633620
    634 ${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA}        # add dependency to cfa-cpp so all libraries are rebuilt with new translator
     621${libobjs} : ${abs_top_srcdir}/src/driver/cfa-cpp ${cfalib_DATA} # add dependency to cfa-cpp so all libraries are rebuilt with new translator
    635622
    636623maintainer-clean-local:
  • src/main.cc

    r950f7a7 r7527e63  
    1010// Created On       : Fri May 15 23:12:02 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul  5 15:23:11 2016
    13 // Update Count     : 209
     12// Last Modified On : Mon Aug 15 17:58:57 2016
     13// Update Count     : 220
    1414//
    1515
    1616#include <iostream>
    1717#include <fstream>
    18 #include <cstdlib>
    19 #include <cstdio>
    2018#include <getopt.h>
    2119#include "Parser/Parser.h"
    22 #include "Parser/ParseNode.h"
    23 #include "Parser/LinkageSpec.h"
    2420#include "SynTree/Declaration.h"
    2521#include "SynTree/Visitor.h"
     
    2824#include "GenPoly/Box.h"
    2925#include "GenPoly/CopyParams.h"
     26#include "GenPoly/InstantiateGeneric.h"
    3027#include "CodeGen/Generate.h"
    3128#include "CodeGen/FixNames.h"
     
    4239#include "InitTweak/GenInit.h"
    4340#include "InitTweak/FixInit.h"
    44 #include "InitTweak/FixGlobalInit.h"
    45 //#include "Explain/GenProlog.h"
    46 //#include "Try/Visit.h"
    4741
    4842#include "Common/SemanticError.h"
     
    193187                        input = fopen( argv[ optind ], "r" );
    194188                        if ( ! input ) {
    195                                 std::cout << "Error: can't open " << argv[ optind ] << std::endl;
     189                                std::cout << "Error: cannot open " << argv[ optind ] << std::endl;
    196190                                exit( EXIT_FAILURE );
    197191                        } // if
     
    219213                        FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
    220214                        if ( builtins == NULL ) {
    221                                 std::cerr << "Error: can't open builtins.cf" << std::endl;
     215                                std::cerr << "Error: cannot open builtins.cf" << std::endl;
    222216                                exit( EXIT_FAILURE );
    223217                        } // if
     
    227221                        FILE * extras = fopen( libcfap | treep ? "extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
    228222                        if ( extras == NULL ) {
    229                                 std::cerr << "Error: can't open extras.cf" << std::endl;
     223                                std::cerr << "Error: cannot open extras.cf" << std::endl;
    230224                                exit( EXIT_FAILURE );
    231225                        } // if
     
    236230                                FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
    237231                                if ( prelude == NULL ) {
    238                                         std::cerr << "Error: can't open prelude.cf" << std::endl;
     232                                        std::cerr << "Error: cannot open prelude.cf" << std::endl;
    239233                                        exit( EXIT_FAILURE );
    240234                                } // if
     
    282276                OPTPRINT( "fixNames" )
    283277                CodeGen::fixNames( translationUnit );
    284                 OPTPRINT( "fixGlobalInit" );
    285                 InitTweak::fixGlobalInit( translationUnit, filename, libcfap || treep );
    286278                OPTPRINT( "tweakInit" )
    287279                InitTweak::genInit( translationUnit );
     
    304296                }
    305297
     298                // fix ObjectDecl - replaces ConstructorInit nodes
    306299                OPTPRINT( "fixInit" )
    307                 // fix ObjectDecl - replaces ConstructorInit nodes
    308                 InitTweak::fix( translationUnit );
     300                InitTweak::fix( translationUnit, filename, libcfap || treep );
    309301                if ( ctorinitp ) {
    310302                        dump ( translationUnit );
     
    312304                }
    313305
     306                OPTPRINT("instantiateGenerics")
     307                GenPoly::instantiateGeneric( translationUnit );
    314308                OPTPRINT( "copyParams" );
    315309                GenPoly::copyParams( translationUnit );
     
    384378        std::list< Declaration * > decls;
    385379        if ( noprotop ) {
    386                 filter( translationUnit.begin(), translationUnit.end(),
    387                                 std::back_inserter( decls ), notPrelude );
     380                filter( translationUnit.begin(), translationUnit.end(), std::back_inserter( decls ), notPrelude );
    388381        } else {
    389382                decls = translationUnit;
  • src/tests/.expect/32/extension.txt

    r950f7a7 r7527e63  
    100100    ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
    101101}
    102 __attribute__ ((constructor(),)) static void _init_extension(void){
    103     int _global_init0;
    104     ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);
    105     int _global_init1;
    106     ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);
    107     int _global_init2;
    108     ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);
    109 }
    110 __attribute__ ((destructor(),)) static void _destroy_extension(void){
    111     ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);
    112     ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);
    113     ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);
    114 }
  • src/tests/.expect/32/gccExtensions.txt

    r950f7a7 r7527e63  
    55extern void exit(int __status);
    66extern int printf(const char *__restrict __format, ...);
     7extern int __x__i_1;
    78int main(int __argc__i_1, const char **__argv__PPCc_1){
    89    asm ( "nop" :  :  :  );
    910    asm ( "nop" :  :  :  );
    1011    asm ( "nop" :  :  :  );
     12    static int __y__i_2;
     13    int __src__i_2;
     14    int __dst__i_2;
     15    asm volatile ( "mov %1, %0\n\tadd $1, %0" :  :  :  );
     16    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) :  :  );
     17    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) :  );
     18    asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" );
    1119    double _Complex __c1__Xd_2;
    1220    double _Complex __c2__Xd_2;
     
    151159    struct s4 __y2__3ss4_2;
    152160    ((void)___constructor__F_P3ss4_autogen___2(((struct s4 *)(&__y2__3ss4_2))));
    153     int __m1__A0i_2[((long unsigned int )10)];
    154     int __m2__A0A0i_2[((long unsigned int )10)][((long unsigned int )10)];
    155     int __m3__A0A0i_2[((long unsigned int )10)][((long unsigned int )10)];
     161    int __m1__A0i_2[((unsigned int )10)];
     162    int __m2__A0A0i_2[((unsigned int )10)][((unsigned int )10)];
     163    int __m3__A0A0i_2[((unsigned int )10)][((unsigned int )10)];
    156164    int _retVal0 = { 0 };
    157165    ((void)(_retVal0=0) /* ?{} */);
  • src/tests/.expect/64/extension.txt

    r950f7a7 r7527e63  
    100100    ((void)((__extension__ __a__i_2 , __extension__ __b__i_2) , __extension__ __c__i_2));
    101101}
    102 __attribute__ ((constructor(),)) static void _init_extension(void){
    103     int _global_init0;
    104     ((void)((*((int *)(&__a__i_1)))=_global_init0) /* ?{} */);
    105     int _global_init1;
    106     ((void)((*((int *)(&__b__i_1)))=_global_init1) /* ?{} */);
    107     int _global_init2;
    108     ((void)((*((int *)(&__c__i_1)))=_global_init2) /* ?{} */);
    109 }
    110 __attribute__ ((destructor(),)) static void _destroy_extension(void){
    111     ((void)((*((int *)(&__c__i_1)))) /* ^?{} */);
    112     ((void)((*((int *)(&__b__i_1)))) /* ^?{} */);
    113     ((void)((*((int *)(&__a__i_1)))) /* ^?{} */);
    114 }
  • src/tests/.expect/64/gccExtensions.txt

    r950f7a7 r7527e63  
    55extern void exit(int __status);
    66extern int printf(const char *__restrict __format, ...);
     7extern int __x__i_1;
    78int main(int __argc__i_1, const char **__argv__PPCc_1){
    89    asm ( "nop" :  :  :  );
    910    asm ( "nop" :  :  :  );
    1011    asm ( "nop" :  :  :  );
     12    static int __y__i_2;
     13    int __src__i_2;
     14    int __dst__i_2;
     15    asm volatile ( "mov %1, %0\n\tadd $1, %0" :  :  :  );
     16    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) :  :  );
     17    asm volatile ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ) : "r" ( __src__i_2 ) :  );
     18    asm ( "mov %1, %0\n\tadd $1, %0" : "=r" ( __dst__i_2 ), "=r" ( __src__i_2 ) : [ __src__i_2 ] "r" ( __dst__i_2 ) : "r0" );
     19    L2: L1: asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5" :  : "r" ( __src__i_2 ), "r" ( (&__dst__i_2) ) : "r5", "memory" : L1, L2 );
    1120    double _Complex __c1__Xd_2;
    1221    double _Complex __c2__Xd_2;
  • src/tests/Makefile.am

    r950f7a7 r7527e63  
    1111## Created On       : Sun May 31 09:08:15 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Sat Jul  9 11:23:24 2016
    14 ## Update Count     : 35
     13## Last Modified On : Mon Aug 15 12:24:54 2016
     14## Update Count     : 39
    1515###############################################################################
    1616
     
    2727
    2828all-local :
    29         +python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
     29        @+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
    3030
    3131all-tests :
    32         +python test.py --all
     32        @+python test.py --all          # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
    3333
    3434clean-local :
    35         -rm -f ${EXTRA_PROGRAMS}
     35        rm -f ${EXTRA_PROGRAMS}
    3636
    3737list :
    38         +python test.py --list
     38        @+python test.py --list
    3939
    4040constant0-1DP : constant0-1.c
  • src/tests/Makefile.in

    r950f7a7 r7527e63  
    635635
    636636all-local :
    637         +python test.py vector_test avl_test operators numericConstants expression enum asmName array typeof cast dtor-early-exit init_once
     637        @+python test.py vector_test avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once
    638638
    639639all-tests :
    640         +python test.py --all
     640        @+python test.py --all          # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
    641641
    642642clean-local :
    643         -rm -f ${EXTRA_PROGRAMS}
     643        rm -f ${EXTRA_PROGRAMS}
    644644
    645645list :
    646         +python test.py --list
     646        @+python test.py --list
    647647
    648648constant0-1DP : constant0-1.c
  • src/tests/exception.c

    r950f7a7 r7527e63  
    1111        x/4;
    1212    } catch( int ) {
    13     } catch( int x ) {
     13    } catch( float x ) {
    1414    } catch( struct { int i; } ) {
    1515    } catch( struct { int i; } x ) {
     
    2121    } catch( * struct { int i; } x ) {
    2222    } catch( ... ) {
    23 //    } finally {
     23    } finally {
    2424    } // try
    2525}
  • src/tests/gccExtensions.c

    r950f7a7 r7527e63  
     1//
     2// Cforall Version 1.0.0 Copyright (C) 2015 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// gccExtensions.c --
     8//
     9// Author           : Peter A. Buhr
     10// Created On       : Sun Aug 14 17:28:17 2016
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon Aug 15 12:44:35 2016
     13// Update Count     : 5
     14//
     15
     16extern int x asm( "xx" );
     17
    118int main(int argc, char const *argv[]) {
    219        asm( "nop" );
    320        __asm( "nop" );
    421        __asm__( "nop" );
     22
     23        static int y asm( "yy" );
     24//      static * int z asm( "zz" );                                                     // CFA declaration
     25
     26        int src;
     27        int dst;
     28
     29        asm volatile ( "mov %1, %0\n\t"
     30                                   "add $1, %0" : : : );
     31
     32        asm volatile ( "mov %1, %0\n\t"
     33                                   "add $1, %0"
     34                                   : "=" "r" (dst));
     35
     36        asm volatile ( "mov %1, %0\n\t"
     37                                   "add $1, %0"
     38                                   : "=r" (dst)
     39                                   : "r" (src));
     40
     41        asm ( "mov %1, %0\n\t"
     42                  "add $1, %0"
     43                  : "=r" (dst), "=r" (src)
     44                  : [src] "r" (dst)
     45                  : "r0");
     46
     47  L1: L2:
     48        asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
     49                           : /* No outputs. */
     50                           : "r"(src), "r"(&dst)
     51                           : "r5", "memory"
     52                           : L1, L2 );
    553
    654        __complex__ c1;
     
    57105        return 0;
    58106}
     107
     108// Local Variables: //
     109// tab-width: 4 //
     110// compile-command: "cfa gccExtensions.c" //
     111// End: //
  • src/tests/init_once.c

    r950f7a7 r7527e63  
    9292init_once y = x;
    9393
     94void static_variable() {
     95        static init_once x;
     96}
     97
    9498int main() {
    9599        // local variables
     
    179183                }
    180184        }
     185
     186        // function-scoped static variable
     187        for (int i = 0; i < 10; i++) {
     188                static_variable();
     189        }
    181190}
    182191
  • src/tests/labelledExit.c

    r950f7a7 r7527e63  
     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// labelledExit.c --
     8//
     9// Author           : Peter A. Buhr
     10// Created On       : Wed Aug 10 07:29:39 2016
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Aug 10 07:30:15 2016
     13// Update Count     : 1
     14//
     15
    116int foo() {
    217        int i;
     
    136151        else
    137152                i += 1;
    138 
    139153}
    140154
    141 int main(int argc, char const *argv[]) {
     155int main( int argc, char const *argv[] ) {
    142156        /* code */
    143         return 0;
    144157}
    145158
    146159// Local Variables: //
    147160// tab-width: 4 //
    148 // compile-command: "cfa LabelledExit.c" //
     161// compile-command: "cfa labelledExit.c" //
    149162// End: //
  • src/tests/switch.c

    r950f7a7 r7527e63  
    1010// Created On       : Tue Jul 12 06:50:22 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 12 18:02:23 2016
    13 // Update Count     : 22
     12// Last Modified On : Thu Aug  4 11:44:29 2016
     13// Update Count     : 31
    1414//
    1515
     
    3333        } // switch
    3434
    35         // switch (3 ) {
    36         //      int j;
    37         //   case 3:
    38         //      break;
    39         //   case 4:
    40         //      j = 0;
    41         // }
     35        switch ( 3 ) {
     36                int j;
     37          case 3:
     38                break;
     39          case 4:
     40                j = 0;
     41        }
     42
     43        switch ( i ) {
     44          case 1, 2, 3:
     45                switch ( i ) {
     46                  case 2, 3, 4:
     47                        7;
     48                }
     49        }
    4250
    4351        switch ( i ) {
     
    4957          default:
    5058                i = 3;
    51           case 3:
     59          case 19:
    5260          case 'A' ... 'Z':
    53           case 5 ... 6:
    54           case 2, 4:
     61          case 1 ... 6:
     62          case 20, 30:
    5563                j = 3;
    5664                f( 3 );
     
    7886                struct S { int i; };
    7987                S s;
    80           case 3:
     88          case 19:
    8189          case 'A' ... 'Z':
    82           case 5 ... 6:
    83           case 2, 4, 7:
     90          case 0 ... 6:
     91          case 20, 30, 40:
    8492                i = 3;
    8593                f( 3 );
  • src/tests/test.py

    r950f7a7 r7527e63  
    2323# parses the Makefile to find the machine type (32-bit / 64-bit)
    2424def getMachineType():
    25         with open('Makefile') as file:
    26                 makefile = file.read()
    27                 m = re.search("CFA_FLAGS\s*=\s*-m(.*)", makefile)
    28                 return m.group(1) if m else '64'
     25        sh('echo "int main() { return 0; }" > .dummy.c')
     26        sh("make .dummy", print2stdout=False)
     27        _, out = sh("file .dummy", print2stdout=False)
     28        sh("rm -f .dummy.c > /dev/null 2>&1")
     29        sh("rm -f .dummy > /dev/null 2>&1")
     30        return re.search("ELF\s([0-9]+)-bit", out).group(1)
    2931
    3032# reads the directory ./.expect and indentifies the tests
     
    9799                return False
    98100
    99 # find the test data for a given test name
    100 def filterTests(testname) :
    101         found = [test for test in allTests if test.name == testname]
    102         return (found[0] if len(found) == 1 else Test(testname, testname) )
    103 
    104101################################################################################
    105102#               running test functions
     
    139136                if not dry_run and fileContainsOnly(out_file, "make: *** No rule to make target `%s'.  Stop." % test.name) :
    140137                        retcode = 1;
    141                         error = "\t\tNo make target for test %s!" % test
     138                        error = "\t\tNo make target for test %s!" % test.name
    142139                        sh("rm %s" % out_file, False)
    143140
     
    250247        # already existing tests and create new info for the new tests
    251248        if options.regenerate_expected :
    252                 tests = map(filterTests, options.tests)
     249                for testname in options.tests :
     250                        if testname.endswith(".c") or testname.endswith(".cc") or testname.endswith(".cpp") :
     251                                print('ERROR: "%s", tests are not allowed to end with a C/C++/CFA extension, ignoring it' % testname, file=sys.stderr)
     252                        else :
     253                                found = [test for test in allTests if test.name == testname]
     254                                tests.append( found[0] if len(found) == 1 else Test(testname, testname) )
    253255
    254256        else :
Note: See TracChangeset for help on using the changeset viewer.