Changes in / [b3f9a0cb:89173242]


Ignore:
Files:
11 added
4 deleted
40 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    rb3f9a0cb r89173242  
    3030
    3131# generated by latex
    32 *.aux
    33 *.bbl
    34 *.blg
    35 *.brf
    36 *.dvi
    37 *.idx
    38 *.ilg
    39 *.ind
    40 *.log
    41 *.out
    42 *.pdf
    43 *.ps
    44 *.toc
     32doc/refrat/refrat.aux
     33doc/refrat/refrat.bbl
     34doc/refrat/refrat.blg
     35doc/refrat/refrat.brf
     36doc/refrat/refrat.dvi
     37doc/refrat/refrat.idx
     38doc/refrat/refrat.ilg
     39doc/refrat/refrat.ind
     40doc/refrat/refrat.log
     41doc/refrat/refrat.out
     42doc/refrat/refrat.pdf
     43doc/refrat/refrat.ps
     44doc/refrat/refrat.toc
  • doc/refrat/refrat.tex

    rb3f9a0cb r89173242  
    1717\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
    1818\usepackage{breakurl}
    19 \renewcommand{\UrlFont}{\small\sf}
     19\urlstyle{sf}
    2020
    2121%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    2323% Names used in the document.
    2424
    25 \newcommand{\CFA}{C$\forall$\xspace}    % set language symbolic name
    26 \newcommand{\CFL}{Cforall\xspace}               % set language text name
     25\newcommand{\CFA}{Cforall\xspace}               % set language text name
     26\newcommand{\CFAA}{C$\forall$\xspace}   % set language symbolic name
    2727\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    2828\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     
    3333
    3434\makeatletter
    35 % allow escape sequence in lstinline
    36 %\usepackage{etoolbox}
    37 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
    38 
    39 \renewcommand\small{%
    40    \@setfontsize\small{8.5}{11}%
    41    \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt
    42    \abovedisplayshortskip \z@ \@plus 2pt
    43    \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt
    44    \def\@listi{\leftmargin\leftmargini
    45                \topsep 4pt \@plus 2pt \@minus 2pt
    46                \parsep 2pt \@pluspt \@minuspt
    47                \itemsep \parsep}%
    48    \belowdisplayskip \abovedisplayskip
    49 }
    50 \usepackage{relsize}            % must be after change to small
    51 
    5235\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
    5336\renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
     
    7659\renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
    7760\renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    78 \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
     61\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    7962\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
    8063
    81 % index macros
    8264\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
    8365\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
     
    11597
    11698% blocks and titles
     99\newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    117100\newenvironment{rationale}{%
    118101  \begin{quotation}\noindent$\Box$\enspace
     
    120103  \hfill\enspace$\Box$\end{quotation}
    121104}%
    122 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    123105\newcommand{\rewrite}{\(\Rightarrow\)}
    124106\newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
     
    149131\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    150132
    151 % CFA based on ANSI C
     133% adjust listings macros
    152134\lstdefinelanguage{CFA}[ANSI]{C}%
    153 {morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,trait,disable,dtype,enable,
    154         fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,otype,restrict,_Static_assert,
    155         _Thread_local,throw,throwResume,try,},
     135{morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,context,disable,dtype,enable,
     136        fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,restrict,_Static_assert,
     137        _Thread_local,throw,throwResume,try,type,},
    156138}%
    157139
     
    159141language=CFA,
    160142columns=flexible,
    161 basicstyle=\sf\relsize{-1},
     143basicstyle=\sf\small,
    162144tabsize=4,
    163145xleftmargin=\parindent,
    164146escapechar=@,
    165147keepspaces=true,
    166 showstringspaces=false,
    167 showlines=true,
     148%showtabs=true,
     149%tab=\rightarrowfill,
    168150}%
    169151
     
    192174
    193175\title{\Huge
    194 \CFA (\CFL) Reference Manual and Rationale
     176\CFA (\CFAA) Reference Manual and Rationale
    195177}% title
    196178\author{\huge
     
    298280An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator:
    299281\begin{lstlisting}
    300 forall( otype T | sumable( T ) ) struct pair {
     282forall( type T | sumable( T ) ) struct pair {
    301283        T x;
    302284        T y;
     
    310292Polymorphic functions may have generic types as parameters, and those generic types may use type parameters of the polymorphic function as type parameters of the generic type:
    311293\begin{lstlisting}
    312 forall( otype T ) void swap( pair(T) *p ) {
     294forall( type T ) void swap( pair(T) *p ) {
    313295        T z = p->x;
    314296        p->x = p->y;
     
    320302\subsubsection{Constraints}
    321303
    322 To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated.
    323 Forward declarations of generic type generators are not forbidden, but the definition must be visible to instantiate the generic type.  Equivalently, instantiations of generic types are not allowed to be incomplete types.
     304To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated.  Forward declarations of generic type generators are not forbidden, but the definition must be visible to instantiate the generic type.  Equivalently, instantiations of generic types are not allowed to be incomplete types.
    324305
    325306\examples
    326307\begin{lstlisting}
    327 forall( otype T ) struct A;
    328 
    329 forall( otype T ) struct B {
     308forall( type T ) struct A;
     309
     310forall( type T ) struct B {
    330311        A(T) *a;                        // legal, but cannot instantiate B(T)
    331312};
     
    333314B(T) x;                                 // illegal, *x.a is of an incomplete generic type
    334315 
    335 forall( otype T ) struct A {
     316forall( type T ) struct A {
    336317        B( T ) *b;
    337318};
     
    340321
    341322// box.h:
    342         forall( otype T ) struct box;
    343         forall( otype T ) box( T ) *make_box( T );
    344         forall( otype T ) void use_box( box( T ) *b );
     323        forall( type T ) struct box;
     324        forall( type T ) box( T ) *make_box( T );
     325        forall( type T ) void use_box( box( T ) *b );
    345326       
    346327// main.c:
     
    429410
    430411\subsubsection{Specialization}
    431 A function or value whose type is polymorphic may be implicitly converted to one whose type is \Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}.
     412A function or value whose type is polymorphic may be implicitly converted to one whose type is
     413\Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}.
    432414Any value that is legal for the inferred parameter may be used, including other inferred parameters.
    433415
    434 If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters in its type, then an object or function must be visible at the point of the specialization that has the same identifier as the assertion parameter and has a type that is compatible\index{compatible type} with or can be specialized to the type of the assertion parameter.
    435 The assertion parameter is bound to that object or function.
     416If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters in its type, then an object or function must be visible at the point of the specialization that has the same identifier as the assertion parameter and has a type that is compatible\index{compatible
     417  type} with or can be specialized to the type of the assertion parameter.  The assertion parameter is bound to that object or function.
    436418
    437419The type of the specialization is the type of the original with the bound inferred parameters and the bound assertion parameters replaced by their bound values.
     
    440422The type
    441423\begin{lstlisting}
    442 forall( otype T, otype U ) void (*)( T, U );
     424forall( type T, type U ) void (*)( T, U );
    443425\end{lstlisting}
    444426can be specialized to (among other things)
    445427\begin{lstlisting}
    446 forall( otype T ) void (*)( T, T );             // U bound to T
    447 forall( otype T ) void (*)( T, real );  // U bound to real
    448 forall( otype U ) void (*)( real, U );  // T bound to real
     428forall( type T ) void (*)( T, T );              // U bound to T
     429forall( type T ) void (*)( T, real );   // U bound to real
     430forall( type U ) void (*)( real, U );   // T bound to real
    449431void f( real, real );                                   // both bound to real
    450432\end{lstlisting}
     
    452434The type
    453435\begin{lstlisting}
    454 forall( otype T | T ?+?( T, T ) ) T (*)( T );
     436forall( type T | T ?+?( T, T ) ) T (*)( T );
    455437\end{lstlisting}
    456438can be specialized to (among other things)
     
    512494If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
    513495\lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$.
    514 Otherwise, \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
     496Otherwise,
     497\lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
    515498
    516499\item
     
    525508        \rhs \lstinline$forall$
    526509        \rhs \lstinline$lvalue$
    527         \rhs \lstinline$trait$
     510        \rhs \lstinline$context$
    528511        \rhs \lstinline$dtype$
    529512        \rhs \lstinline$ftype$
     
    556539A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type.
    557540
    558 In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to 0 as a special case.
     541In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to
     5420 as a special case.
    559543However, user-defined arithmetic types often need the equivalent of a 1 or 0 for their functions or operators, polymorphic functions often need 0 and 1 constants of a type matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
    560544Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$.
     
    852836\predefined
    853837\begin{lstlisting}
    854 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
    855 forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
    856 forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t );
    857 forall( otype T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );
    858 forall( otype T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );
    859 forall( otype T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );
    860 forall( otype T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );
    861 forall( otype T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );
    862 forall( otype T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );
    863 forall( otype T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );
    864 forall( otype T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );
    865 forall( otype T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );
    866 forall( otype T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );
    867 forall( otype T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );
    868 forall( otype T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );
    869 forall( otype T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );
     838forall( type T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
     839forall( type T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
     840forall( type T ) lvalue const T ?[?]( const T *, ptrdiff_t );
     841forall( type T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );
     842forall( type T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );
     843forall( type T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );
     844forall( type T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );
     845forall( type T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );
     846forall( type T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );
     847forall( type T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );
     848forall( type T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );
     849forall( type T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );
     850forall( type T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );
     851forall( type T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );
     852forall( type T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );
     853forall( type T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );
    870854\end{lstlisting}
    871855\semantics
     
    930914\begin{rationale}
    931915One desirable property of a polymorphic programming language is \define{generalizability}: the ability to replace an abstraction with a more general but equivalent abstraction without requiring changes in any of the uses of the original\cite{Cormack90}.
    932 For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( otype T ) T f( T );$'' without affecting any calls of \lstinline$f$.
     916For instance, it should be possible to replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$'' without affecting any calls of \lstinline$f$.
    933917
    934918\CFA\index{deficiencies!generalizability} does not fully possess this property, because
     
    944928f = g( d, f );          // (3) (unsafe conversion to float)
    945929\end{lstlisting}
    946 If \lstinline$g$ was replaced by ``\lstinline$forall( otype T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
     930If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
    947931\lstinline$double$, and the result would be a \lstinline$double$.
    948932
    949933Another example is the function ``\lstinline$void h( int *);$''.
    950934This function can be passed a
    951 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( otype T ) void h( T *);$'' can not.
     935\lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$'' can not.
    952936In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type.
    953937If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable.
     
    957941A function called ``\lstinline$?()$'' might be part of a numerical differentiation package.
    958942\begin{lstlisting}
    959 extern otype Derivative;
     943extern type Derivative;
    960944extern double ?()( Derivative, double );
    961945extern Derivative derivative_of( double (*f)( double ) );
     
    978962
    979963\begin{lstlisting}
    980 forall( otype T ) T h( T );
     964forall( type T ) T h( T );
    981965double d = h( 1.5 );
    982966\end{lstlisting}
     
    985969
    986970\begin{lstlisting}
    987 forall( otype T, otype U ) void g( T, U );      // (4)
    988 forall( otype T ) void g( T, T );                       // (5)
    989 forall( otype T ) void g( T, long );                    // (6)
     971forall( type T, type U ) void g( T, U );        // (4)
     972forall( type T ) void g( T, T );                        // (5)
     973forall( type T ) void g( T, long );                     // (6)
    990974void g( long, long );                                           // (7)
    991975double d;
     
    1007991The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions.
    1008992\begin{lstlisting}
    1009 forall( otype T ) T min( T, T );
     993forall( type T ) T min( T, T );
    1010994double max( double, double );
    1011 trait min_max( T ) {@\impl{min_max}@
     995context min_max( T ) {@\impl{min_max}@
    1012996        T min( T, T );
    1013997        T max( T, T );
    1014998}
    1015 forall( otype U | min_max( U ) ) void shuffle( U, U );
     999forall( type U | min_max( U ) ) void shuffle( U, U );
    10161000shuffle( 9, 10 );
    10171001\end{lstlisting}
     
    10631047long double ?++( volatile long double * ), ?++( _Atomic volatile long double * );
    10641048
    1065 forall( otype T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * );
    1066 forall( otype T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * );
    1067 forall( otype T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * );
    1068 forall( otype T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * );
    1069 forall( otype T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * );
    1070 forall( otype T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
     1049forall( type T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * );
     1050forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * );
     1051forall( type T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * );
     1052forall( type T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * );
     1053forall( type T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * );
     1054forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
    10711055        * ?++( _Atomic const T * _Atomic restrict volatile * );
    1072 forall( otype T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
     1056forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
    10731057        * ?++( _Atomic restrict T * _Atomic restrict volatile * );
    1074 forall( otype T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
     1058forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
    10751059        * ?++( _Atomic volatile T * _Atomic restrict volatile * );
    1076 forall( otype T ) const restrict T * ?++( const restrict T * restrict volatile * ),
     1060forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ),
    10771061        * ?++( const restrict T * _Atomic restrict volatile * );
    1078 forall( otype T ) const volatile T * ?++( const volatile T * restrict volatile * ),
     1062forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ),
    10791063        * ?++( const volatile T * _Atomic restrict volatile * );
    1080 forall( otype T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
     1064forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
    10811065        * ?++( restrict volatile T * _Atomic restrict volatile * );
    1082 forall( otype T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
     1066forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
    10831067        * ?++( _Atomic const restrict T * _Atomic restrict volatile * );
    1084 forall( otype T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
     1068forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
    10851069        * ?++( _Atomic const volatile T * _Atomic restrict volatile * );
    1086 forall( otype T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
     1070forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
    10871071        * ?++( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1088 forall( otype T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
     1072forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
    10891073        * ?++( const restrict volatile T * _Atomic restrict volatile * );
    1090 forall( otype T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
     1074forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
    10911075        * ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    10921076
     
    11071091long double ?--( volatile long double * ), ?--( _Atomic volatile long double * );
    11081092
    1109 forall( otype T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * );
    1110 forall( otype T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * );
    1111 forall( otype T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * );
    1112 forall( otype T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * );
    1113 forall( otype T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * );
    1114 forall( otype T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
     1093forall( type T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * );
     1094forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * );
     1095forall( type T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * );
     1096forall( type T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * );
     1097forall( type T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * );
     1098forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
    11151099        * ?--( _Atomic const T * _Atomic restrict volatile * );
    1116 forall( otype T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
     1100forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
    11171101        * ?--( _Atomic restrict T * _Atomic restrict volatile * );
    1118 forall( otype T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
     1102forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
    11191103        * ?--( _Atomic volatile T * _Atomic restrict volatile * );
    1120 forall( otype T ) const restrict T * ?--( const restrict T * restrict volatile * ),
     1104forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ),
    11211105        * ?--( const restrict T * _Atomic restrict volatile * );
    1122 forall( otype T ) const volatile T * ?--( const volatile T * restrict volatile * ),
     1106forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ),
    11231107        * ?--( const volatile T * _Atomic restrict volatile * );
    1124 forall( otype T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
     1108forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
    11251109        * ?--( restrict volatile T * _Atomic restrict volatile * );
    1126 forall( otype T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
     1110forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
    11271111        * ?--( _Atomic const restrict T * _Atomic restrict volatile * );
    1128 forall( otype T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
     1112forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
    11291113        * ?--( _Atomic const volatile T * _Atomic restrict volatile * );
    1130 forall( otype T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
     1114forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
    11311115        * ?--( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1132 forall( otype T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
     1116forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
    11331117        * ?--( const restrict volatile T * _Atomic restrict volatile * );
    1134 forall( otype T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
     1118forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
    11351119        * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    11361120\end{lstlisting}
     
    12111195The expression would be valid if \lstinline$?++$ were declared by
    12121196\begin{lstlisting}
    1213 forall( otype T ) T * ?++( T * * );
     1197forall( type T ) T * ?++( T * * );
    12141198\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$.
    12151199
     
    12191203Hence the actual predefined function is
    12201204\begin{lstlisting}
    1221 forall( otype T ) T * ?++( T * restrict volatile * );
     1205forall( type T ) T * ?++( T * restrict volatile * );
    12221206\end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
    12231207\lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
     
    12331217\lstinline$char const volatile *$, so a new overloading is needed:
    12341218\begin{lstlisting}
    1235 forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * );
     1219forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * );
    12361220\end{lstlisting}
    12371221One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}.
     
    12411225The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case:
    12421226\begin{lstlisting}
    1243 forall( otype T ) T restrict * ?++( T restrict *restrict volatile * );
     1227forall( type T ) T restrict * ?++( T restrict *restrict volatile * );
    12441228\end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$.
    12451229This looks odd, because {\c11} contains a constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$ is not syntactically a pointer type. \CFA loosens the constraint.
     
    12991283long double ++?( volatile long double * ), ++?( _Atomic volatile long double * );
    13001284
    1301 forall( otype T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * );
    1302 forall( otype T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * );
    1303 forall( otype T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * );
    1304 forall( otype T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * );
    1305 forall( otype T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * );
    1306 forall( otype T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
     1285forall( type T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * );
     1286forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * );
     1287forall( type T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * );
     1288forall( type T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * );
     1289forall( type T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * );
     1290forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
    13071291        * ++?( _Atomic const T * _Atomic restrict volatile * );
    1308 forall( otype T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
     1292forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
    13091293        * ++?( _Atomic volatile T * _Atomic restrict volatile * );
    1310 forall( otype T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
     1294forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
    13111295        * ++?( _Atomic restrict T * _Atomic restrict volatile * );
    1312 forall( otype T ) const volatile T * ++?( const volatile T * restrict volatile * ),
     1296forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ),
    13131297        * ++?( const volatile T * _Atomic restrict volatile * );
    1314 forall( otype T ) const restrict T * ++?( const restrict T * restrict volatile * ),
     1298forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ),
    13151299        * ++?( const restrict T * _Atomic restrict volatile * );
    1316 forall( otype T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
     1300forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
    13171301        * ++?( restrict volatile T * _Atomic restrict volatile * );
    1318 forall( otype T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
     1302forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
    13191303        * ++?( _Atomic const volatile T * _Atomic restrict volatile * );
    1320 forall( otype T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
     1304forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
    13211305        * ++?( _Atomic const restrict T * _Atomic restrict volatile * );
    1322 forall( otype T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
     1306forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
    13231307        * ++?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1324 forall( otype T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
     1308forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
    13251309        * ++?( const restrict volatile T * _Atomic restrict volatile * );
    1326 forall( otype T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
     1310forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
    13271311        * ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    13281312
     
    13431327long double --?( volatile long double * ), --?( _Atomic volatile long double * );
    13441328
    1345 forall( otype T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * );
    1346 forall( otype T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * );
    1347 forall( otype T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * );
    1348 forall( otype T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * );
    1349 forall( otype T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * );
    1350 forall( otype T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
     1329forall( type T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * );
     1330forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * );
     1331forall( type T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * );
     1332forall( type T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * );
     1333forall( type T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * );
     1334forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
    13511335        * --?( _Atomic const T * _Atomic restrict volatile * );
    1352 forall( otype T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
     1336forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
    13531337        * --?( _Atomic volatile T * _Atomic restrict volatile * );
    1354 forall( otype T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
     1338forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
    13551339        * --?( _Atomic restrict T * _Atomic restrict volatile * );
    1356 forall( otype T ) const volatile T * --?( const volatile T * restrict volatile * ),
     1340forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ),
    13571341        * --?( const volatile T * _Atomic restrict volatile * );
    1358 forall( otype T ) const restrict T * --?( const restrict T * restrict volatile * ),
     1342forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ),
    13591343        * --?( const restrict T * _Atomic restrict volatile * );
    1360 forall( otype T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
     1344forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
    13611345        * --?( restrict volatile T * _Atomic restrict volatile * );
    1362 forall( otype T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
     1346forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
    13631347        * --?( _Atomic const volatile T * _Atomic restrict volatile * );
    1364 forall( otype T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
     1348forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
    13651349        * --?( _Atomic const restrict T * _Atomic restrict volatile * );
    1366 forall( otype T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
     1350forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
    13671351        * --?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1368 forall( otype T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
     1352forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
    13691353        * --?( const restrict volatile T * _Atomic restrict volatile * );
    1370 forall( otype T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
     1354forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
    13711355        * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    13721356\end{lstlisting}
     
    13961380\predefined
    13971381\begin{lstlisting}
    1398 forall( otype T ) lvalue T *?( T * );
    1399 forall( otype T ) _Atomic lvalue T *?( _Atomic T * );
    1400 forall( otype T ) const lvalue T *?( const T * );
    1401 forall( otype T ) volatile lvalue T *?( volatile T * );
    1402 forall( otype T ) restrict lvalue T *?( restrict T * );
    1403 forall( otype T ) _Atomic const lvalue T *?( _Atomic const T * );
    1404 forall( otype T ) _Atomic volatile lvalue T *?( _Atomic volatile T * );
    1405 forall( otype T ) _Atomic restrict lvalue T *?( _Atomic restrict T * );
    1406 forall( otype T ) const volatile lvalue T *?( const volatile T * );
    1407 forall( otype T ) const restrict lvalue T *?( const restrict T * );
    1408 forall( otype T ) restrict volatile lvalue T *?( restrict volatile T * );
    1409 forall( otype T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * );
    1410 forall( otype T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * );
    1411 forall( otype T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * );
    1412 forall( otype T ) const restrict volatile lvalue T *?( const restrict volatile T * );
    1413 forall( otype T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
     1382forall( type T ) lvalue T *?( T * );
     1383forall( type T ) _Atomic lvalue T *?( _Atomic T * );
     1384forall( type T ) const lvalue T *?( const T * );
     1385forall( type T ) volatile lvalue T *?( volatile T * );
     1386forall( type T ) restrict lvalue T *?( restrict T * );
     1387forall( type T ) _Atomic const lvalue T *?( _Atomic const T * );
     1388forall( type T ) _Atomic volatile lvalue T *?( _Atomic volatile T * );
     1389forall( type T ) _Atomic restrict lvalue T *?( _Atomic restrict T * );
     1390forall( type T ) const volatile lvalue T *?( const volatile T * );
     1391forall( type T ) const restrict lvalue T *?( const restrict T * );
     1392forall( type T ) restrict volatile lvalue T *?( restrict volatile T * );
     1393forall( type T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * );
     1394forall( type T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * );
     1395forall( type T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * );
     1396forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * );
     1397forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
    14141398forall( ftype FT ) FT *?( FT * );
    14151399\end{lstlisting}
     
    15261510\begin{rationale}
    15271511\begin{lstlisting}
    1528 otype Pair = struct { int first, second; };
     1512type Pair = struct { int first, second; };
    15291513size_t p_size = sizeof(Pair);           // constant expression
    1530 extern otype Rational;@\use{Rational}@
     1514extern type Rational;@\use{Rational}@
    15311515size_t c_size = sizeof(Rational);       // non-constant expression
    15321516forall(type T) T f(T p1, T p2) {
     
    16521636Consider
    16531637\begin{lstlisting}
    1654 forall( otype T | T ?*?( T, T ) ) T square( T );
     1638forall( type T | T ?*?( T, T ) ) T square( T );
    16551639short s;
    16561640square( s );
     
    16631647A more troubling example is
    16641648\begin{lstlisting}
    1665 forall( otype T | ?*?( T, T ) ) T product( T[], int n );
     1649forall( type T | ?*?( T, T ) ) T product( T[], int n );
    16661650short sa[5];
    16671651product( sa, 5);
     
    17201704        ?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double );
    17211705
    1722 forall( otype T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t );
    1723 forall( otype T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ),
     1706forall( type T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t );
     1707forall( type T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ),
    17241708        * ?-?( _Atomic T *, ptrdiff_t );
    1725 forall( otype T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ),
     1709forall( type T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ),
    17261710        * ?-?( const T *, ptrdiff_t );
    1727 forall( otype T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ),
     1711forall( type T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ),
    17281712        * ?-?( restrict T *, ptrdiff_t );
    1729 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ),
     1713forall( type T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ),
    17301714        * ?-?( volatile T *, ptrdiff_t );
    1731 forall( otype T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ),
     1715forall( type T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ),
    17321716        * ?-?( _Atomic const T *, ptrdiff_t );
    1733 forall( otype T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ),
     1717forall( type T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ),
    17341718        * ?-?( _Atomic restrict T *, ptrdiff_t );
    1735 forall( otype T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ),
     1719forall( type T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ),
    17361720        * ?-?( _Atomic volatile T *, ptrdiff_t );
    1737 forall( otype T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ),
     1721forall( type T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ),
    17381722        * ?-?( const restrict T *, ptrdiff_t );
    1739 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ),
     1723forall( type T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ),
    17401724        * ?-?( const volatile T *, ptrdiff_t );
    1741 forall( otype T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ),
     1725forall( type T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ),
    17421726        * ?-?( restrict volatile T *, ptrdiff_t );
    1743 forall( otype T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ),
     1727forall( type T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ),
    17441728        * ?+?( ptrdiff_t, _Atomic const restrict T * ),
    17451729        * ?-?( _Atomic const restrict T *, ptrdiff_t );
    1746 forall( otype T ) ptrdiff_t
     1730forall( type T ) ptrdiff_t
    17471731        * ?-?( const restrict volatile T *, const restrict volatile T * ),
    17481732        * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
     
    20682052
    20692053\begin{lstlisting}
    2070 extern otype Rational;@\use{Rational}@
     2054extern type Rational;@\use{Rational}@
    20712055extern const Rational 0;@\use{0}@
    20722056extern int ?!=?( Rational, Rational );
     
    21112095If the second and third operands both have interpretations with non-\lstinline$void$ types, the expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'', with \lstinline$cond$ declared as
    21122096\begin{lstlisting}
    2113 forall( otype T ) T cond( int, T, T );
     2097forall( type T ) T cond( int, T, T );
    21142098forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * );
    21152099forall( dtype D ) _atomic void * cond(
     
    24712455\predefined
    24722456\begin{lstlisting}
    2473 forall( otype T ) T
     2457forall( type T ) T
    24742458        * ?+=?( T * restrict volatile *, ptrdiff_t ),
    24752459        * ?-=?( T * restrict volatile *, ptrdiff_t ),
    24762460        * ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ),
    24772461        * ?-=?( T * _Atomic restrict volatile *, ptrdiff_t );
    2478 forall( otype T ) T _Atomic
     2462forall( type T ) T _Atomic
    24792463        * ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ),
    24802464        * ?-=?( T _Atomic * restrict volatile *, ptrdiff_t ),
    24812465        * ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ),
    24822466        * ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t );
    2483 forall( otype T ) T const
     2467forall( type T ) T const
    24842468        * ?+=?( T const * restrict volatile *, ptrdiff_t ),
    24852469        * ?-=?( T const * restrict volatile *, ptrdiff_t ),
    24862470        * ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ),
    24872471        * ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t );
    2488 forall( otype T ) T restrict
     2472forall( type T ) T restrict
    24892473        * ?+=?( T restrict * restrict volatile *, ptrdiff_t ),
    24902474        * ?-=?( T restrict * restrict volatile *, ptrdiff_t ),
    24912475        * ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ),
    24922476        * ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t );
    2493 forall( otype T ) T volatile
     2477forall( type T ) T volatile
    24942478        * ?+=?( T volatile * restrict volatile *, ptrdiff_t ),
    24952479        * ?-=?( T volatile * restrict volatile *, ptrdiff_t ),
    24962480        * ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ),
    24972481        * ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t );
    2498 forall( otype T ) T _Atomic const
     2482forall( type T ) T _Atomic const
    24992483        * ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ),
    25002484        * ?-=?( T _Atomic const restrict volatile *, ptrdiff_t ),
    25012485        * ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ),
    25022486        * ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t );
    2503 forall( otype T ) T _Atomic restrict
     2487forall( type T ) T _Atomic restrict
    25042488        * ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
    25052489        * ?-=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
    25062490        * ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ),
    25072491        * ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t );
    2508 forall( otype T ) T _Atomic volatile
     2492forall( type T ) T _Atomic volatile
    25092493        * ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
    25102494        * ?-=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
    25112495        * ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ),
    25122496        * ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t );
    2513 forall( otype T ) T const restrict
     2497forall( type T ) T const restrict
    25142498        * ?+=?( T const restrict * restrict volatile *, ptrdiff_t ),
    25152499        * ?-=?( T const restrict * restrict volatile *, ptrdiff_t ),
    25162500        * ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    25172501        * ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t );
    2518 forall( otype T ) T const volatile
     2502forall( type T ) T const volatile
    25192503        * ?+=?( T const volatile * restrict volatile *, ptrdiff_t ),
    25202504        * ?-=?( T const volatile * restrict volatile *, ptrdiff_t ),
    25212505        * ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    25222506        * ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t );
    2523 forall( otype T ) T restrict volatile
     2507forall( type T ) T restrict volatile
    25242508        * ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
    25252509        * ?-=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
    25262510        * ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    25272511        * ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    2528 forall( otype T ) T _Atomic const restrict
     2512forall( type T ) T _Atomic const restrict
    25292513        * ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
    25302514        * ?-=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
    25312515        * ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    25322516        * ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t );
    2533 forall( otype T ) T _Atomic const volatile
     2517forall( type T ) T _Atomic const volatile
    25342518        * ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
    25352519        * ?-=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
    25362520        * ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    25372521        * ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t );
    2538 forall( otype T ) T _Atomic restrict volatile
     2522forall( type T ) T _Atomic restrict volatile
    25392523        * ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
    25402524        * ?-=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
    25412525        * ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    25422526        * ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    2543 forall( otype T ) T const restrict volatile
     2527forall( type T ) T const restrict volatile
    25442528        * ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
    25452529        * ?-=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
    25462530        * ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    25472531        * ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    2548 forall( otype T ) T _Atomic const restrict volatile
     2532forall( type T ) T _Atomic const restrict volatile
    25492533        * ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
    25502534        * ?-=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
     
    28582842This sort of declaration is illegal because the scope of the type identifiers ends at the end of the declaration, but the scope of the structure tag does not.
    28592843\begin{lstlisting}
    2860 forall( otype T ) struct Pair { T a, b;
     2844forall( type T ) struct Pair { T a, b;
    28612845} mkPair( T, T ); // illegal
    28622846\end{lstlisting}
     
    28832867If this restriction were lifted, it would be possible to write
    28842868\begin{lstlisting}
    2885 forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
     2869forall( type T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
    28862870\end{lstlisting}
    28872871Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
     
    28922876\lstinline$T$:
    28932877\begin{lstlisting}
    2894 forall( otype T ) T * alloc( T initial_value );@\use{alloc}@
     2878forall( type T ) T * alloc( T initial_value );@\use{alloc}@
    28952879\end{lstlisting}
    28962880\end{rationale}
     
    29152899\begin{lstlisting}
    29162900int fi( int );
    2917 forall( otype T ) T fT( T );
     2901forall( type T ) T fT( T );
    29182902\end{lstlisting}
    29192903\lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a
     
    29212905\begin{lstlisting}
    29222906int (*pfi )( int ) = fi;
    2923 forall( otype T ) T (*pfT )( T ) = fT;
     2907forall( type T ) T (*pfT )( T ) = fT;
    29242908\end{lstlisting}
    29252909\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is.
     
    29282912        return pfi;
    29292913}
    2930 forall( otype T ) T (*fvpfT( void ))( T ) {
     2914forall( type T ) T (*fvpfT( void ))( T ) {
    29312915        return pfT;
    29322916}
     
    29342918\lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points at is polymorphic.
    29352919\begin{lstlisting}
    2936 forall( otype T ) int ( *fTpfi( T ) )( int );
    2937 forall( otype T ) T ( *fTpfT( T ) )( T );
    2938 forall( otype T, otype U ) U ( *fTpfU( T ) )( U );
     2920forall( type T ) int ( *fTpfi( T ) )( int );
     2921forall( type T ) T ( *fTpfT( T ) )( T );
     2922forall( type T, type U ) U ( *fTpfU( T ) )( U );
    29392923\end{lstlisting}
    29402924\lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
     
    29462930\lstinline$char *$.
    29472931\begin{lstlisting}
    2948 forall( otype T, otype U, otype V ) U * f( T *, U, V * const );
    2949 forall( otype U, otype V, otype W ) U * g( V *, U, W * const );
     2932forall( type T, type U, type V ) U * f( T *, U, V * const );
     2933forall( type U, type V, type W ) U * g( V *, U, W * const );
    29502934\end{lstlisting}
    29512935The functions \lstinline$f()$ and \lstinline$g()$ have compatible types.
     
    29552939Replacing every \(f_i\) by \(g_i\) in \(f\) gives
    29562940\begin{lstlisting}
    2957 forall( otype V, otype U, otype W ) U * f( V *, U, W * const );
     2941forall( type V, type U, type W ) U * f( V *, U, W * const );
    29582942\end{lstlisting} which has a return type and parameter list that is compatible with \(g\).
    29592943\begin{rationale}
     
    31433127\examples
    31443128\begin{lstlisting}
    3145 forall( otype T | T ?*?( T, T ))@\use{?*?}@
     3129forall( type T | T ?*?( T, T ))@\use{?*?}@
    31463130T square( T val ) {@\impl{square}@
    31473131        return val + val;
    31483132}
    3149 trait summable( otype T ) {@\impl{summable}@
     3133context summable( type T ) {@\impl{summable}@
    31503134        T ?+=?( T *, T );@\use{?+=?}@
    31513135        const T 0;@\use{0}@
    31523136};
    3153 trait list_of( otype List, otype Element ) {@\impl{list_of}@
     3137context list_of( type List, type Element ) {@\impl{list_of}@
    31543138        Element car( List );
    31553139        List cdr( List );
     
    31583142        int is_nil( List );
    31593143};
    3160 trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {};
     3144context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {};
    31613145\end{lstlisting}
    31623146\lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up.
     
    32203204Incomplete type declarations allow compact mutually-recursive types.
    32213205\begin{lstlisting}
    3222 otype t1; // incomplete type declaration
    3223 otype t2 = struct { t1 * p; ... };
    3224 otype t1 = struct { t2 * p; ... };
     3206type t1; // incomplete type declaration
     3207type t2 = struct { t1 * p; ... };
     3208type t1 = struct { t2 * p; ... };
    32253209\end{lstlisting}
    32263210Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures.
    32273211\begin{lstlisting}
    32283212struct s1;
    3229 otype t2 = struct s2 { struct s1 * p; ... };
    3230 otype t1 = struct s1 { struct s2 * p; ... };
     3213type t2 = struct s2 { struct s1 * p; ... };
     3214type t1 = struct s1 { struct s2 * p; ... };
    32313215\end{lstlisting}
    32323216This introduces extra names, and may force the programmer to cast between the types and their implementations.
     
    32833267This prevents the declaration of types that contain each other.
    32843268\begin{lstlisting}
    3285 otype t1;
    3286 otype t2 = t1; // illegal: incomplete type t1
    3287 otype t1 = t2;
     3269type t1;
     3270type t2 = t1; // illegal: incomplete type t1
     3271type t1 = t2;
    32883272\end{lstlisting}
    32893273
     
    32923276 types}.
    32933277\begin{lstlisting}
    3294 extern otype Huge; // extended-precision integer type
    3295 otype Rational = struct {
     3278extern type Huge; // extended-precision integer type
     3279type Rational = struct {
    32963280        Huge numerator, denominator;    // illegal
    32973281};
     
    33323316\begin{lstlisting}
    33333317#include <stdlib.h>
    3334 T * new( otype T ) { return ( T * )malloc( sizeof( T) ); };
     3318T * new( type T ) { return ( T * )malloc( sizeof( T) ); };
    33353319@\ldots@ int * ip = new( int );
    33363320\end{lstlisting}
     
    33433327Since type declarations create new types, instances of types are always passed by value.
    33443328\begin{lstlisting}
    3345 otype A1 = int[2];
     3329type A1 = int[2];
    33463330void f1( A1 a ) { a[0] = 0; };
    3347 otypedef int A2[2];
     3331typedef int A2[2];
    33483332void f2( A2 a ) { a[0] = 0; };
    33493333A1 v1;
     
    33623346That unit might contain the declarations
    33633347\begin{lstlisting}
    3364 otype Complex = struct { float re, im; };@\impl{Complex}@
     3348type Complex = struct { float re, im; };@\impl{Complex}@
    33653349Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@
    33663350float abs( Complex c ) {@\impl{abs( Complex )}@
     
    33713355
    33723356\begin{lstlisting}
    3373 otype Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight.
     3357type Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight.
    33743358Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@
    33753359        return (( int)t1 + seconds ) % 86400;
     
    34453429\examples
    34463430\begin{lstlisting}
    3447 trait s( otype T ) {
     3431context s( type T ) {
    34483432        T a, b;
    34493433} struct impl { int left, right; } a = { 0, 0 };
    3450 otype Pair | s( Pair ) = struct impl;
     3434type Pair | s( Pair ) = struct impl;
    34513435Pair b = { 1, 1 };
    34523436\end{lstlisting}
     
    34563440\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from.
    34573441\begin{lstlisting}
    3458 trait ss( otype T ) {
     3442context ss( type T ) {
    34593443        T clone( T );
    34603444        void munge( T * );
    34613445}
    3462 otype Whatsit | ss( Whatsit );@\use{Whatsit}@
    3463 otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
     3446type Whatsit | ss( Whatsit );@\use{Whatsit}@
     3447type Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
    34643448        Whatsit; // anonymous member
    34653449        int extra;
     
    34823466Default functions and objects are subject to the normal scope rules.
    34833467\begin{lstlisting}
    3484 otype T = @\ldots@;
     3468type T = @\ldots@;
    34853469T a_T = @\ldots@;               // Default assignment used.
    34863470T ?=?( T *, T );
     
    37513735The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''.
    37523736\begin{lstlisting}
    3753 trait scalar( otype T ) {@\impl{scalar}@
     3737context scalar( type T ) {@\impl{scalar}@
    37543738        int !?( T );
    37553739        int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T );
     
    37613745This is equivalent to inheritance of specifications.
    37623746\begin{lstlisting}
    3763 trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
     3747context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
    37643748        T +?( T ), -?( T );
    37653749        T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T );
     
    37703754\define{integral types}.
    37713755\begin{lstlisting}
    3772 trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
     3756context integral( type T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
    37733757        T ~?( T );
    37743758        T ?&?( T, T ), ?|?( T, T ), ?^?( T, T );
     
    37843768The only operation that can be applied to all modifiable lvalues is simple assignment.
    37853769\begin{lstlisting}
    3786 trait m_lvalue( otype T ) {@\impl{m_lvalue}@
     3770context m_lvalue( type T ) {@\impl{m_lvalue}@
    37873771        T ?=?( T *, T );
    37883772};
     
    37943778Scalars can also be incremented and decremented.
    37953779\begin{lstlisting}
    3796 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
     3780context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
    37973781        T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@
    37983782        T ++?( T * ), --?( T * );
     
    38033787Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths.
    38043788\begin{lstlisting}
    3805 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
     3789context m_l_arithmetic( type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
    38063790        T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@
    38073791        T ?+=?( T *, T ), ?-=?( T *, T );
    38083792};
    3809 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
     3793context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
    38103794        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
    38113795        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@
     
    38273811\lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
    38283812\begin{lstlisting}
    3829 trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
     3813context pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
    38303814        P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int );
    38313815        ptrdiff_t ?-?( P, P );
    38323816};
    3833 trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
     3817context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
    38343818        P ?+=?( P *, long int ), ?-=?( P *, long int );
    38353819        P ?=?( P *, void * );
     
    38433827``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
    38443828\begin{lstlisting}
    3845 trait ptr_to( type P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@
     3829context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@
    38463830        lvalue T *?( P );
    38473831        lvalue T ?[?]( P, long int );
    38483832};
    3849 trait ptr_to_const( type P | pointer( P ), otype T ) {@\impl{ptr_to_const}@
     3833context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@
    38503834        const lvalue T *?( P );
    38513835        const lvalue T ?[?]( P, long int );@\use{pointer}@
    38523836};
    3853 trait ptr_to_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@
     3837context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@
    38543838        volatile lvalue T *?( P );
    38553839        volatile lvalue T ?[?]( P, long int );@\use{pointer}@
    38563840};
    3857 trait ptr_to_const_volatile( type P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@
     3841context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@
    38583842        const volatile lvalue T *?( P );@\use{pointer}@
    38593843        const volatile lvalue T ?[?]( P, long int );
     
    38653849``\lstinline$ptr_to$'' specifications.
    38663850\begin{lstlisting}
    3867 trait m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ otype T | ptr_to( P, T )@\use{ptr_to}@ {
     3851context m_l_ptr_to( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ type T | ptr_to( P, T )@\use{ptr_to}@ {
    38683852        P ?=?( P *, T * );
    38693853        T * ?=?( T **, P );
    38703854};
    3871 trait m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ otype T | ptr_to_const( P, T )@\use{ptr_to_const}@) {
     3855context m_l_ptr_to_const( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_const}@ type T | ptr_to_const( P, T )@\use{ptr_to_const}@) {
    38723856        P ?=?( P *, const T * );
    38733857        const T * ?=?( const T **, P );
    38743858};
    3875 trait m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ otype T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@
     3859context m_l_ptr_to_volatile( type P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to_volatile}@ type T | ptr_to_volatile( P, T )) {@\use{ptr_to_volatile}@
    38763860        P ?=?( P *, volatile T * );
    38773861        volatile T * ?=?( volatile T **, P );
    38783862};
    3879 trait m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@
     3863context m_l_ptr_to_const_volatile( type P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@
    38803864                type T | m_l_ptr_to_volatile( P, T ) | m_l_ptr_to_const( P )) {@\use{m_l_ptr_to_const}@@\use{m_l_ptr_to_volatile}@
    38813865        P ?=?( P *, const volatile T * );
     
    38873871An alternative specification can make use of the fact that qualification of the pointed-at type is part of a pointer type to capture that regularity.
    38883872\begin{lstlisting}
    3889 trait m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) {
     3873context m_l_ptr_like( type MyP | m_l_pointer( MyP ),@\use{m_l_pointer}@@\impl{m_l_ptr_like}@ type CP | m_l_pointer( CP ) ) {
    38903874        MyP ?=?( MyP *, CP );
    38913875        CP ?=?( CP *, MyP );
     
    39203904C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
    39213905\begin{lstlisting}
    3922 trait comparable( otype T ) {
     3906context comparable( type T ) {
    39233907        const T 0;
    39243908        int compare( T, T );
    39253909}
    3926 forall( otype T | comparable( T ) ) int ?<?( T l, T r ) {
     3910forall( type T | comparable( T ) ) int ?<?( T l, T r ) {
    39273911        return compare( l, r ) < 0;
    39283912}
    39293913// ... similarly for <=, ==, >=, >, and !=.
    3930 forall( otype T | comparable( T ) ) int !?( T operand ) {
     3914forall( type T | comparable( T ) ) int !?( T operand ) {
    39313915        return !compare( operand, 0 );
    39323916}
     
    39403924Similarly, a complete integral type would provide integral operations based on integral assignment operations.
    39413925\begin{lstlisting}
    3942 trait arith_base( otype T ) {
     3926context arith_base( type T ) {
    39433927        const T 1;
    39443928        T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T );
    39453929}
    3946 forall( otype T | arith_base( T ) ) T ?+?( T l, T r ) {
     3930forall( type T | arith_base( T ) ) T ?+?( T l, T r ) {
    39473931        return l += r;
    39483932}
    3949 forall( otype T | arith_base( T ) ) T ?++( T * operand ) {
     3933forall( type T | arith_base( T ) ) T ?++( T * operand ) {
    39503934        T temporary = *operand;
    39513935        *operand += 1;
    39523936        return temporary;
    39533937}
    3954 forall( otype T | arith_base( T ) ) T ++?( T * operand ) {
     3938forall( type T | arith_base( T ) ) T ++?( T * operand ) {
    39553939        return *operand += 1;
    39563940}
    39573941// ... similarly for -, --, *, and /.
    3958 trait int_base( otype T ) {
     3942context int_base( type T ) {
    39593943        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );
    39603944        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );
    39613945}
    3962 forall( otype T | int_base( T ) ) T ?&?( T l, T r ) {
     3946forall( type T | int_base( T ) ) T ?&?( T l, T r ) {
    39633947        return l &= r;
    39643948}
  • src/Parser/DeclarationNode.cc

    rb3f9a0cb r89173242  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 21:04:23 2016
    13 // Update Count     : 142
     12// Last Modified On : Wed Mar  2 17:26:24 2016
     13// Update Count     : 134
    1414//
    1515
     
    4242UniqueName DeclarationNode::anonymous( "__anonymous" );
    4343
    44 extern LinkageSpec::Type linkage;                                               // defined in parser.yy
     44extern LinkageSpec::Type linkage;               /* defined in cfa.y */
    4545
    4646DeclarationNode *DeclarationNode::clone() const {
     
    5555        newnode->linkage = linkage;
    5656        return newnode;
    57 } // DeclarationNode::clone
     57}
    5858
    5959DeclarationNode::DeclarationNode() : type( 0 ), bitfieldWidth( 0 ), initializer( 0 ), hasEllipsis( false ), linkage( ::linkage ) {
     
    117117        newnode->type->function->newStyle = newStyle;
    118118        newnode->type->function->body = body;
    119         typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );
    120119
    121120        if ( body ) {
     
    130129
    131130        return newnode;
    132 } // DeclarationNode::newFunction
     131}
    133132
    134133DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) {
     
    137136        newnode->type->qualifiers.push_back( q );
    138137        return newnode;
    139 } // DeclarationNode::newQualifier
     138}
    140139
    141140DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
     
    143142        newnode->storageClasses.push_back( sc );
    144143        return newnode;
    145 } // DeclarationNode::newStorageClass
     144}
    146145
    147146DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) {
     
    150149        newnode->type->basic->typeSpec.push_back( bt );
    151150        return newnode;
    152 } // DeclarationNode::newBasicType
     151}
    153152
    154153DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
     
    157156        newnode->type->builtin->type = bt;
    158157        return newnode;
    159 } // DeclarationNode::newBuiltinType
     158}
    160159
    161160DeclarationNode *DeclarationNode::newModifier( Modifier mod ) {
     
    164163        newnode->type->basic->modifiers.push_back( mod );
    165164        return newnode;
    166 } // DeclarationNode::newModifier
     165}
    167166
    168167DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) {
     
    171170        newnode->type->forall = forall;
    172171        return newnode;
    173 } // DeclarationNode::newForall
     172}
    174173
    175174DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) {
     
    180179        newnode->type->symbolic->params = 0;
    181180        return newnode;
    182 } // DeclarationNode::newFromTypedef
     181}
    183182
    184183DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields ) {
     
    189188        if ( newnode->type->aggregate->name == "" ) {           // anonymous aggregate ?
    190189                newnode->type->aggregate->name = DeclarationNode::anonymous.newName();
    191         } else if ( ! typedefTable.exists( newnode->type->aggregate->name ) ) {
    192                 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
    193                 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed
    194                 // if the name is explicitly used.
     190        } else {
     191                // SKULLDUGGERY: generate a typedef for the aggregate name so that the aggregate does not have to be qualified
     192                // by "struct"
    195193                typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD );
    196194                DeclarationNode *typedf = new DeclarationNode;
     
    201199        newnode->type->aggregate->fields = fields;
    202200        return newnode;
    203 } // DeclarationNode::newAggregate
     201}
    204202
    205203DeclarationNode *DeclarationNode::newEnum( std::string *name, DeclarationNode *constants ) {
     
    210208        if ( newnode->type->enumeration->name == "" ) {         // anonymous enumeration ?
    211209                newnode->type->enumeration->name = DeclarationNode::anonymous.newName();
    212         } else if ( ! typedefTable.exists( newnode->type->enumeration->name ) ) {
    213                 // SKULLDUGGERY: Generate a typedef for the enumeration name so the enumeration does not have to be qualified by
    214                 // "enum". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed if
    215                 // the name is explicitly used.
     210        } else {
     211                // SKULLDUGGERY: generate a typedef for the enumeration name so that the enumeration does not have to be
     212                // qualified by "enum"
    216213                typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD );
    217214                DeclarationNode *typedf = new DeclarationNode;
     
    221218        newnode->type->enumeration->constants = constants;
    222219        return newnode;
    223 } // DeclarationNode::newEnum
     220}
    224221
    225222DeclarationNode *DeclarationNode::newEnumConstant( std::string *name, ExpressionNode *constant ) {
     
    227224        newnode->name = assign_strptr( name );
    228225        newnode->enumeratorValue = constant;
    229         typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );
    230         return newnode;
    231 } // DeclarationNode::newEnumConstant
     226        return newnode;
     227}
    232228
    233229DeclarationNode *DeclarationNode::newName( std::string *name ) {
     
    235231        newnode->name = assign_strptr( name );
    236232        return newnode;
    237 } // DeclarationNode::newName
     233}
    238234
    239235DeclarationNode *DeclarationNode::newFromTypeGen( std::string *name, ExpressionNode *params ) {
     
    244240        newnode->type->symbolic->actuals = params;
    245241        return newnode;
    246 } // DeclarationNode::newFromTypeGen
     242}
    247243
    248244DeclarationNode *DeclarationNode::newTypeParam( TypeClass tc, std::string *name ) {
     
    253249        newnode->type->variable->name = newnode->name;
    254250        return newnode;
    255 } // DeclarationNode::newTypeParam
     251}
    256252
    257253DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
     
    263259        newnode->type->aggregate->name = assign_strptr( name );
    264260        return newnode;
    265 } // DeclarationNode::newTrait
     261}
    266262
    267263DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) {
     
    273269        newnode->type->aggInst->params = params;
    274270        return newnode;
    275 } // DeclarationNode::newTraitUse
     271}
    276272
    277273DeclarationNode *DeclarationNode::newTypeDecl( std::string *name, DeclarationNode *typeParams ) {
     
    283279        newnode->type->symbolic->name = newnode->name;
    284280        return newnode;
    285 } // DeclarationNode::newTypeDecl
     281}
    286282
    287283DeclarationNode *DeclarationNode::newPointer( DeclarationNode *qualifiers ) {
     
    289285        newnode->type = new TypeData( TypeData::Pointer );
    290286        return newnode->addQualifiers( qualifiers );
    291 } // DeclarationNode::newPointer
     287}
    292288
    293289DeclarationNode *DeclarationNode::newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic ) {
     
    302298        } // if
    303299        return newnode->addQualifiers( qualifiers );
    304 } // DeclarationNode::newArray
     300}
    305301
    306302DeclarationNode *DeclarationNode::newVarArray( DeclarationNode *qualifiers ) {
  • src/Parser/ExpressionNode.cc

    rb3f9a0cb r89173242  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Mar 13 12:34:38 2016
    13 // Update Count     : 272
     12// Last Modified On : Mon Feb  1 13:32:30 2016
     13// Update Count     : 271
    1414//
    1515
     
    487487                args.front() = new AddressExpr( args.front() );
    488488                break;
    489           default:              // do nothing
     489          default:
     490                /* do nothing */
    490491                ;
    491         } // switch
     492        }
    492493
    493494        switch ( op->get_type() ) {
  • src/Parser/Parser.cc

    rb3f9a0cb r89173242  
    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 : Sun May 31 23:45:19 2015
     13// Update Count     : 4
    1414//
    1515
    1616#include "Parser.h"
     17#include "TypedefTable.h"
    1718#include "lex.h"
    1819#include "parser.h"
    19 #include "TypedefTable.h"
    2020
    2121// global variables in cfa.y
  • src/Parser/TypedefTable.cc

    rb3f9a0cb r89173242  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 18:18:58 2016
    13 // Update Count     : 23
     12// Last Modified On : Wed Mar  2 17:25:55 2016
     13// Update Count     : 20
    1414//
    1515
    1616#include <map>
    1717#include <list>
     18#include "TypedefTable.h"
    1819#include <cassert>
    19 #include "TypedefTable.h"
    2020using namespace std;
    2121
     
    2929TypedefTable::TypedefTable() : currentScope( 0 ) {}
    3030
    31 bool TypedefTable::exists( const string &identifier ) {
    32         return table.count( identifier ) > 0;
     31void TypedefTable::changeKind( const string &identifier, kind_t kind ) {
     32        tableType::iterator id_pos = table.find( identifier );
     33        if ( id_pos == table.end() ) {
     34                return;
     35        } else {
     36                (*((*id_pos ).second.begin())).kind = kind;
     37                return;
     38        } // if
    3339}
    3440
    35 void TypedefTable::changeKind( const string &identifier, kind_t kind ) {
    36         tableType::iterator id_pos = table.find( identifier );
    37         if ( id_pos == table.end() ) return;
    38         id_pos->second.begin()->kind = kind;
     41bool TypedefTable::isKind( const string &identifier, kind_t kind ) const {
     42        tableType::const_iterator id_pos = table.find( identifier );
     43        if ( id_pos == table.end() ) {
     44                return true;
     45        } else {
     46                return (*((*id_pos ).second.begin())).kind == kind;
     47        } // if
    3948}
    4049
    41 int TypedefTable::isKind( const string &identifier ) const {
    42         tableType::const_iterator id_pos = table.find( identifier );
    43         // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.
    44         if ( id_pos == table.end() ) return IDENTIFIER;
    45         return id_pos->second.begin()->kind;
     50bool TypedefTable::isIdentifier( const string &identifier ) const {
     51        return isKind( identifier, ID );
     52}
     53
     54bool TypedefTable::isTypedef( const string &identifier ) const {
     55        return isKind( identifier, TD );
     56}
     57
     58bool TypedefTable::isTypegen( const string &identifier ) const {
     59        return isKind( identifier, TG );
    4660}
    4761
  • src/Parser/TypedefTable.h

    rb3f9a0cb r89173242  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 18:17:36 2016
    13 // Update Count     : 24
     12// Last Modified On : Wed Mar  2 17:26:54 2016
     13// Update Count     : 12
    1414//
    1515
     
    2222#include <stack>
    2323
    24 #include "lex.h"
    25 #include "parser.h"
    26 
    2724class TypedefTable {
    2825  public:
    29         enum kind_t { ID = IDENTIFIER, TD = TYPEDEFname, TG = TYPEGENname };
     26        enum kind_t { ID, TD, TG };
    3027  private:
    3128        struct Entry {
     
    5249        std::stack< std::string > nextIdentifiers;
    5350
     51        bool isKind( const std::string &identifier, kind_t kind ) const;
    5452        void addToScope( const std::string &identifier, kind_t kind, int scope );
    5553  public:
    5654        TypedefTable();
    5755
    58         bool exists( const std::string &identifier );
    59         int isKind( const std::string &identifier ) const;
     56        bool isIdentifier( const std::string &identifier ) const;
     57        bool isTypedef( const std::string &identifier ) const;
     58        bool isTypegen( const std::string &identifier ) const;
     59
    6060        void changeKind( const std::string &identifier, kind_t kind );
    6161       
  • src/Parser/lex.cc

    rb3f9a0cb r89173242  
    418418      120,  120,    0,    0,    0,  118,    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,
     420        0,  133,  112,  112,    0,  112,  112,  112,    0,    6,
     421      112,  110,    0,    0,    0,  112,    0,  110,  110,  110,
    422422      110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
    423423      171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
     
    433433        0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
    434434      178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
    435       112,    0,  112,    0,    0,  112,    0,  110,  110,    0,
     435      112,    0,  112,    0,    0,  112,  112,  110,  110,    0,
    436436        0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
    437437        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
     
    445445      102,  102,  102,  102,   97,  102,  102,    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,
     447        0,  120,    0,    0,    0,    0,    0,  112,  112,    0,
    448448        0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
    449449
     
    459459        0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
    460460
    461       113,  113,  113,    0,  111,    0,    0,    0,    0,    0,
     461      113,  113,  113,  113,  111,    0,    0,    0,    0,    0,
    462462        0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
    463463      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
     
    467467       81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
    468468        0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
    469       120,    0,    0,    0,    0,  113,    0,  113,  113,    0,
     469      120,    0,    0,    0,    0,  113,  113,  113,  113,    0,
    470470        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
    471471
     
    500500       16,   17,   18,   19,   20,   21,   22,   23,   24,   25,
    501501       26,   26,   26,   26,   26,   27,   28,   29,   30,   31,
    502        32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
    503        42,   11,   43,   11,   11,   44,   11,   45,   11,   46,
    504        11,   47,   48,   49,   50,   11,   11,   51,   11,   11,
    505        52,   53,   54,   55,   56,   57,   58,   59,   60,   61,
    506 
    507        62,   63,   64,   65,   66,   11,   67,   68,   69,   70,
    508        71,   72,   11,   73,   74,   75,   76,   77,   78,   79,
    509        80,   81,   82,   83,   84,   85,    1,    1,    1,    1,
     502       32,   33,   34,   35,   36,   37,   38,   39,   40,   39,
     503       41,   11,   42,   11,   11,   43,   11,   44,   11,   45,
     504       11,   46,   47,   48,   49,   11,   11,   50,   11,   11,
     505       51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
     506
     507       61,   62,   63,   64,   65,   11,   66,   67,   68,   69,
     508       70,   71,   11,   72,   73,   74,   75,   76,   77,   78,
     509       79,   80,   81,   82,   83,   84,    1,    1,    1,    1,
    510510        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    511511        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    524524    } ;
    525525
    526 static yyconst flex_int32_t yy_meta[86] =
     526static yyconst flex_int32_t yy_meta[85] =
    527527    {   0,
    528528        1,    1,    2,    1,    1,    1,    1,    1,    3,    1,
     
    530530        6,    1,    7,    7,    7,    7,    7,    7,    1,    1,
    531531        1,    8,    1,    1,    1,    9,    9,    9,    9,    9,
    532         9,    4,    4,   10,    4,   11,    4,    4,    4,   10,
    533         4,    1,   12,    1,    1,   13,    1,    9,    9,    9,
    534         9,    9,    9,    4,    4,    4,    4,   10,    4,    4,
    535         4,   11,    4,    4,    4,   10,    4,    4,    4,    4,
    536         4,    1,    1,    1,    1
     532        4,    4,   10,    4,   11,    4,    4,    4,   10,    4,
     533        1,   12,    1,    1,   13,    1,    9,    9,    9,    9,
     534        9,    9,    4,    4,    4,    4,   10,    4,    4,    4,
     535       11,    4,    4,    4,   10,    4,    4,    4,    4,    4,
     536        1,    1,    1,    1
    537537    } ;
    538538
    539539static yyconst flex_int16_t yy_base[1062] =
    540540    {   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,
    546       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,
    557       282,  433,  372,  281,  437,  434,  428,  570,  444,  466,
    558       464,  469,  475,  321,  492,  438,  471,  445,  474,  512,
    559       489,  503,  496,  521,  276,  515,  516, 2189,  526,  510,
    560       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,
    571       709,  711,  698,  566,  726,  743,  771,  741,  790,  784,
    572       800,  795,  742,  744,  814,  816,  818, 2118,  819,  745,
    573 
    574       820,  821,  822,  823,  824,  746,  825,  748,  659,  831,
    575       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,
    584 
    585       886,  941,  960,  962,  977,  976,  980,  982, 1017, 1010,
    586      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,
    590      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,
    598      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,
    609      1341, 1323, 1368, 1369, 1374, 1356, 1383, 1372, 1388, 1390,
    610      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,
    619      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
     541        0,   83, 2268, 2265,   93,    0,  175,  176,  177,  178,
     542     2279, 2798,  189, 2798,  195,   54, 2798, 2226,   59,  171,
     543     2798, 2798, 2798,   55,  186, 2798,  189,  187,  202,  214,
     544      272,    0, 2244, 2798,  214, 2243,  150,  340,  153,  222,
     545     2798,  157, 2798,  215,  224, 2798,  207,  181,  221,  249,
     546      235,  289,  155,  255,  218,  231,  206,  266,  256,  323,
     547      259,  192, 2798,  252, 2798, 2238,  377,  342, 2798, 2249,
     548     2798, 2218,  241, 2798,    0, 2798,  421,    0, 2798,  393,
     549     2798,  399,  405, 2798,  492, 2216,  276, 2798, 2798, 2798,
     550     2798, 2798, 2231, 2798, 2228, 2798, 2798, 2240,  552, 2798,
     551
     552     2257, 2798,  413,  393,  437,  493,  377,  318,  195,  430,
     553      382,    0,  384,  321,  196,  427, 2798, 2798, 2798, 2226,
     554     2798, 2798, 2798, 2223, 2220,  304,  342, 2235,  381,  435,
     555      422,  400,  455,  440,  494, 2216,  469, 2165,  497, 2193,
     556     2798,  432, 2798, 2798,  521, 2187, 2186, 2798, 2159,  470,
     557      414,  436,  325,  254,  463,  480,  486,  563,  274,  482,
     558      484,  487,  495,  234,  489,  341,  488,  490,  377,  507,
     559      497,  501,  503,  514,  515,  506,  529, 2186,  531,  537,
     560      505,  518,  536,  534,  538,  559,  575,  571,  577,  574,
     561      599,  590,  581,  592, 2798, 2798,  662,  668, 2232,  674,
     562
     563     2798,  680, 2798, 2180,  583, 2176, 2175,    0,  671, 2798,
     564     2798,  686, 2173, 2170, 2167,    0, 2189,  568,  615,  618,
     565      695,  694,  627,  654,  628,  683, 2186,  686,  687, 2163,
     566     2160, 2798,    0,  680,  712,  703,  682, 2157, 2208, 2798,
     567      711,    0,  702,  756,  762,  795,  774,  604, 2798, 2167,
     568     2141,    0,  803, 2167,  780,  684, 2798, 2143, 2118,  804,
     569     2798, 2798, 2148, 2798, 2798,  724,  728, 2126, 2126,  694,
     570     2122, 2120, 2117,    0, 2114,    0, 2085,  679,  682,  696,
     571      423,  722,  757,  703,  758,  741,  799,  764,  725,  789,
     572      697,  774,  788,  792,  760,  784,  795, 2115,  809,  797,
     573
     574      816,  196,  804,  812,  817,  823,  829,  632,  831,  832,
     575      836,  819,  837,  833,  840,  844,  847,  843,  853,  851,
     576     2113,  854,  855,  856,  859,  857,  858,  860,  861,  867,
     577      863,  866,  868,  873,  874, 2110,  877,  716,  882,  883,
     578      884,  888,  894,  947,  944, 2104, 2103, 2102,    0, 2100,
     579        0,  934,  939, 2097,    0, 2094,    0, 2093,    0, 2113,
     580     2798,  934,  935, 2092, 2087,    0, 2086,    0, 2798,  947,
     581      967,  958, 2798,  973,  988, 1012, 2085, 2798, 2798,  932,
     582      962,  999,  975, 1033,  912, 1020,  956, 2798, 2798, 2083,
     583     2080, 2079,    0, 2078,    0, 2076,    0, 2073,    0, 2798,
     584
     585      956,  936,  978,  950,  994, 1010, 1016,  973, 1019, 1020,
     586     1024, 1012, 1029, 1030, 1026, 1027, 1032, 1038, 1044, 1031,
     587     1051, 1049, 1041, 2072, 1055, 2068, 1054, 2066, 1057, 1058,
     588     1059,  974, 1061, 1064, 1065, 2064, 1070, 2061, 1063, 1071,
     589     1073, 1075, 1076, 1081, 1077, 2059, 1082, 2057, 1084, 1087,
     590     1089, 1092, 1094, 1095, 1100, 1090, 1098, 1106, 1115, 1102,
     591     1103, 1116, 1104, 1118, 2054, 1119, 1123, 1169, 2048,    0,
     592     2047,    0, 2046,    0, 2044,    0, 1164, 2041,    0, 2038,
     593        0, 2037, 2036, 2034,    0, 2031,    0, 1171, 2028, 1177,
     594     1137, 1197, 1164, 1112, 1131, 2798, 1216, 1230, 1256, 2039,
     595
     596     2014, 2024, 2021,    0, 2018,    0, 2017,    0, 2016,    0,
     597     2014,    0, 2011,    0, 1159, 1164, 2011, 1160, 1178, 1182,
     598     1133, 1194, 1208, 1185,  541, 1199, 1197, 1215, 1193, 1209,
     599     1211, 1225, 1210, 1254, 1235, 1237, 1239, 1241, 1242, 2010,
     600     1252, 1248, 2009, 1249, 1253, 1255, 1251, 2007, 1258, 1261,
     601     1262, 1264, 2004, 1265, 1271, 2001, 1263, 1273, 2000, 1269,
     602     1275, 1277, 1999, 1281, 1283, 1285, 1284, 1286, 1296, 1997,
     603     1295, 1287, 1994, 1299, 1300, 1991, 2039, 1986,    0, 1984,
     604        0, 1981,    0, 1980,    0, 1979,    0, 1977,    0, 1974,
     605        0, 1973,    0, 1336, 1346, 1369, 1357, 1972, 2798, 1375,
     606
     607     1311, 1347, 1313, 1970, 2798, 1937,    0, 1935,    0, 1934,
     608        0, 1931,    0,    0,    0, 1931,    0, 1353, 1354, 1305,
     609     1302, 1335, 1363, 1366, 1367, 1364,  586, 1370, 1365, 1374,
     610     1368, 1376, 1369, 1385, 1380, 1166, 1392, 1394, 1327, 1395,
     611     1396, 1399, 1930, 1398, 1400, 1401, 1929, 1927, 1924, 1403,
     612     1402, 1921, 1409, 1920, 1919, 1406, 1404, 1917, 1914, 1913,
     613     1912, 1910, 1907, 1416, 1417, 1906, 1419, 1405, 1954, 2798,
     614     1900,    0, 1897,    0,    0,    0, 1896,    0,    0,    0,
     615     2798,    0,    0,    0,    0, 1459, 1889, 2798, 2798, 1465,
     616     1885,    0, 1869,    0,    0,    0,    0, 1868, 1424, 1442,
     617
     618     1870, 1444, 1447, 1443, 1451, 1453, 1455, 1457, 1868, 1459,
     619     1460, 1476, 1461, 1463, 1494, 1477, 1478, 1504, 1483, 1482,
     620     1481, 1488, 1490, 1491, 1492, 1865, 1864, 1493, 1863, 1861,
     621     1497, 1496, 1499, 1858, 1500, 1502,    0,    0,    0, 1854,
     622     1853, 1851, 1550,    0, 1848, 1847, 1846, 1844, 1841, 1843,
     623     1842, 1840, 1837, 1507, 1513, 1505, 1514, 1509, 1515, 1528,
     624     1506, 1531, 1533, 1562, 1836, 1536, 1835, 1537, 1541, 1544,
     625     1549, 1542, 1543, 1833, 1830, 1829, 1828, 1550, 1826, 1823,
     626     1819, 1818, 1816, 1813, 1812, 1811, 1809, 1802, 1800, 1799,
     627     1796, 1795, 1551, 1797, 1554, 1556, 1555, 1559, 1560, 1561,
     628
     629     1795, 1565, 1592, 1568, 1778, 1569, 1576, 1577, 1584, 1570,
     630     1572, 1766, 1765, 1762, 1755, 1752, 1745, 1743, 1742, 1721,
     631     1720, 1719, 1712, 1710, 1712, 1582, 1587, 1595, 1590, 1589,
     632     1597, 1585, 1670, 1669, 1601, 1666, 1665, 1605, 1606, 1609,
     633     1660, 1659, 1655, 1654, 1651, 1650, 1649, 1593, 1610, 1611,
     634     1412, 1614, 1612, 1620, 1337, 1621, 1623, 1627, 1000,  928,
     635      896,  778, 1628, 1629, 1631, 1632, 1633, 1635,  709,  628,
     636     1637,  373,  338, 1639, 1640,  337,  257, 1641, 1643, 1645,
     637     1647, 1646, 1649, 1651,  200,  136, 2798, 1723, 1736, 1749,
     638     1759, 1769, 1782, 1792, 1805, 1818, 1831, 1839, 1849, 1856,
     639
     640     1863, 1870, 1877, 1884, 1891, 1898, 1905, 1912, 1925, 1932,
     641     1936, 1944, 1947, 1954, 1961, 1968, 1971, 1978, 1984, 1997,
     642     2010, 2017, 2024, 2031, 2038, 2041, 2048, 2051, 2058, 2061,
     643     2068, 2071, 2078, 2081, 2088, 2091, 2098, 2101, 2108, 2116,
     644     2123, 2130, 2137, 2144, 2147, 2154, 2157, 2164, 2167, 2174,
     645     2180, 2193, 2200, 2207, 2210, 2217, 2220, 2227, 2230, 2237,
     646     2240, 2247, 2250, 2257, 2260, 2267, 2274, 2277, 2284, 2287,
     647     2294, 2301, 2308, 2311, 2318, 2321, 2328, 2331, 2338, 2341,
     648     2348, 2351, 2358, 2364, 2377, 2384, 2391, 2394, 2401, 2404,
     649     2411, 2414, 2421, 2424, 2431, 2434, 2441, 2444, 2451, 2454,
     650
     651     2461, 2464, 2471, 2478, 2481, 2488, 2491, 2498, 2501, 2508,
     652     2511, 2514, 2520, 2527, 2536, 2543, 2550, 2553, 2560, 2563,
     653     2566, 2572, 2579, 2582, 2585, 2588, 2591, 2594, 2597, 2600,
     654     2607, 2610, 2617, 2620, 2623, 2626, 2629, 2639, 2646, 2649,
     655     2652, 2655, 2662, 2669, 2676, 2679, 2686, 2693, 2700, 2707,
     656     2714, 2721, 2728, 2735, 2742, 2749, 2756, 2763, 2770, 2777,
     657     2784
    658658    } ;
    659659
     
    779779    } ;
    780780
    781 static yyconst flex_int16_t yy_nxt[2908] =
     781static yyconst flex_int16_t yy_nxt[2883] =
    782782    {   0,
    783783       12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
     
    785785       28,   29,   30,   31,   32,   32,   32,   32,   33,   34,
    786786       35,   36,   37,   38,   39,   18,   18,   18,   18,   18,
    787        18,   18,   18,   40,   18,   18,   18,   18,   18,   40,
    788        18,   41,   42,   43,   44,   45,   46,   47,   48,   49,
    789        50,   51,   52,   53,   18,   54,   18,   55,   18,   18,
    790        56,   18,   57,   58,   59,   60,   61,   62,   18,   18,
    791        18,   63,   64,   65,   66,   67,   84,   92,   85,   85,
    792        67,   88,   89,   68,   71,   71,   71,   71,   71,   71,
    793 
    794        71,   71,   71,   71,   72,   71,   71,   71,   71,   71,
     787       18,   18,   40,   18,   18,   18,   18,   18,   40,   18,
     788       41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
     789       51,   52,   53,   18,   54,   18,   55,   18,   18,   56,
     790       18,   57,   58,   59,   60,   61,   62,   18,   18,   18,
     791       63,   64,   65,   66,   67,   84,   92,   85,   85,   67,
     792       88,   89,   68,   71,   71,   71,   71,   71,   71,   71,
     793
     794       71,   71,   71,   72,   71,   71,   71,   71,   71,   71,
    795795       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    796        71,   71,   71,   71,   71,   71,   71,   71,   71,   72,
     796       71,   71,   71,   71,   71,   71,   71,   71,   72,   72,
    797797       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
    798        72,   72,   72,   72,   72,   71,   73,   71,   71,   72,
    799        74,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     798       72,   72,   72,   71,   73,   71,   71,   72,   74,   72,
    800799       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
    801        72,   72,   72,   72,   72,   71,   71,   71,   71,   76,
    802        76,   79,   79,  123,  124,   90,  141,   79,   79,   87,
    803        76,   76,   80,   81,   82,   82,   82,   80,   82,   81,
    804 
    805        83,   83,   83,   82,   91,   93,   87,  142,  146,   98,
    806        95,   99,   99,   99,   99,   99,   99,  252,  887,   94,
    807       100,   85,   96,   97,   85,  101,  161,  118,  143,   77,
    808        77,   77,   77,  144,  147,  102,  103,   87,  104,  104,
    809       104,  104,  105,  105,  119,   87,  120,  121,  148,  263,
    810       149,  264,  254,  260,  183,  106,  195,   87,  159,  107,
    811       160,  150,  151,  152,   87,  108,  109,  153,  154,  162,
    812       155,  110,   87,  156,  157,  145,  163,  106,   87,  182,
    813        87,  158,  164,  111,  206,   87,  263,   87,  264,   87,
    814        87,  108,  194,   87,  109,  103,  250,  112,  112,  112,
    815 
    816       112,  112,  112,   87,  169,  177,  170,  196,  193,   87,
    817       207,  180,  165,  230,  106,  171,  166,  181,  113,  178,
    818       251,  167,   87,  258,  114,  168,  179,  172,   87,  263,
    819       115,  264,  248,   87,   87,  173,  106,  174,  249,  231,
    820       175,  143,  116,  263,  176,  264,  144,  259,  317,  283,
    821       114,  125,  280,  500,  249,  126,  127,   87,  128,  191,
    822       129,  130,  256,  131,  249,  132,   87,  265,  257,  184,
    823       185,  257,  248,   87,  133,  134,  135,  501,  188,  186,
    824       249,  263,  187,  264,  271,   87,  189,  265,  145,  256,
    825       305,  200,  201,  190,  257,  136,  200,  257,  137,  263,
    826 
    827       887,  264,  192,  197,   81,   82,   82,   82,  197,   87,
    828       272,  198,  202,  202,  202,  202,  202,  202,   80,   81,
    829        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,
    833        99,   99,   99,   99,   99,   99,  242,  242,  242,  242,
    834       266,  263,  263,  264,  264,  213,  143,  263,  211,  264,
    835        87,  144,  375,  211,  211,   87,   87,  211,  211,   87,
    836        87,   87,  286,  241,  887,  211,   87,   87,  211,  243,
    837 
    838       211,  214,  211,  281,  215,  217,  278,  284,  285,  218,
    839       219,  307,  298,  279,  220,  221,   87,  222,   87,  223,
    840        87,   87,  887,   87,  309,  300,   87,   87,  224,  225,
    841       226,  103,  303,  105,  105,  105,  105,  105,  105,   87,
    842       299,   87,  301,  302,   87,  304,  308,  310,   87,  227,
    843       106,  245,  228,  245,  306,   87,  246,  246,  246,  246,
    844       246,  246,   87,  313,   87,  315,  244,   87,   87,  311,
    845       314,   87,  106,   87,   87,   87,  323,   87,   87,  322,
    846       229,  233,  233,  233,  233,  233,  233,  312,  333,  247,
    847       319,  316,  328,  320,  318,   87,   87,  234,  235,  236,
    848 
    849       321,  237,  236,   87,  324,   87,  325,  143,  335,  360,
    850       331,  361,   87,   87,  238,  337,  326,  327,   87,  236,
    851       235,  236,   87,  329,  237,  332,  236,  287,  288,  289,
    852       336,  290,  291,  334,   87,  292,   87,  293,  407,  360,
    853       330,  361,  294,  295,  296,   87,  297,  339,  360,  343,
    854       361,   87,  200,  201,  338,  340,  346,  200,  341,   87,
    855       342,  197,   81,   82,   82,   82,  197,  200,  201,  198,
    856       378,  361,  200,  202,  202,  202,  202,  202,  202,  344,
    857       201,  360,  347,  361,  344,  360,  345,  361,  202,  202,
    858       202,  202,  202,  202,  209,  210,  378,  143,  361,  209,
    859 
    860       202,  202,  202,  202,  202,  202,  352,  352,  352,  352,
    861       360,   87,  361,  362,  360,  360,  361,  361,  360,  363,
    862       361,  360,  360,  361,  361,  369,  369,  370,  369,  370,
    863       435,   87,  371,  371,  371,  371,  371,  371,  373,  353,
    864       373,   87,  263,  373,  264,  263,   87,  264,  369,  402,
    865        87,  369,  234,  235,  236,  406,  237,  236,  388,  401,
    866       373,   87,  373,   87,   87,  372,  390,  373,  105,  105,
    867       105,  105,  105,  105,  236,  235,  236,  404,   87,  237,
    868       405,  236,  403,  408,  388,  106,  246,  246,  246,  246,
    869       246,  246,  391,   87,   87,   87,   87,   87,   87,  419,
    870 
    871        87,  255,  425,  432,   87,  420,  434,  106,  376,  376,
    872       376,  376,  376,  376,  381,  409,  413,  105,  105,  105,
    873       105,  105,  105,   87,  234,  245,  236,  245,  237,  236,
    874       246,  246,  246,  246,  246,  246,   87,  383,  410,  384,
    875        87,  377,   87,  385,  411,  412,  236,   87,  236,  386,
    876       255,  237,   87,  236,  112,  112,  112,  112,  112,  112,
    877       414,  387,  415,  417,  418,  384,   87,  416,   87,  385,
    878        87,   87,   87,   87,   87,   87,   87,   87,   87,  421,
    879       427,  426,  433,   87,  437,   87,   87,  260,  423,  424,
    880        87,   87,  436,  429,  428,  422,   87,  430,  431,  439,
    881 
    882        87,  438,   87,   87,  446,  441,  440,  442,  443,   87,
    883        87,   87,   87,   87,   87,  445,   87,   87,   87,   87,
    884        87,  448,  447,   87,   87,  444,  449,  451,   87,  456,
    885        87,  450,   87,   87,   87,  452,  455,  454,   87,  453,
    886       457,  462,  460,  461,   87,   87,  458,  464,   87,  515,
    887       459,  463,  465,  466,  344,  201,  201,   87,  887,  344,
    888       467,  345,  199,  211,  211,  211,  211,  352,  352,  352,
    889       352,  360,  360,  361,  361,  371,  371,  371,  371,  371,
    890       371,  370,  569,  370,  492,  492,  371,  371,  371,  371,
    891       371,  371,  887,   87,  493,  494,  477,  488,  488,  488,
    892 
    893       488,  488,  488,  233,  233,  233,  233,  233,  233,  516,
    894       492,  492,   87,  234,   87,  236,   87,  237,  236,  242,
    895       242,  242,  242,  105,  105,  495,  381,  517,   87,   87,
    896       489,  496,   87,  518,   87,  236,  374,  236,  519,  520,
    897       237,  521,  236,  376,  376,  376,  376,  376,  376,  383,
    898        87,  384,  375,  496,   87,  385,  522,  496,  497,  887,
    899       497,  386,   87,  498,  498,  498,  498,  498,  498,   87,
    900       525,  495,  526,  387,   87,  524,  377,  384,  523,  496,
    901        87,  385,  383,   87,  384,   87,   87,  527,  385,   87,
    902        87,  532,   87,   87,  502,   87,  499,   87,  535,  528,
    903 
    904       529,  537,  530,  531,  533,   87,  387,   87,   87,  541,
    905       384,  534,  538,   87,  385,   87,  536,   87,   87,   87,
    906       539,  540,   87,   87,  546,   87,   87,   87,  544,  542,
    907        87,  548,   87,   87,  547,  543,   87,   87,  549,   87,
    908       545,   87,  552,   87,   87,  550,  556,  554,  551,   87,
    909       559,   87,  553,  555,   87,   87,  557,   87,   87,  558,
    910        87,   87,   87,  564,  560,  567,  563,  568,   87,  561,
    911       566,  562,   87,  565,   87,   87,  571,   87,   87,  573,
    912       627,  201,  492,  570,  576,  574,  572,  577,  211,  211,
    913       211,  211,  493,   87,  575,  488,  488,  488,  488,  488,
    914 
    915       488,  376,  376,  376,  376,  376,  376,   87,  492,   87,
    916       618,  234,  595,  236,  595,  237,  236,  596,  596,  596,
    917       596,  596,  596,  492,   87,  599,  492,  621,  489,   87,
    918        87,  623,   87,  236,  490,  236,  598,  619,  237,   87,
    919       236,  498,  498,  498,  498,  498,  498,  620,   87,  492,
    920       597,  599,  492,  600,  600,  600,  600,  600,  600,   87,
    921       631,  622,   87,  887,  625,  887,   87,  862,   87,  601,
    922       497,  602,  497,  603,  602,  498,  498,  498,  498,  498,
    923       498,  624,  628,   87,   87,  630,  604,   87,   87,   87,
    924        87,  602,  633,  602,  626,  636,  603,  632,  602,  629,
    925 
    926       634,   87,   87,  635,   87,   87,   87,  642,   87,   87,
    927       637,  641,   87,   87,  640,   87,   87,  643,  647,  639,
    928        87,   87,  887,   87,   87,   87,  638,   87,   87,  644,
    929       645,  646,  648,  650,   87,   87,   87,  649,   87,  653,
    930       651,   87,  652,   87,  654,  655,   87,   87,   87,   87,
    931       656,  657,   87,  660,  659,  661,  664,   87,  658,   87,
    932        87,  663,   87,   87,   87,  668,  665,  688,  688,  662,
    933       666,  701,  702,  887,  887,   87,  667,  488,  488,  488,
    934       488,  488,  488,  596,  596,  596,  596,  596,  596,  595,
    935       688,  595,  704,   87,  596,  596,  596,  596,  596,  596,
    936 
    937       600,  600,  600,  600,  600,  600,  703,  688,   87,  887,
    938       594,  686,  686,  686,  686,  686,  686,  689,   87,  689,
    939        87,   87,  689,  699,   87,  708,   87,  601,  706,  602,
    940       688,  603,  602,  604,  707,   87,  700,  710,  709,  689,
    941        87,  689,   87,  705,  687,   87,  689,   87,   87,  602,
    942        87,  602,   87,  716,  603,  718,  602,  712,   87,   87,
    943        87,   87,  711,   87,  714,   87,   87,  713,   87,  717,
    944       715,   87,  721,  719,   87,  724,   87,   87,  722,  720,
    945       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,
    949       686,  686,  686,  686,  600,  600,  600,  600,  600,  600,
    950       750,   87,  755,   87,  601,  763,  602,  752,  603,  602,
    951       753,   87,   87,  764,   87,  756,  754,  757,   87,  758,
    952        87,  687,   87,   87,  759,  767,  602,  690,  602,  761,
    953        87,  603,  766,  602,   87,  760,   87,  762,   87,  765,
    954        87,  768,   87,  769,   87,   87,   87,   87,  770,   87,
    955        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,
    975        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,
    997       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,
     800       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
     801       72,   72,   72,   71,   71,   71,   71,   76,   76,   79,
     802       79,  123,  124,   90,  141,   79,   79,   87,   76,   76,
     803       80,   81,   82,   82,   82,   80,   82,   81,   83,   83,
     804
     805       83,   82,   91,   93,  142,  146,   87,   98,   95,   99,
     806       99,   99,   99,   99,   99,  252,  887,   94,  100,   85,
     807       96,   97,   85,  101,  177,  118,   77,   77,   77,   77,
     808      143,  147,   87,  102,  103,  144,  104,  104,  104,  104,
     809      105,  105,  119,   87,  120,  121,  148,   87,  149,  254,
     810      260,   87,  161,  106,  427,  194,  107,   87,   87,  150,
     811      151,  152,  108,  109,  153,  154,  183,  155,  110,   87,
     812      156,  157,   87,   87,  106,   87,  145,  162,  158,  159,
     813      111,  160,   87,  195,  163,   87,   87,  180,  108,  206,
     814      164,  109,  103,  181,  112,  112,  112,  112,  112,  112,
     815
     816       87,  169,  305,  170,  182,   87,   87,   87,   87,  165,
     817       87,  106,  171,  166,  113,  207,  178,   87,  167,  188,
     818      114,  283,  168,  179,  230,   87,  115,  189,  193,  184,
     819      185,  143,  106,  196,  190,  263,  144,  264,  116,  186,
     820       87,  298,  187,  200,  201,  172,  114,  125,  200,  191,
     821      231,  126,  127,  173,  128,  174,  129,  130,  175,  131,
     822      250,  132,  176,  258,  202,  202,  202,  202,  202,  202,
     823      133,  134,  135,  263,   87,  264,   87,  145,  197,   81,
     824       82,   82,   82,  197,  251,  282,  198,  259,   87,   87,
     825      136,  192,   87,  137,   80,   81,   82,   82,   82,   80,
     826
     827       82,   81,   82,   82,   82,   82,   82,   81,   83,   83,
     828       83,   82,  263,  307,  264,  242,  242,  242,  242,  248,
     829      138,  139,  209,  210,   87,  249,  256,  209,   87,  211,
     830      249,  263,  257,  264,  211,   99,   99,   99,   99,   99,
     831       99,  265,  887,  212,  212,  212,  212,  243,  248,  310,
     832      887,  249,  265,  263,  211,  264,  249,  103,  257,  105,
     833      105,  105,  105,  105,  105,   87,  263,  241,  264,  213,
     834      887,  263,  211,  264,   87,  257,  106,  211,  211,  887,
     835      271,  211,  211,  280,  255,  266,  263,   87,  264,  211,
     836      404,  244,  211,  256,  211,  214,  211,  106,  215,  217,
     837
     838      263,  257,  264,  218,  219,  281,  272,  887,  220,  221,
     839      245,  222,  245,  223,   87,  246,  246,  246,  246,  246,
     840      246,   87,  224,  225,  226,  263,  267,  264,  263,  143,
     841      264,   87,  284,   87,  144,   87,  278,   87,   87,   87,
     842       87,   87,  227,  279,  300,  228,   87,  247,   87,  286,
     843      306,  303,   87,  285,   87,  299,   87,   87,   87,  301,
     844      302,  323,  308,  311,  304,   87,   87,  314,  309,   87,
     845      313,  315,   87,  229,  233,  233,  233,  233,  233,  233,
     846       87,  312,   87,  316,  318,   87,  317,   87,   87,   87,
     847      234,  235,   87,  236,  237,  627,  324,  320,  325,  360,
     848
     849      329,  361,  319,  328,  321,  322,  238,  143,  326,  327,
     850       87,  234,  235,  234,   87,  331,  236,  330,  237,  287,
     851      288,  289,   87,  290,  291,   87,   87,  292,   87,  293,
     852      332,  346,   87,  335,  294,  295,  296,   87,  297,  333,
     853      709,   87,  334,   87,  337,  341,  360,  342,  361,  360,
     854       87,  361,  378,  338,  339,  336,  343,  347,  360,  360,
     855      361,  361,  340,  197,   81,   82,   82,   82,  197,  200,
     856      201,  198,  209,  210,  200,  200,  201,  209,  378,   87,
     857      200,  344,  201,   87,  362,  360,  344,  361,  345,  434,
     858      202,  202,  202,  202,  202,  202,  202,  202,  202,  202,
     859
     860      202,  202,  202,  202,  202,  202,  202,  202,  352,  352,
     861      352,  352,  361,  361,  360,  363,  361,  360,  360,  361,
     862      361,  369,  887,  369,  143,  360,  360,  361,  361,  370,
     863       87,  370,  388,   87,  371,  371,  371,  371,  371,  371,
     864      353,  373,  390,  401,  369,  373,  369,   87,   87,  234,
     865      235,  402,  236,  237,   87,  263,  375,  264,  388,  263,
     866       87,  264,  373,  416,  373,  403,  372,   87,  391,  373,
     867      234,  235,  234,   87,  407,  236,   87,  237,  105,  105,
     868      105,  105,  105,  105,  246,  246,  246,  246,  246,  246,
     869      405,  245,   87,  245,  414,  106,  246,  246,  246,  246,
     870
     871      246,  246,  105,  105,  105,  105,  105,  105,   87,   87,
     872      255,   87,  409,  406,  408,   87,  106,  376,  376,  376,
     873      376,  376,  376,  381,  421,   87,  112,  112,  112,  112,
     874      112,  112,  887,  234,  255,   87,  236,  237,  413,   87,
     875       87,  417,  418,   87,  419,  383,   87,  384,   87,  377,
     876       87,  385,  420,  425,  234,   87,  234,  386,  260,  236,
     877       87,  237,  422,   87,  423,  410,  415,   87,   87,  387,
     878       87,  411,  412,  384,   87,  428,  426,  385,  424,  432,
     879       87,  429,   87,   87,   87,  433,  438,   87,   87,  430,
     880      431,   87,  436,  437,   87,   87,  441,  439,   87,  440,
     881
     882      442,  435,   87,  443,   87,   87,   87,   87,   87,   87,
     883       87,   87,   87,  445,   87,  447,  448,   87,   87,   87,
     884      444,  449,  446,  451,   87,   87,  450,  456,   87,  455,
     885      452,  454,  453,   87,   87,   87,  457,  462,  461,   87,
     886      458,  459,  460,  465,  466,   87,  201,  464,  344,  201,
     887      887,  463,  199,  344,  500,  345,  211,  211,  211,  211,
     888      467,  352,  352,  352,  352,  360,  360,  361,  361,  371,
     889      371,  371,  371,  371,  371,  370,  492,  370,  501,   87,
     890      371,  371,  371,  371,  371,  371,  493,   87,  477,  488,
     891      488,  488,  488,  488,  488,  233,  233,  233,  233,  233,
     892
     893      233,   87,  492,  516,  496,  234,  492,   87,  236,  237,
     894      242,  242,  242,  242,  105,  105,  494,  495,  515,  381,
     895      518,  489,  495,  496,   87,   87,  234,  374,  234,   87,
     896      496,  236,  492,  237,  376,  376,  376,  376,  376,  376,
     897      887,  383,  375,  384,  517,   87,  522,  385,  545,  496,
     898      497,   87,  497,  386,  519,  498,  498,  498,  498,  498,
     899      498,   87,  383,   87,  384,  387,  377,   87,  385,  384,
     900       87,   87,  520,  385,  502,   87,  521,   87,   87,  523,
     901       87,   87,   87,   87,  524,  526,  387,  499,  532,   87,
     902      384,  525,   87,  527,  385,   87,  531,  528,  529,  530,
     903
     904       87,  535,   87,  536,  533,   87,   87,  539,   87,   87,
     905       87,  534,   87,  537,   87,   87,   87,  541,  546,  538,
     906      540,   87,   87,  544,   87,  548,   87,   87,   87,  542,
     907      547,  543,   87,   87,  550,   87,  549,  556,   87,  552,
     908       87,   87,  554,   87,  551,   87,   87,  559,  553,   87,
     909      557,   87,  555,   87,   87,   87,  492,   87,  558,  565,
     910      564,  560,  566,  561,  567,  562,   87,   87,  563,   87,
     911       87,  201,  573,  568,   87,  571,  570,  577,  569,  599,
     912      574,  492,  492,  576,   87,  572,  211,  211,  211,  211,
     913      718,  493,  575,  488,  488,  488,  488,  488,  488,  376,
     914
     915      376,  376,  376,  376,  376,  599,  623,  492,  492,  234,
     916       87,   87,  236,  237,  595,   87,  595,   87,  598,  596,
     917      596,  596,  596,  596,  596,  489,  620,  618,  619,   87,
     918      234,  490,  234,   87,  492,  236,   87,  237,  498,  498,
     919      498,  498,  498,  498,   87,   87,  622,  626,   87,  621,
     920       87,  597,  600,  600,  600,  600,  600,  600,  624,   87,
     921       87,   87,   87,  629,  625,  631,   87,  633,  601,  632,
     922      628,  602,  603,  497,  635,  497,   87,  636,  498,  498,
     923      498,  498,  498,  498,  604,  630,   87,  634,   87,  601,
     924       87,  601,   87,   87,  602,  637,  603,  642,  641,   87,
     925
     926       87,  640,   87,   87,   87,   87,   87,  639,  643,   87,
     927      638,  647,   87,   87,   87,   87,   87,  644,  648,  645,
     928       87,  646,   87,  654,   87,  650,   87,  653,   87,  649,
     929      651,  652,   87,  655,   87,   87,   87,   87,   87,  657,
     930      659,  664,  656,  661,  660,  658,   87,   87,  666,  663,
     931       87,   87,  688,   87,  688,  665,   87,  662,  488,  488,
     932      488,  488,  488,  488,  668,  702,  703,  667,  596,  596,
     933      596,  596,  596,  596,  595,  688,  595,  688,   87,  596,
     934      596,  596,  596,  596,  596,  689,   87,  721,   87,  689,
     935      594,  686,  686,  686,  686,  686,  686,  600,  600,  600,
     936
     937      600,  600,  600,  704,   87,   87,  689,  601,  689,  699,
     938      602,  603,  701,  689,   87,   87,   87,   87,   87,   87,
     939       87,   87,  700,  687,  706,   87,  707,   87,  601,  604,
     940      601,   87,  708,  602,  710,  603,   87,  705,  711,  716,
     941      712,  713,  715,   87,  714,   87,   87,   87,  717,   87,
     942       87,   87,   87,   87,   87,   87,   87,   87,  719,  724,
     943       87,  727,  732,   87,  722,  720,  731,   87,   87,  723,
     944       87,  736,  725,  726,  728,   87,  733,  730,  734,  735,
     945      729,  686,  686,  686,  686,  686,  686,  600,  600,  600,
     946      600,  600,  600,   87,   87,   87,  750,  601,   87,  754,
     947
     948      602,  603,   87,  751,   87,  753,   87,  756,   87,  757,
     949       87,   87,   87,  687,   87,  762,  759,  764,  601,  690,
     950      601,  752,  755,  602,  760,  603,  758,   87,   87,   87,
     951      767,  765,   87,   87,   87,  763,  761,  768,  766,   87,
     952      770,   87,   87,   87,   87,   87,  769,   87,   87,  771,
     953       87,   87,  774,   87,  772,   87,   87,   87,   87,  779,
     954       87,  795,  780,  773,   87,   87,   87,  775,  776,  777,
     955      797,  778,  686,  686,  686,  686,  686,  686,  793,   87,
     956      796,  794,   87,  800,   87,  801,  803,   87,   87,  798,
     957      804,  805,   87,   87,   87,   87,  799,  802,  807,  806,
     958
     959       87,   87,   87,  808,  743,   87,   87,   87,  809,  828,
     960       87,   87,   87,   87,  830,  831,   87,  810,  833,   87,
     961       87,   87,  834,   87,  811,  827,  826,   87,   87,  825,
     962      836,  837,  829,   87,  832,   87,   87,  839,   87,  840,
     963       87,   87,  835,   87,  838,  850,   87,  887,   87,  851,
     964      852,  855,   87,  856,  849,  857,   87,   87,  853,  858,
     965       87,   87,   87,   87,  854,   87,  859,  864,  865,  860,
     966      863,   87,   87,  866,   87,  868,  867,  869,   87,   87,
     967       87,  870,   87,   87,   87,  873,   87,  875,   87,  876,
     968       87,   87,   87,  874,   87,  872,   87,   87,   87,  871,
     969
     970       87,  880,   87,  887,  862,  887,  879,  881,  887,  887,
     971      877,  878,  886,  887,  861,  884,   87,   87,  882,  883,
     972       87,   87,  885,   69,   69,   69,   69,   69,   69,   69,
     973       69,   69,   69,   69,   69,   69,   75,   75,   75,   75,
     974       75,   75,   75,   75,   75,   75,   75,   75,   75,   78,
     975       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
     976       78,   78,   86,   87,  887,   86,  887,   86,   86,   86,
     977       86,   86,  140,  848,  887,  847,  140,  140,  140,  140,
     978      140,  140,  199,  199,  199,  199,  199,  199,  199,  199,
     979      199,  199,  199,  199,  199,  204,  887,  845,  204,  887,
     980
     981      204,  204,  204,  204,  204,  208,  844,  208,  208,  887,
     982      208,  208,  208,  208,  208,  208,  843,  208,  216,  887,
     983      842,  216,  216,  216,  216,  216,  216,  216,  216,   87,
     984      216,  239,  239,  239,  239,  239,  239,  239,  239,  239,
     985      239,  239,  239,  239,  253,  253,   87,  253,   87,  887,
     986      824,  253,  269,  887,  823,  269,  821,  269,  269,  269,
     987      269,  269,  273,  887,  273,  819,  887,  817,  273,  275,
     988      887,  275,  815,  813,   87,  275,  348,   87,  348,   87,
     989       87,   87,  348,  350,   87,  350,   87,   87,   87,  350,
     990      354,   87,  354,   87,   87,  887,  354,  356,  792,  356,
     991
     992      790,  887,  887,  356,  358,  787,  358,  785,  783,   87,
     993      358,  365,   87,  365,   87,   87,   87,  365,  367,   87,
     994      367,   87,  749,  746,  367,  239,  239,  239,  239,  239,
     995      239,  239,  239,  239,  239,  239,  239,  239,  380,  745,
     996      380,  382,  382,  743,  382,  382,  382,  205,  382,  253,
     997      253,  739,  253,  392,  738,  392,  670,   87,   87,  392,
     998      394,   87,  394,   87,   87,   87,  394,  396,   87,  396,
     999       87,   87,   87,  396,  273,   87,  273,  398,   87,  398,
     1000       87,   87,   87,  398,  275,  697,  275,   86,  696,  694,
     1001       86,  692,   86,   86,   86,   86,   86,  199,  199,  199,
     1002
     1003      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
    10271004      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,
     1005      468,  468,  468,  469,  690,  469,  598,  685,  684,  469,
     1006      471,  682,  471,  680,  678,  676,  471,  473,  674,  473,
     1007      672,  670,   87,  473,  348,   87,  348,  475,   87,  475,
     1008       87,   87,   87,  475,  350,   87,  350,  478,   87,  478,
     1009       87,   87,   87,  478,  354,  617,  354,  480,  615,  480,
     1010      613,  611,  609,  480,  356,  607,  356,  482,  502,  482,
     1011      605,  605,  594,  482,  358,  593,  358,  484,  591,  484,
     1012      483,  483,  589,  484,  365,  587,  365,  486,  585,  486,
     1013
     1014      583,  581,  579,  486,  367,   87,  367,  491,   87,  491,
     1015       87,  491,   87,  491,  380,   87,  380,   87,  380,   87,
     1016      380,  382,  382,   87,  382,  382,  382,  514,  382,  503,
     1017      512,  503,  510,  508,  506,  503,  505,  504,  505,  490,
     1018      487,  485,  505,  507,  361,  507,  361,  483,  481,  507,
     1019      392,  479,  392,  509,  476,  509,  474,  472,  470,  509,
     1020      394,   87,  394,  511,   87,  511,   87,  400,  399,  511,
     1021      396,  397,  396,  513,  395,  513,  393,  270,  265,  513,
     1022      398,  264,  398,   86,  389,  389,   86,  252,   86,   86,
     1023       86,   86,   86,  468,  468,  468,  468,  468,  468,  468,
     1024
     1025      468,  468,  468,  468,  468,  468,  578,  379,  578,  379,
     1026      240,  374,  578,  469,  368,  469,  580,  366,  580,  364,
     1027      360,  359,  580,  471,  357,  471,  582,  355,  582,  351,
     1028      349,  205,  582,  473,  201,  473,  584,   87,  584,  277,
     1029      276,  274,  584,  475,  270,  475,  586,  265,  586,  268,
     1030      265,  263,  586,  478,  262,  478,  588,  261,  588,  240,
     1031      232,   85,  588,  480,   85,  480,  482,   87,  482,  205,
     1032      203,   85,  482,  590,  122,  590,  117,   87,  887,  590,
     1033      484,   70,  484,  592,   70,  592,  887,  887,  887,  592,
     1034      486,  887,  486,  491,  887,  491,  887,  491,  887,  491,
     1035
     1036      382,  887,  382,  887,  887,  887,  382,  606,  887,  606,
     1037      887,  887,  887,  606,  503,  887,  503,  608,  887,  608,
     1038      887,  887,  887,  608,  505,  887,  505,  610,  887,  610,
     1039      887,  887,  887,  610,  507,  887,  507,  612,  887,  612,
     1040      887,  887,  887,  612,  509,  887,  509,  614,  887,  614,
     1041      887,  887,  887,  614,  511,  887,  511,  616,  887,  616,
     1042      887,  887,  887,  616,  513,  887,  513,   86,  887,  887,
     1043       86,  887,   86,   86,   86,   86,   86,  669,  669,  669,
    10641044      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,
     1045      671,  887,  671,  887,  887,  887,  671,  578,  887,  578,
     1046
     1047      673,  887,  673,  887,  887,  887,  673,  580,  887,  580,
     1048      675,  887,  675,  887,  887,  887,  675,  582,  887,  582,
     1049      677,  887,  677,  887,  887,  887,  677,  584,  887,  584,
     1050      679,  887,  679,  887,  887,  887,  679,  586,  887,  586,
     1051      681,  887,  681,  887,  887,  887,  681,  588,  887,  588,
     1052      683,  887,  683,  887,  887,  887,  683,  590,  887,  590,
     1053       86,  887,   86,  887,  887,  887,   86,  592,  887,  592,
     1054      491,  887,  491,  887,  887,  887,  491,  691,  887,  691,
     1055      887,  887,  887,  691,  606,  887,  606,  693,  887,  693,
     1056      887,  887,  887,  693,  608,  887,  608,  695,  887,  695,
     1057
     1058      887,  887,  887,  695,  610,  887,  610,  140,  887,  140,
     1059      887,  887,  887,  140,  612,  887,  612,  698,  887,  698,
     1060      614,  887,  614,   86,  887,  887,   86,  887,   86,   86,
     1061       86,   86,   86,  616,  887,  616,  669,  669,  669,  669,
     1062      669,  669,  669,  669,  669,  669,  669,  669,  669,  737,
     1063      887,  737,  887,  887,  887,  737,  671,  887,  671,  204,
     1064      887,  204,  887,  887,  887,  204,  673,  887,  673,  740,
     1065      887,  740,  675,  887,  675,  204,  887,  887,  204,  887,
     1066      204,  204,  204,  204,  204,  677,  887,  677,  741,  887,
     1067      741,  679,  887,  679,  681,  887,  681,  742,  887,  742,
     1068
     1069      683,  887,  683,   86,  887,   86,  744,  887,  744,  887,
     1070      887,  887,  744,  691,  887,  691,  269,  887,  269,  887,
     1071      887,  887,  269,  693,  887,  693,  747,  887,  747,  695,
     1072      887,  695,  140,  887,  140,  748,  887,  748,  887,  887,
     1073      887,  748,   86,  887,  887,   86,  887,   86,   86,   86,
     1074       86,   86,  781,  887,  781,  737,  887,  737,  204,  887,
     1075      204,  782,  887,  782,  887,  887,  887,  782,  784,  887,
     1076      784,  887,  887,  887,  784,  786,  887,  786,  887,  887,
     1077      887,  786,  788,  887,  788,  789,  887,  789,  887,  887,
     1078      887,  789,  791,  887,  791,  887,  887,  887,  791,  812,
     1079
     1080      887,  812,  887,  887,  887,  812,  814,  887,  814,  887,
     1081      887,  887,  814,  816,  887,  816,  887,  887,  887,  816,
     1082      818,  887,  818,  887,  887,  887,  818,  820,  887,  820,
     1083      887,  887,  887,  820,  822,  887,  822,  887,  887,  887,
     1084      822,  616,  887,  616,  887,  887,  887,  616,  841,  887,
     1085      841,  887,  887,  887,  841,  677,  887,  677,  887,  887,
     1086      887,  677,  681,  887,  681,  887,  887,  887,  681,   86,
     1087      887,   86,  887,  887,  887,   86,  846,  887,  846,  887,
     1088      887,  887,  846,  140,  887,  140,  887,  887,  887,  140,
     1089      204,  887,  204,  887,  887,  887,  204,   11,  887,  887,
     1090
    10941091      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    10951092      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     
    10991096      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    11001097      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1101 
    1102       887,  887,  887,  887,  887,  887,  887
     1098      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1099      887,  887
    11031100    } ;
    11041101
    1105 static yyconst flex_int16_t yy_chk[2908] =
     1102static yyconst flex_int16_t yy_chk[2883] =
    11061103    {   0,
    11071104        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    11131110        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    11141111        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1115         1,    1,    1,    1,    1,    2,   16,   24,   16,   24,
    1116         2,   19,   19,    2,    5,    5,    5,    5,    5,    5,
     1112        1,    1,    1,    1,    2,   16,   24,   16,   24,    2,
     1113       19,   19,    2,    5,    5,    5,    5,    5,    5,    5,
    11171114
    11181115        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
     
    11231120        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    11241121        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    1125         5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
    1126         8,    9,   10,   37,   37,   20,   39,    9,   10,  886,
    1127         7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
    1128 
    1129        15,   15,   15,   15,   20,   25,   48,   39,   42,   28,
    1130        27,   28,   28,   28,   28,   28,   28,  109,  115,   25,
    1131        29,   25,   27,   27,   27,   29,   48,   35,   40,    7,
    1132         8,    9,   10,   40,   42,   29,   30,   47,   30,   30,
    1133        30,   30,   30,   30,   35,   57,   35,   35,   44,  126,
    1134        44,  126,  109,  115,   57,   30,   64,   56,   47,   30,
    1135        47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
    1136        45,   30,   40,   45,   45,   40,   49,   30,   45,   56,
    1137        62,   45,   49,   30,   73,  885,  127,   53,  127,   51,
    1138        61,   30,   62,   55,   30,   31,  108,   31,   31,   31,
    1139 
    1140        31,   31,   31,   50,   51,   53,   51,   64,   61,   54,
    1141        73,   55,   50,   87,   31,   51,   50,   55,   31,   54,
    1142       108,   50,   52,  114,   31,   50,   54,   52,  175,  129,
    1143        31,  129,  107,  154,  151,   52,   31,   52,  107,   87,
    1144        52,   60,   31,  132,   52,  132,   60,  114,  175,  154,
    1145        31,   38,  151,  385,  111,   38,   38,   58,   38,   60,
    1146        38,   38,  113,   38,  107,   38,   59,  130,  113,   58,
    1147        58,  116,  111,  164,   38,   38,   38,  385,   59,   58,
    1148       111,  130,   58,  130,  142,   60,   59,  131,   60,  116,
    1149       164,   68,   68,   59,  113,   38,   68,  116,   38,  131,
    1150 
    1151       110,  131,   60,   67,   67,   67,   67,   67,   67,  877,
    1152       142,   67,   68,   68,   68,   68,   68,   68,   80,   80,
    1153        80,   80,   80,   80,  153,   38,   38,   77,   77,  134,
    1154       110,  134,   77,  153,   77,  110,  135,  135,  135,   77,
    1155        82,   82,   82,   82,   82,   82,  876,  243,   77,   77,
    1156        77,   77,   83,   83,   83,   83,   83,   83,  110,   77,
    1157       103,  103,  103,  103,  103,  103,  104,  104,  104,  104,
    1158       133,  133,  137,  133,  137,   77,  145,  139,   77,  139,
    1159       157,  145,  243,   77,   77,  152,  156,   77,   77,  155,
    1160       166,  150,  157,  103,  104,   77,  159,  168,   77,  104,
    1161 
    1162        77,   77,   77,  152,   77,   85,  150,  155,  156,   85,
    1163        85,  166,  159,  150,   85,   85,  161,   85,  160,   85,
    1164       145,  162,  104,  167,  168,  161,  169,  163,   85,   85,
    1165        85,  105,  163,  105,  105,  105,  105,  105,  105,  873,
    1166       160,  171,  162,  162,  165,  163,  167,  169,  173,   85,
    1167       105,  106,   85,  106,  165,  172,  106,  106,  106,  106,
    1168       106,  106,  180,  171,  170,  173,  105,  176,  177,  170,
    1169       172,  181,  105,  174,  184,  187,  181,  182,  179,  180,
    1170        85,   99,   99,   99,   99,   99,   99,  170,  187,  106,
    1171       177,  174,  184,  179,  176,  183,  190,   99,   99,   99,
    1172 
    1173       179,   99,   99,  189,  182,  186,  183,  191,  189,  218,
    1174       186,  218,  185,  188,   99,  190,  183,  183,  284,   99,
    1175        99,   99,  158,  185,   99,  186,   99,  158,  158,  158,
    1176       189,  158,  158,  188,  192,  158,  194,  158,  284,  219,
    1177       185,  219,  158,  158,  158,  193,  158,  192,  220,  194,
    1178       220,  191,  198,  198,  191,  192,  205,  198,  193,  872,
    1179       193,  197,  197,  197,  197,  197,  197,  200,  200,  197,
    1180       248,  221,  200,  198,  198,  198,  198,  198,  198,  202,
    1181       202,  223,  205,  223,  202,  221,  202,  221,  200,  200,
    1182       200,  200,  200,  200,  209,  209,  248,  338,  222,  209,
    1183 
    1184       202,  202,  202,  202,  202,  202,  212,  212,  212,  212,
    1185       222,  309,  222,  224,  224,  225,  224,  225,  226,  226,
    1186       226,  228,  229,  228,  229,  234,  234,  235,  236,  235,
    1187       309,  279,  235,  235,  235,  235,  235,  235,  237,  212,
    1188       237,  338,  266,  237,  266,  267,  278,  267,  234,  279,
    1189       283,  236,  241,  241,  241,  283,  241,  241,  256,  278,
    1190       237,  281,  237,  282,  280,  235,  270,  237,  244,  244,
    1191       244,  244,  244,  244,  241,  241,  241,  281,  285,  241,
    1192       282,  241,  280,  285,  256,  244,  245,  245,  245,  245,
    1193       245,  245,  270,  288,  293,  286,  294,  300,  306,  293,
    1194 
    1195       308,  244,  300,  306,  870,  294,  308,  244,  246,  246,
    1196       246,  246,  246,  246,  253,  286,  288,  255,  255,  255,
    1197       255,  255,  255,  287,  246,  247,  246,  247,  246,  246,
    1198       247,  247,  247,  247,  247,  247,  290,  253,  287,  253,
    1199       869,  246,  289,  253,  287,  287,  246,  292,  246,  253,
    1200       255,  246,  291,  246,  260,  260,  260,  260,  260,  260,
    1201       289,  253,  290,  292,  292,  253,  295,  291,  296,  253,
    1202       297,  299,  301,  302,  303,  304,  305,  307,  311,  295,
    1203       302,  301,  307,  310,  311,  312,  319,  260,  297,  299,
    1204       313,  314,  310,  304,  303,  296,  318,  305,  305,  313,
    1205 
    1206       315,  312,  316,  317,  319,  315,  314,  316,  317,  320,
    1207       322,  323,  324,  326,  325,  318,  327,  328,  331,  329,
    1208       330,  322,  320,  332,  334,  317,  323,  325,  333,  330,
    1209       335,  324,  337,  339,  340,  326,  329,  328,  401,  327,
    1210       331,  337,  334,  335,  341,  343,  332,  340,  342,  401,
    1211       333,  339,  341,  342,  344,  344,  345,  460,  862,  344,
    1212       343,  344,  345,  352,  352,  352,  352,  353,  353,  353,
    1213       353,  362,  363,  362,  363,  370,  370,  370,  370,  370,
    1214       370,  372,  460,  372,  380,  381,  372,  372,  372,  372,
    1215       372,  372,  861,  402,  380,  381,  352,  371,  371,  371,
    1216 
    1217       371,  371,  371,  374,  374,  374,  374,  374,  374,  402,
    1218       380,  381,  403,  371,  404,  371,  860,  371,  371,  375,
    1219       375,  375,  375,  375,  375,  383,  382,  403,  406,  405,
    1220       371,  383,  407,  404,  408,  371,  374,  371,  405,  406,
    1221       371,  407,  371,  376,  376,  376,  376,  376,  376,  382,
    1222       412,  382,  375,  387,  411,  382,  408,  383,  384,  386,
    1223       384,  382,  410,  384,  384,  384,  384,  384,  384,  409,
    1224       411,  387,  412,  382,  413,  410,  376,  382,  409,  387,
    1225       415,  382,  386,  414,  386,  416,  417,  413,  386,  418,
    1226       421,  417,  419,  422,  386,  420,  384,  427,  419,  414,
    1227 
    1228       414,  421,  415,  416,  418,  423,  386,  425,  429,  427,
    1229       386,  418,  422,  430,  386,  431,  420,  432,  433,  434,
    1230       423,  425,  435,  437,  433,  439,  440,  441,  431,  429,
    1231       442,  435,  443,  444,  434,  430,  449,  445,  437,  447,
    1232       432,  450,  441,  451,  454,  439,  445,  443,  440,  452,
    1233       450,  453,  442,  444,  455,  456,  447,  457,  458,  449,
    1234       459,  461,  463,  455,  451,  458,  454,  459,  462,  452,
    1235       457,  453,  466,  456,  464,  467,  462,  525,  859,  463,
    1236       525,  468,  491,  461,  467,  464,  462,  468,  477,  477,
    1237       477,  477,  491,  515,  466,  488,  488,  488,  488,  488,
    1238 
    1239       488,  490,  490,  490,  490,  490,  490,  519,  491,  521,
    1240       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       488,  497,  497,  497,  497,  497,  497,  518,  520,  494,
    1244       492,  495,  493,  498,  498,  498,  498,  498,  498,  523,
    1245       529,  520,  526,  848,  523,  847,  528,  846,  522,  498,
    1246       499,  498,  499,  498,  498,  499,  499,  499,  499,  499,
    1247       499,  522,  526,  524,  527,  528,  498,  531,  530,  532,
    1248       533,  498,  531,  498,  524,  534,  498,  530,  498,  527,
    1249 
    1250       532,  535,  537,  533,  536,  538,  539,  541,  542,  547,
    1251       535,  539,  544,  541,  538,  545,  546,  542,  547,  537,
    1252       550,  551,  845,  549,  534,  552,  536,  554,  560,  544,
    1253       545,  546,  549,  551,  555,  557,  558,  550,  561,  555,
    1254       552,  562,  554,  565,  557,  558,  564,  567,  566,  568,
    1255       560,  561,  575,  565,  564,  566,  569,  571,  562,  574,
    1256       572,  568,  569,  620,  619,  575,  571,  601,  601,  567,
    1257       572,  619,  620,  844,  843,  622,  574,  594,  594,  594,
    1258       594,  594,  594,  595,  595,  595,  595,  595,  595,  597,
    1259       601,  597,  622,  621,  597,  597,  597,  597,  597,  597,
    1260 
    1261       600,  600,  600,  600,  600,  600,  621,  602,  626,  842,
    1262       594,  596,  596,  596,  596,  596,  596,  603,  618,  603,
    1263       623,  624,  603,  618,  628,  626,  625,  596,  624,  596,
    1264       602,  596,  596,  600,  625,  627,  618,  628,  627,  603,
    1265       629,  603,  630,  623,  596,  631,  603,  632,  633,  596,
    1266       634,  596,  635,  634,  596,  636,  596,  630,  637,  638,
    1267       640,  644,  629,  639,  632,  641,  642,  631,  645,  635,
    1268       633,  646,  639,  637,  650,  642,  651,  656,  640,  638,
    1269       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,
    1273       686,  686,  686,  686,  690,  690,  690,  690,  690,  690,
    1274       699,  708,  705,  703,  686,  714,  686,  702,  686,  686,
    1275       703,  704,  706,  715,  707,  706,  704,  707,  710,  708,
    1276       712,  686,  711,  717,  710,  718,  686,  690,  686,  712,
    1277       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,
     1122        5,    5,    5,    5,    5,    5,    5,    7,    8,    9,
     1123       10,   37,   37,   20,   39,    9,   10,  886,    7,    8,
     1124       13,   13,   13,   13,   13,   13,   15,   15,   15,   15,
     1125
     1126       15,   15,   20,   25,   39,   42,   53,   28,   27,   28,
     1127       28,   28,   28,   28,   28,  109,  115,   25,   29,   25,
     1128       27,   27,   27,   29,   53,   35,    7,    8,    9,   10,
     1129       40,   42,   48,   29,   30,   40,   30,   30,   30,   30,
     1130       30,   30,   35,   62,   35,   35,   44,  302,   44,  109,
     1131      115,  885,   48,   30,  302,   62,   30,   57,   47,   45,
     1132       45,   45,   30,   30,   45,   45,   57,   45,   30,   55,
     1133       45,   45,   49,   40,   30,   45,   40,   49,   45,   47,
     1134       30,   47,   56,   64,   49,  164,   51,   55,   30,   73,
     1135       49,   30,   31,   55,   31,   31,   31,   31,   31,   31,
     1136
     1137       50,   51,  164,   51,   56,  154,   54,   59,  877,   50,
     1138       61,   31,   51,   50,   31,   73,   54,   58,   50,   59,
     1139       31,  154,   50,   54,   87,  159,   31,   59,   61,   58,
     1140       58,   60,   31,   64,   59,  126,   60,  126,   31,   58,
     1141       52,  159,   58,   68,   68,   52,   31,   38,   68,   60,
     1142       87,   38,   38,   52,   38,   52,   38,   38,   52,   38,
     1143      108,   38,   52,  114,   68,   68,   68,   68,   68,   68,
     1144       38,   38,   38,  127,   60,  127,  153,   60,   67,   67,
     1145       67,   67,   67,   67,  108,  153,   67,  114,  876,  873,
     1146       38,   60,  166,   38,   80,   80,   80,   80,   80,   80,
     1147
     1148       82,   82,   82,   82,   82,   82,   83,   83,   83,   83,
     1149       83,   83,  129,  166,  129,  104,  104,  104,  104,  107,
     1150       38,   38,   77,   77,  872,  107,  113,   77,  169,   77,
     1151      111,  132,  113,  132,   77,  103,  103,  103,  103,  103,
     1152      103,  131,  104,   77,   77,   77,   77,  104,  111,  169,
     1153      110,  107,  130,  131,   77,  131,  111,  105,  113,  105,
     1154      105,  105,  105,  105,  105,  151,  130,  103,  130,   77,
     1155      104,  134,   77,  134,  281,  116,  105,   77,   77,  110,
     1156      142,   77,   77,  151,  110,  133,  133,  152,  133,   77,
     1157      281,  105,   77,  116,   77,   77,   77,  105,   77,   85,
     1158
     1159      137,  116,  137,   85,   85,  152,  142,  110,   85,   85,
     1160      106,   85,  106,   85,  155,  106,  106,  106,  106,  106,
     1161      106,  150,   85,   85,   85,  135,  135,  135,  139,  145,
     1162      139,  156,  155,  160,  145,  161,  150,  157,  162,  167,
     1163      165,  168,   85,  150,  161,   85,  163,  106,  171,  157,
     1164      165,  163,  172,  156,  173,  160,  181,  176,  170,  162,
     1165      162,  181,  167,  170,  163,  174,  175,  172,  168,  182,
     1166      171,  173,  145,   85,   99,   99,   99,   99,   99,   99,
     1167      177,  170,  179,  174,  176,  184,  175,  183,  180,  185,
     1168       99,   99,  525,   99,   99,  525,  182,  179,  183,  218,
     1169
     1170      185,  218,  177,  184,  179,  180,   99,  191,  183,  183,
     1171      186,   99,   99,   99,  158,  186,   99,  185,   99,  158,
     1172      158,  158,  188,  158,  158,  190,  187,  158,  189,  158,
     1173      186,  205,  193,  189,  158,  158,  158,  627,  158,  187,
     1174      627,  192,  188,  194,  190,  193,  219,  193,  219,  220,
     1175      191,  220,  248,  191,  192,  189,  194,  205,  223,  225,
     1176      223,  225,  192,  197,  197,  197,  197,  197,  197,  198,
     1177      198,  197,  209,  209,  198,  200,  200,  209,  248,  870,
     1178      200,  202,  202,  308,  224,  224,  202,  224,  202,  308,
     1179      198,  198,  198,  198,  198,  198,  200,  200,  200,  200,
     1180
     1181      200,  200,  202,  202,  202,  202,  202,  202,  212,  212,
     1182      212,  212,  221,  222,  226,  226,  226,  228,  229,  228,
     1183      229,  234,  243,  237,  338,  222,  221,  222,  221,  235,
     1184      278,  235,  256,  279,  235,  235,  235,  235,  235,  235,
     1185      212,  236,  270,  278,  234,  236,  237,  280,  291,  241,
     1186      241,  279,  241,  241,  284,  266,  243,  266,  256,  267,
     1187      869,  267,  236,  291,  236,  280,  235,  338,  270,  236,
     1188      241,  241,  241,  282,  284,  241,  289,  241,  244,  244,
     1189      244,  244,  244,  244,  245,  245,  245,  245,  245,  245,
     1190      282,  247,  286,  247,  289,  244,  247,  247,  247,  247,
     1191
     1192      247,  247,  255,  255,  255,  255,  255,  255,  283,  285,
     1193      244,  295,  286,  283,  285,  288,  244,  246,  246,  246,
     1194      246,  246,  246,  253,  295,  292,  260,  260,  260,  260,
     1195      260,  260,  862,  246,  255,  296,  246,  246,  288,  293,
     1196      290,  292,  292,  294,  293,  253,  297,  253,  300,  246,
     1197      287,  253,  294,  300,  246,  303,  246,  253,  260,  246,
     1198      299,  246,  296,  304,  297,  287,  290,  301,  305,  253,
     1199      312,  287,  287,  253,  306,  303,  301,  253,  299,  306,
     1200      307,  304,  309,  310,  314,  307,  312,  311,  313,  305,
     1201      305,  315,  310,  311,  318,  316,  315,  313,  317,  314,
     1202
     1203      316,  309,  320,  317,  319,  322,  323,  324,  326,  327,
     1204      325,  328,  329,  318,  331,  320,  322,  332,  330,  333,
     1205      317,  323,  319,  325,  334,  335,  324,  330,  337,  329,
     1206      326,  328,  327,  339,  340,  341,  331,  337,  335,  342,
     1207      332,  333,  334,  341,  342,  343,  345,  340,  344,  344,
     1208      861,  339,  345,  344,  385,  344,  352,  352,  352,  352,
     1209      343,  353,  353,  353,  353,  362,  363,  362,  363,  370,
     1210      370,  370,  370,  370,  370,  372,  380,  372,  385,  860,
     1211      372,  372,  372,  372,  372,  372,  380,  402,  352,  371,
     1212      371,  371,  371,  371,  371,  374,  374,  374,  374,  374,
     1213
     1214      374,  404,  380,  402,  387,  371,  381,  401,  371,  371,
     1215      375,  375,  375,  375,  375,  375,  381,  383,  401,  382,
     1216      404,  371,  387,  383,  408,  432,  371,  374,  371,  403,
     1217      387,  371,  381,  371,  376,  376,  376,  376,  376,  376,
     1218      386,  382,  375,  382,  403,  405,  408,  382,  432,  383,
     1219      384,  859,  384,  382,  405,  384,  384,  384,  384,  384,
     1220      384,  406,  386,  412,  386,  382,  376,  407,  386,  382,
     1221      409,  410,  406,  382,  386,  411,  407,  415,  416,  409,
     1222      413,  414,  420,  417,  410,  412,  386,  384,  417,  418,
     1223      386,  411,  423,  413,  386,  419,  416,  414,  414,  415,
     1224
     1225      422,  419,  421,  420,  418,  427,  425,  423,  429,  430,
     1226      431,  418,  433,  421,  439,  434,  435,  427,  433,  422,
     1227      425,  437,  440,  431,  441,  435,  442,  443,  445,  429,
     1228      434,  430,  444,  447,  439,  449,  437,  445,  450,  441,
     1229      451,  456,  443,  452,  440,  453,  454,  450,  442,  457,
     1230      447,  455,  444,  460,  461,  463,  494,  458,  449,  456,
     1231      455,  451,  457,  452,  458,  453,  459,  462,  454,  464,
     1232      466,  468,  463,  459,  467,  462,  461,  468,  460,  495,
     1233      464,  491,  494,  467,  521,  462,  477,  477,  477,  477,
     1234      636,  491,  466,  488,  488,  488,  488,  488,  488,  490,
     1235
     1236      490,  490,  490,  490,  490,  495,  521,  491,  493,  488,
     1237      515,  518,  488,  488,  492,  516,  492,  636,  493,  492,
     1238      492,  492,  492,  492,  492,  488,  518,  515,  516,  519,
     1239      488,  490,  488,  520,  493,  488,  524,  488,  497,  497,
     1240      497,  497,  497,  497,  529,  522,  520,  524,  527,  519,
     1241      526,  492,  498,  498,  498,  498,  498,  498,  522,  523,
     1242      530,  533,  531,  527,  523,  529,  528,  531,  498,  530,
     1243      526,  498,  498,  499,  533,  499,  532,  534,  499,  499,
     1244      499,  499,  499,  499,  498,  528,  535,  532,  536,  498,
     1245      537,  498,  538,  539,  498,  535,  498,  541,  539,  542,
     1246
     1247      544,  538,  547,  541,  545,  534,  546,  537,  542,  549,
     1248      536,  547,  550,  551,  557,  552,  554,  544,  549,  545,
     1249      560,  546,  555,  557,  558,  551,  561,  555,  562,  550,
     1250      552,  554,  564,  558,  565,  567,  566,  568,  572,  561,
     1251      564,  569,  560,  566,  565,  562,  571,  569,  572,  568,
     1252      574,  575,  601,  621,  603,  571,  620,  567,  594,  594,
     1253      594,  594,  594,  594,  575,  620,  621,  574,  595,  595,
     1254      595,  595,  595,  595,  597,  601,  597,  603,  639,  597,
     1255      597,  597,  597,  597,  597,  602,  622,  639,  855,  602,
     1256      594,  596,  596,  596,  596,  596,  596,  600,  600,  600,
     1257
     1258      600,  600,  600,  622,  618,  619,  602,  596,  602,  618,
     1259      596,  596,  619,  602,  623,  626,  629,  624,  625,  631,
     1260      633,  628,  618,  596,  624,  630,  625,  632,  596,  600,
     1261      596,  635,  626,  596,  628,  596,  634,  623,  629,  634,
     1262      630,  631,  633,  637,  632,  638,  640,  641,  635,  644,
     1263      642,  645,  646,  651,  650,  657,  668,  656,  637,  642,
     1264      653,  646,  657,  851,  640,  638,  656,  664,  665,  641,
     1265      667,  668,  644,  645,  650,  699,  664,  653,  665,  667,
     1266      651,  686,  686,  686,  686,  686,  686,  690,  690,  690,
     1267      690,  690,  690,  700,  704,  702,  699,  686,  703,  704,
     1268
     1269      686,  686,  705,  700,  706,  703,  707,  706,  708,  707,
     1270      710,  711,  713,  686,  714,  713,  710,  715,  686,  690,
     1271      686,  702,  705,  686,  711,  686,  708,  712,  716,  717,
     1272      718,  716,  721,  720,  719,  714,  712,  719,  717,  722,
     1273      721,  723,  724,  725,  728,  715,  720,  732,  731,  722,
     1274      733,  735,  725,  736,  723,  718,  756,  761,  754,  735,
     1275      758,  756,  736,  724,  755,  757,  759,  728,  731,  732,
     1276      758,  733,  743,  743,  743,  743,  743,  743,  754,  760,
     1277      757,  755,  762,  761,  763,  762,  764,  766,  768,  759,
     1278      766,  768,  769,  772,  773,  770,  760,  763,  770,  769,
     1279
     1280      771,  778,  793,  771,  743,  795,  797,  796,  772,  797,
     1281      798,  799,  800,  764,  799,  800,  802,  773,  803,  804,
     1282      806,  810,  804,  811,  778,  796,  795,  807,  808,  793,
     1283      807,  808,  798,  826,  802,  809,  832,  810,  827,  811,
     1284      830,  829,  806,  803,  809,  827,  828,  848,  831,  828,
     1285      829,  831,  835,  832,  826,  835,  838,  839,  830,  838,
     1286      840,  849,  850,  853,  830,  852,  839,  850,  852,  840,
     1287      849,  854,  856,  853,  857,  856,  854,  857,  858,  863,
     1288      864,  858,  865,  866,  867,  865,  868,  867,  871,  868,
     1289      874,  875,  878,  866,  879,  864,  880,  882,  881,  863,
     1290
     1291      883,  878,  884,  847,  846,  845,  875,  879,  844,  843,
     1292      871,  874,  884,  842,  841,  882,  837,  836,  880,  881,
     1293      834,  833,  883,  888,  888,  888,  888,  888,  888,  888,
     1294      888,  888,  888,  888,  888,  888,  889,  889,  889,  889,
     1295      889,  889,  889,  889,  889,  889,  889,  889,  889,  890,
     1296      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
     1297      890,  890,  891,  825,  824,  891,  823,  891,  891,  891,
     1298      891,  891,  892,  822,  821,  820,  892,  892,  892,  892,
     1299      892,  892,  893,  893,  893,  893,  893,  893,  893,  893,
     1300      893,  893,  893,  893,  893,  894,  819,  818,  894,  817,
     1301
     1302      894,  894,  894,  894,  894,  895,  816,  895,  895,  815,
     1303      895,  895,  895,  895,  895,  895,  814,  895,  896,  813,
     1304      812,  896,  896,  896,  896,  896,  896,  896,  896,  805,
     1305      896,  897,  897,  897,  897,  897,  897,  897,  897,  897,
     1306      897,  897,  897,  897,  898,  898,  801,  898,  794,  792,
     1307      791,  898,  899,  790,  789,  899,  788,  899,  899,  899,
     1308      899,  899,  900,  787,  900,  786,  785,  784,  900,  901,
     1309      783,  901,  782,  781,  780,  901,  902,  779,  902,  777,
     1310      776,  775,  902,  903,  774,  903,  767,  765,  753,  903,
     1311      904,  752,  904,  751,  750,  749,  904,  905,  748,  905,
     1312
     1313      747,  746,  745,  905,  906,  742,  906,  741,  740,  734,
     1314      906,  907,  730,  907,  729,  727,  726,  907,  908,  709,
     1315      908,  701,  698,  693,  908,  909,  909,  909,  909,  909,
     1316      909,  909,  909,  909,  909,  909,  909,  909,  910,  691,
     1317      910,  911,  911,  687,  911,  911,  911,  677,  911,  912,
     1318      912,  673,  912,  913,  671,  913,  669,  666,  663,  913,
     1319      914,  662,  914,  661,  660,  659,  914,  915,  658,  915,
     1320      655,  654,  652,  915,  916,  649,  916,  917,  648,  917,
     1321      647,  643,  616,  917,  918,  612,  918,  919,  610,  608,
     1322      919,  606,  919,  919,  919,  919,  919,  920,  920,  920,
     1323
     1324      920,  920,  920,  920,  920,  920,  920,  920,  920,  920,
     1325      921,  921,  921,  921,  921,  921,  921,  921,  921,  921,
     1326      921,  921,  921,  922,  604,  922,  598,  592,  590,  922,
     1327      923,  588,  923,  586,  584,  582,  923,  924,  580,  924,
     1328      578,  577,  576,  924,  925,  573,  925,  926,  570,  926,
     1329      563,  559,  556,  926,  927,  553,  927,  928,  548,  928,
     1330      543,  540,  517,  928,  929,  513,  929,  930,  511,  930,
     1331      509,  507,  505,  930,  931,  503,  931,  932,  502,  932,
     1332      501,  500,  489,  932,  933,  486,  933,  934,  484,  934,
     1333      483,  482,  480,  934,  935,  478,  935,  936,  475,  936,
     1334
     1335      473,  471,  469,  936,  937,  465,  937,  938,  448,  938,
     1336      446,  938,  438,  938,  939,  436,  939,  428,  939,  426,
     1337      939,  940,  940,  424,  940,  940,  940,  398,  940,  941,
     1338      396,  941,  394,  392,  391,  941,  942,  390,  942,  377,
     1339      367,  365,  942,  943,  364,  943,  360,  358,  356,  943,
     1340      944,  354,  944,  945,  350,  945,  348,  347,  346,  945,
     1341      946,  336,  946,  947,  321,  947,  298,  277,  275,  947,
     1342      948,  273,  948,  949,  272,  949,  271,  269,  268,  949,
     1343      950,  263,  950,  951,  259,  258,  951,  254,  951,  951,
     1344      951,  951,  951,  952,  952,  952,  952,  952,  952,  952,
     1345
     1346      952,  952,  952,  952,  952,  952,  953,  251,  953,  250,
     1347      239,  238,  953,  954,  231,  954,  955,  230,  955,  227,
     1348      217,  215,  955,  956,  214,  956,  957,  213,  957,  207,
     1349      206,  204,  957,  958,  199,  958,  959,  178,  959,  149,
     1350      147,  146,  959,  960,  140,  960,  961,  138,  961,  136,
     1351      128,  125,  961,  962,  124,  962,  963,  120,  963,  101,
     1352       98,   95,  963,  964,   93,  964,  965,   86,  965,   72,
     1353       70,   66,  965,  966,   36,  966,   33,   18,   11,  966,
     1354      967,    4,  967,  968,    3,  968,    0,    0,    0,  968,
     1355      969,    0,  969,  970,    0,  970,    0,  970,    0,  970,
     1356
     1357      971,    0,  971,    0,    0,    0,  971,  972,    0,  972,
     1358        0,    0,    0,  972,  973,    0,  973,  974,    0,  974,
     1359        0,    0,    0,  974,  975,    0,  975,  976,    0,  976,
     1360        0,    0,    0,  976,  977,    0,  977,  978,    0,  978,
     1361        0,    0,    0,  978,  979,    0,  979,  980,    0,  980,
     1362        0,    0,    0,  980,  981,    0,  981,  982,    0,  982,
     1363        0,    0,    0,  982,  983,    0,  983,  984,    0,    0,
     1364      984,    0,  984,  984,  984,  984,  984,  985,  985,  985,
     1365      985,  985,  985,  985,  985,  985,  985,  985,  985,  985,
     1366      986,    0,  986,    0,    0,    0,  986,  987,    0,  987,
     1367
     1368      988,    0,  988,    0,    0,    0,  988,  989,    0,  989,
     1369      990,    0,  990,    0,    0,    0,  990,  991,    0,  991,
     1370      992,    0,  992,    0,    0,    0,  992,  993,    0,  993,
     1371      994,    0,  994,    0,    0,    0,  994,  995,    0,  995,
     1372      996,    0,  996,    0,    0,    0,  996,  997,    0,  997,
     1373      998,    0,  998,    0,    0,    0,  998,  999,    0,  999,
     1374     1000,    0, 1000,    0,    0,    0, 1000, 1001,    0, 1001,
     1375     1002,    0, 1002,    0,    0,    0, 1002, 1003,    0, 1003,
     1376        0,    0,    0, 1003, 1004,    0, 1004, 1005,    0, 1005,
     1377        0,    0,    0, 1005, 1006,    0, 1006, 1007,    0, 1007,
     1378
     1379        0,    0,    0, 1007, 1008,    0, 1008, 1009,    0, 1009,
     1380        0,    0,    0, 1009, 1010,    0, 1010, 1011,    0, 1011,
     1381     1012,    0, 1012, 1013,    0,    0, 1013,    0, 1013, 1013,
     1382     1013, 1013, 1013, 1014,    0, 1014, 1015, 1015, 1015, 1015,
     1383     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1016,
     1384        0, 1016,    0,    0,    0, 1016, 1017,    0, 1017, 1018,
     1385        0, 1018,    0,    0,    0, 1018, 1019,    0, 1019, 1020,
     1386        0, 1020, 1021,    0, 1021, 1022,    0,    0, 1022,    0,
     1387     1022, 1022, 1022, 1022, 1022, 1023,    0, 1023, 1024,    0,
     1388     1024, 1025,    0, 1025, 1026,    0, 1026, 1027,    0, 1027,
     1389
     1390     1028,    0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,
     1391        0,    0, 1030, 1031,    0, 1031, 1032,    0, 1032,    0,
     1392        0,    0, 1032, 1033,    0, 1033, 1034,    0, 1034, 1035,
     1393        0, 1035, 1036,    0, 1036, 1037,    0, 1037,    0,    0,
     1394        0, 1037, 1038,    0,    0, 1038,    0, 1038, 1038, 1038,
     1395     1038, 1038, 1039,    0, 1039, 1040,    0, 1040, 1041,    0,
     1396     1041, 1042,    0, 1042,    0,    0,    0, 1042, 1043,    0,
     1397     1043,    0,    0,    0, 1043, 1044,    0, 1044,    0,    0,
     1398        0, 1044, 1045,    0, 1045, 1046,    0, 1046,    0,    0,
     1399        0, 1046, 1047,    0, 1047,    0,    0,    0, 1047, 1048,
     1400
     1401        0, 1048,    0,    0,    0, 1048, 1049,    0, 1049,    0,
     1402        0,    0, 1049, 1050,    0, 1050,    0,    0,    0, 1050,
     1403     1051,    0, 1051,    0,    0,    0, 1051, 1052,    0, 1052,
     1404        0,    0,    0, 1052, 1053,    0, 1053,    0,    0,    0,
     1405     1053, 1054,    0, 1054,    0,    0,    0, 1054, 1055,    0,
     1406     1055,    0,    0,    0, 1055, 1056,    0, 1056,    0,    0,
     1407        0, 1056, 1057,    0, 1057,    0,    0,    0, 1057, 1058,
     1408        0, 1058,    0,    0,    0, 1058, 1059,    0, 1059,    0,
     1409        0,    0, 1059, 1060,    0, 1060,    0,    0,    0, 1060,
     1410     1061,    0, 1061,    0,    0,    0, 1061,  887,  887,  887,
     1411
    14181412      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    14191413      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     
    14231417      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    14241418      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1425 
    1426       887,  887,  887,  887,  887,  887,  887
     1419      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
     1420      887,  887
    14271421    } ;
    14281422
     
    14671461 * Created On       : Sat Sep 22 08:58:10 2001
    14681462 * Last Modified By : Peter A. Buhr
    1469  * Last Modified On : Mon Mar 21 23:33:46 2016
    1470  * Update Count     : 450
     1463 * Last Modified On : Wed Mar  2 18:07:20 2016
     1464 * Update Count     : 434
    14711465 */
    14721466#line 20 "lex.ll"
     
    14801474
    14811475#include "lex.h"
     1476#include "ParseNode.h"
    14821477#include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
    1483 #include "ParseNode.h"
    1484 #include "TypedefTable.h"
    14851478
    14861479char *yyfilename;
     
    14981491#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    14991492#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    1500 #define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
     1493#define IDENTIFIER_RETURN()     RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) )
    15011494#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
    15021495
     
    15181511// attribute identifier, GCC: $ in identifier
    15191512// numeric constants, CFA: '_' in constant
    1520 // GCC: D (double), DL (long double) and iI (imaginary) suffixes
    1521 //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI]))
     1513// GCC: D (double), LD (long double) and iI (imaginary) suffixes
    15221514// character escape sequence, GCC: \e => esc character
    15231515// ' stop highlighting
     
    15281520
    15291521
    1530 #line 1531 "Parser/lex.cc"
     1522#line 1523 "Parser/lex.cc"
    15311523
    15321524#define INITIAL 0
     
    17201712        register int yy_act;
    17211713   
    1722 #line 139 "lex.ll"
     1714#line 137 "lex.ll"
    17231715
    17241716                                   /* line directives */
    1725 #line 1726 "Parser/lex.cc"
     1717#line 1718 "Parser/lex.cc"
    17261718
    17271719        if ( !(yy_init) )
     
    17831775                        ++yy_cp;
    17841776                        }
    1785                 while ( yy_base[yy_current_state] != 2822 );
     1777                while ( yy_base[yy_current_state] != 2798 );
    17861778
    17871779yy_find_action:
     
    18201812/* rule 1 can match eol */
    18211813YY_RULE_SETUP
    1822 #line 141 "lex.ll"
     1814#line 139 "lex.ll"
    18231815{
    18241816        /* " stop highlighting */
     
    18471839/* rule 2 can match eol */
    18481840YY_RULE_SETUP
    1849 #line 164 "lex.ll"
     1841#line 162 "lex.ll"
    18501842;
    18511843        YY_BREAK
     
    18531845case 3:
    18541846YY_RULE_SETUP
    1855 #line 167 "lex.ll"
     1847#line 165 "lex.ll"
    18561848{ BEGIN COMMENT; }
    18571849        YY_BREAK
     
    18591851/* rule 4 can match eol */
    18601852YY_RULE_SETUP
    1861 #line 168 "lex.ll"
     1853#line 166 "lex.ll"
    18621854;
    18631855        YY_BREAK
    18641856case 5:
    18651857YY_RULE_SETUP
    1866 #line 169 "lex.ll"
     1858#line 167 "lex.ll"
    18671859{ BEGIN 0; }
    18681860        YY_BREAK
     
    18711863/* rule 6 can match eol */
    18721864YY_RULE_SETUP
    1873 #line 172 "lex.ll"
     1865#line 170 "lex.ll"
    18741866;
    18751867        YY_BREAK
     
    18771869case 7:
    18781870YY_RULE_SETUP
    1879 #line 175 "lex.ll"
     1871#line 173 "lex.ll"
    18801872{ WHITE_RETURN(' '); }
    18811873        YY_BREAK
    18821874case 8:
    18831875YY_RULE_SETUP
    1884 #line 176 "lex.ll"
     1876#line 174 "lex.ll"
    18851877{ WHITE_RETURN(' '); }
    18861878        YY_BREAK
     
    18881880/* rule 9 can match eol */
    18891881YY_RULE_SETUP
    1890 #line 177 "lex.ll"
     1882#line 175 "lex.ll"
    18911883{ NEWLINE_RETURN(); }
    18921884        YY_BREAK
     
    18941886case 10:
    18951887YY_RULE_SETUP
     1888#line 178 "lex.ll"
     1889{ KEYWORD_RETURN(ALIGNAS); }                    // C11
     1890        YY_BREAK
     1891case 11:
     1892YY_RULE_SETUP
     1893#line 179 "lex.ll"
     1894{ KEYWORD_RETURN(ALIGNOF); }                    // C11
     1895        YY_BREAK
     1896case 12:
     1897YY_RULE_SETUP
    18961898#line 180 "lex.ll"
    1897 { KEYWORD_RETURN(ALIGNAS); }                    // C11
    1898         YY_BREAK
    1899 case 11:
     1899{ KEYWORD_RETURN(ALIGNOF); }                    // GCC
     1900        YY_BREAK
     1901case 13:
    19001902YY_RULE_SETUP
    19011903#line 181 "lex.ll"
    1902 { KEYWORD_RETURN(ALIGNOF); }                    // C11
    1903         YY_BREAK
    1904 case 12:
     1904{ KEYWORD_RETURN(ALIGNOF); }                    // GCC
     1905        YY_BREAK
     1906case 14:
    19051907YY_RULE_SETUP
    19061908#line 182 "lex.ll"
    1907 { KEYWORD_RETURN(ALIGNOF); }                    // GCC
    1908         YY_BREAK
    1909 case 13:
     1909{ KEYWORD_RETURN(ASM); }
     1910        YY_BREAK
     1911case 15:
    19101912YY_RULE_SETUP
    19111913#line 183 "lex.ll"
    1912 { KEYWORD_RETURN(ALIGNOF); }                    // GCC
    1913         YY_BREAK
    1914 case 14:
     1914{ KEYWORD_RETURN(ASM); }                                // GCC
     1915        YY_BREAK
     1916case 16:
    19151917YY_RULE_SETUP
    19161918#line 184 "lex.ll"
    1917 { KEYWORD_RETURN(ASM); }
    1918         YY_BREAK
    1919 case 15:
     1919{ KEYWORD_RETURN(ASM); }                                // GCC
     1920        YY_BREAK
     1921case 17:
    19201922YY_RULE_SETUP
    19211923#line 185 "lex.ll"
    1922 { KEYWORD_RETURN(ASM); }                                // GCC
    1923         YY_BREAK
    1924 case 16:
     1924{ KEYWORD_RETURN(AT); }                                 // CFA
     1925        YY_BREAK
     1926case 18:
    19251927YY_RULE_SETUP
    19261928#line 186 "lex.ll"
    1927 { KEYWORD_RETURN(ASM); }                                // GCC
    1928         YY_BREAK
    1929 case 17:
     1929{ KEYWORD_RETURN(ATOMIC); }                             // C11
     1930        YY_BREAK
     1931case 19:
    19301932YY_RULE_SETUP
    19311933#line 187 "lex.ll"
    1932 { KEYWORD_RETURN(AT); }                                 // CFA
    1933         YY_BREAK
    1934 case 18:
     1934{ KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
     1935        YY_BREAK
     1936case 20:
    19351937YY_RULE_SETUP
    19361938#line 188 "lex.ll"
    1937 { KEYWORD_RETURN(ATOMIC); }                             // C11
    1938         YY_BREAK
    1939 case 19:
     1939{ KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
     1940        YY_BREAK
     1941case 21:
    19401942YY_RULE_SETUP
    19411943#line 189 "lex.ll"
    1942 { KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    1943         YY_BREAK
    1944 case 20:
     1944{ KEYWORD_RETURN(AUTO); }
     1945        YY_BREAK
     1946case 22:
    19451947YY_RULE_SETUP
    19461948#line 190 "lex.ll"
    1947 { KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    1948         YY_BREAK
    1949 case 21:
     1949{ KEYWORD_RETURN(BOOL); }                               // C99
     1950        YY_BREAK
     1951case 23:
    19501952YY_RULE_SETUP
    19511953#line 191 "lex.ll"
    1952 { KEYWORD_RETURN(AUTO); }
    1953         YY_BREAK
    1954 case 22:
     1954{ KEYWORD_RETURN(BREAK); }
     1955        YY_BREAK
     1956case 24:
    19551957YY_RULE_SETUP
    19561958#line 192 "lex.ll"
    1957 { KEYWORD_RETURN(BOOL); }                               // C99
    1958         YY_BREAK
    1959 case 23:
     1959{ KEYWORD_RETURN(CASE); }
     1960        YY_BREAK
     1961case 25:
    19601962YY_RULE_SETUP
    19611963#line 193 "lex.ll"
    1962 { KEYWORD_RETURN(BREAK); }
    1963         YY_BREAK
    1964 case 24:
     1964{ KEYWORD_RETURN(CATCH); }                              // CFA
     1965        YY_BREAK
     1966case 26:
    19651967YY_RULE_SETUP
    19661968#line 194 "lex.ll"
    1967 { KEYWORD_RETURN(CASE); }
    1968         YY_BREAK
    1969 case 25:
     1969{ KEYWORD_RETURN(CATCHRESUME); }                // CFA
     1970        YY_BREAK
     1971case 27:
    19701972YY_RULE_SETUP
    19711973#line 195 "lex.ll"
    1972 { KEYWORD_RETURN(CATCH); }                              // CFA
    1973         YY_BREAK
    1974 case 26:
     1974{ KEYWORD_RETURN(CHAR); }
     1975        YY_BREAK
     1976case 28:
    19751977YY_RULE_SETUP
    19761978#line 196 "lex.ll"
    1977 { KEYWORD_RETURN(CATCHRESUME); }                // CFA
    1978         YY_BREAK
    1979 case 27:
     1979{ KEYWORD_RETURN(CHOOSE); }                             // CFA
     1980        YY_BREAK
     1981case 29:
    19801982YY_RULE_SETUP
    19811983#line 197 "lex.ll"
    1982 { KEYWORD_RETURN(CHAR); }
    1983         YY_BREAK
    1984 case 28:
     1984{ KEYWORD_RETURN(COMPLEX); }                    // C99
     1985        YY_BREAK
     1986case 30:
    19851987YY_RULE_SETUP
    19861988#line 198 "lex.ll"
    1987 { KEYWORD_RETURN(CHOOSE); }                             // CFA
    1988         YY_BREAK
    1989 case 29:
     1989{ KEYWORD_RETURN(COMPLEX); }                    // GCC
     1990        YY_BREAK
     1991case 31:
    19901992YY_RULE_SETUP
    19911993#line 199 "lex.ll"
    1992 { KEYWORD_RETURN(COMPLEX); }                    // C99
    1993         YY_BREAK
    1994 case 30:
     1994{ KEYWORD_RETURN(COMPLEX); }                    // GCC
     1995        YY_BREAK
     1996case 32:
    19951997YY_RULE_SETUP
    19961998#line 200 "lex.ll"
    1997 { KEYWORD_RETURN(COMPLEX); }                    // GCC
    1998         YY_BREAK
    1999 case 31:
     1999{ KEYWORD_RETURN(CONST); }
     2000        YY_BREAK
     2001case 33:
    20002002YY_RULE_SETUP
    20012003#line 201 "lex.ll"
    2002 { KEYWORD_RETURN(COMPLEX); }                    // GCC
    2003         YY_BREAK
    2004 case 32:
     2004{ KEYWORD_RETURN(CONST); }                              // GCC
     2005        YY_BREAK
     2006case 34:
    20052007YY_RULE_SETUP
    20062008#line 202 "lex.ll"
    2007 { KEYWORD_RETURN(CONST); }
    2008         YY_BREAK
    2009 case 33:
     2009{ KEYWORD_RETURN(CONST); }                              // GCC
     2010        YY_BREAK
     2011case 35:
    20102012YY_RULE_SETUP
    20112013#line 203 "lex.ll"
    2012 { KEYWORD_RETURN(CONST); }                              // GCC
    2013         YY_BREAK
    2014 case 34:
     2014{ KEYWORD_RETURN(CONTINUE); }
     2015        YY_BREAK
     2016case 36:
    20152017YY_RULE_SETUP
    20162018#line 204 "lex.ll"
    2017 { KEYWORD_RETURN(CONST); }                              // GCC
    2018         YY_BREAK
    2019 case 35:
     2019{ KEYWORD_RETURN(DEFAULT); }
     2020        YY_BREAK
     2021case 37:
    20202022YY_RULE_SETUP
    20212023#line 205 "lex.ll"
    2022 { KEYWORD_RETURN(CONTINUE); }
    2023         YY_BREAK
    2024 case 36:
     2024{ KEYWORD_RETURN(DISABLE); }                    // CFA
     2025        YY_BREAK
     2026case 38:
    20252027YY_RULE_SETUP
    20262028#line 206 "lex.ll"
    2027 { KEYWORD_RETURN(DEFAULT); }
    2028         YY_BREAK
    2029 case 37:
     2029{ KEYWORD_RETURN(DO); }
     2030        YY_BREAK
     2031case 39:
    20302032YY_RULE_SETUP
    20312033#line 207 "lex.ll"
    2032 { KEYWORD_RETURN(DISABLE); }                    // CFA
    2033         YY_BREAK
    2034 case 38:
     2034{ KEYWORD_RETURN(DOUBLE); }
     2035        YY_BREAK
     2036case 40:
    20352037YY_RULE_SETUP
    20362038#line 208 "lex.ll"
    2037 { KEYWORD_RETURN(DO); }
    2038         YY_BREAK
    2039 case 39:
     2039{ KEYWORD_RETURN(DTYPE); }                              // CFA
     2040        YY_BREAK
     2041case 41:
    20402042YY_RULE_SETUP
    20412043#line 209 "lex.ll"
    2042 { KEYWORD_RETURN(DOUBLE); }
    2043         YY_BREAK
    2044 case 40:
     2044{ KEYWORD_RETURN(ELSE); }
     2045        YY_BREAK
     2046case 42:
    20452047YY_RULE_SETUP
    20462048#line 210 "lex.ll"
    2047 { KEYWORD_RETURN(DTYPE); }                              // CFA
    2048         YY_BREAK
    2049 case 41:
     2049{ KEYWORD_RETURN(ENABLE); }                             // CFA
     2050        YY_BREAK
     2051case 43:
    20502052YY_RULE_SETUP
    20512053#line 211 "lex.ll"
    2052 { KEYWORD_RETURN(ELSE); }
    2053         YY_BREAK
    2054 case 42:
     2054{ KEYWORD_RETURN(ENUM); }
     2055        YY_BREAK
     2056case 44:
    20552057YY_RULE_SETUP
    20562058#line 212 "lex.ll"
    2057 { KEYWORD_RETURN(ENABLE); }                             // CFA
    2058         YY_BREAK
    2059 case 43:
     2059{ KEYWORD_RETURN(EXTENSION); }                  // GCC
     2060        YY_BREAK
     2061case 45:
    20602062YY_RULE_SETUP
    20612063#line 213 "lex.ll"
    2062 { KEYWORD_RETURN(ENUM); }
    2063         YY_BREAK
    2064 case 44:
     2064{ KEYWORD_RETURN(EXTERN); }
     2065        YY_BREAK
     2066case 46:
    20652067YY_RULE_SETUP
    20662068#line 214 "lex.ll"
    2067 { KEYWORD_RETURN(EXTENSION); }                  // GCC
    2068         YY_BREAK
    2069 case 45:
     2069{ KEYWORD_RETURN(FALLTHRU); }                   // CFA
     2070        YY_BREAK
     2071case 47:
    20702072YY_RULE_SETUP
    20712073#line 215 "lex.ll"
    2072 { KEYWORD_RETURN(EXTERN); }
    2073         YY_BREAK
    2074 case 46:
     2074{ KEYWORD_RETURN(FINALLY); }                    // CFA
     2075        YY_BREAK
     2076case 48:
    20752077YY_RULE_SETUP
    20762078#line 216 "lex.ll"
    2077 { KEYWORD_RETURN(FALLTHRU); }                   // CFA
    2078         YY_BREAK
    2079 case 47:
     2079{ KEYWORD_RETURN(FLOAT); }
     2080        YY_BREAK
     2081case 49:
    20802082YY_RULE_SETUP
    20812083#line 217 "lex.ll"
    2082 { KEYWORD_RETURN(FINALLY); }                    // CFA
    2083         YY_BREAK
    2084 case 48:
     2084{ KEYWORD_RETURN(FLOAT); }                              // GCC
     2085        YY_BREAK
     2086case 50:
    20852087YY_RULE_SETUP
    20862088#line 218 "lex.ll"
    2087 { KEYWORD_RETURN(FLOAT); }
    2088         YY_BREAK
    2089 case 49:
     2089{ KEYWORD_RETURN(FOR); }
     2090        YY_BREAK
     2091case 51:
    20902092YY_RULE_SETUP
    20912093#line 219 "lex.ll"
    2092 { KEYWORD_RETURN(FLOAT); }                              // GCC
    2093         YY_BREAK
    2094 case 50:
     2094{ KEYWORD_RETURN(FORALL); }                             // CFA
     2095        YY_BREAK
     2096case 52:
    20952097YY_RULE_SETUP
    20962098#line 220 "lex.ll"
    2097 { KEYWORD_RETURN(FOR); }
    2098         YY_BREAK
    2099 case 51:
     2099{ KEYWORD_RETURN(FORTRAN); }
     2100        YY_BREAK
     2101case 53:
    21002102YY_RULE_SETUP
    21012103#line 221 "lex.ll"
    2102 { KEYWORD_RETURN(FORALL); }                             // CFA
    2103         YY_BREAK
    2104 case 52:
     2104{ KEYWORD_RETURN(FTYPE); }                              // CFA
     2105        YY_BREAK
     2106case 54:
    21052107YY_RULE_SETUP
    21062108#line 222 "lex.ll"
    2107 { KEYWORD_RETURN(FORTRAN); }
    2108         YY_BREAK
    2109 case 53:
     2109{ KEYWORD_RETURN(GENERIC); }                    // C11
     2110        YY_BREAK
     2111case 55:
    21102112YY_RULE_SETUP
    21112113#line 223 "lex.ll"
    2112 { KEYWORD_RETURN(FTYPE); }                              // CFA
    2113         YY_BREAK
    2114 case 54:
     2114{ KEYWORD_RETURN(GOTO); }
     2115        YY_BREAK
     2116case 56:
    21152117YY_RULE_SETUP
    21162118#line 224 "lex.ll"
    2117 { KEYWORD_RETURN(GENERIC); }                    // C11
    2118         YY_BREAK
    2119 case 55:
     2119{ KEYWORD_RETURN(IF); }
     2120        YY_BREAK
     2121case 57:
    21202122YY_RULE_SETUP
    21212123#line 225 "lex.ll"
    2122 { KEYWORD_RETURN(GOTO); }
    2123         YY_BREAK
    2124 case 56:
     2124{ KEYWORD_RETURN(IMAGINARY); }                  // C99
     2125        YY_BREAK
     2126case 58:
    21252127YY_RULE_SETUP
    21262128#line 226 "lex.ll"
    2127 { KEYWORD_RETURN(IF); }
    2128         YY_BREAK
    2129 case 57:
     2129{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
     2130        YY_BREAK
     2131case 59:
    21302132YY_RULE_SETUP
    21312133#line 227 "lex.ll"
    2132 { KEYWORD_RETURN(IMAGINARY); }                  // C99
    2133         YY_BREAK
    2134 case 58:
     2134{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
     2135        YY_BREAK
     2136case 60:
    21352137YY_RULE_SETUP
    21362138#line 228 "lex.ll"
    2137 { KEYWORD_RETURN(IMAGINARY); }                  // GCC
    2138         YY_BREAK
    2139 case 59:
     2139{ KEYWORD_RETURN(INLINE); }                             // C99
     2140        YY_BREAK
     2141case 61:
    21402142YY_RULE_SETUP
    21412143#line 229 "lex.ll"
    2142 { KEYWORD_RETURN(IMAGINARY); }                  // GCC
    2143         YY_BREAK
    2144 case 60:
     2144{ KEYWORD_RETURN(INLINE); }                             // GCC
     2145        YY_BREAK
     2146case 62:
    21452147YY_RULE_SETUP
    21462148#line 230 "lex.ll"
    2147 { KEYWORD_RETURN(INLINE); }                             // C99
    2148         YY_BREAK
    2149 case 61:
     2149{ KEYWORD_RETURN(INLINE); }                             // GCC
     2150        YY_BREAK
     2151case 63:
    21502152YY_RULE_SETUP
    21512153#line 231 "lex.ll"
    2152 { KEYWORD_RETURN(INLINE); }                             // GCC
    2153         YY_BREAK
    2154 case 62:
     2154{ KEYWORD_RETURN(INT); }
     2155        YY_BREAK
     2156case 64:
    21552157YY_RULE_SETUP
    21562158#line 232 "lex.ll"
    2157 { KEYWORD_RETURN(INLINE); }                             // GCC
    2158         YY_BREAK
    2159 case 63:
     2159{ KEYWORD_RETURN(INT); }                                // GCC
     2160        YY_BREAK
     2161case 65:
    21602162YY_RULE_SETUP
    21612163#line 233 "lex.ll"
    2162 { KEYWORD_RETURN(INT); }
    2163         YY_BREAK
    2164 case 64:
     2164{ KEYWORD_RETURN(LABEL); }                              // GCC
     2165        YY_BREAK
     2166case 66:
    21652167YY_RULE_SETUP
    21662168#line 234 "lex.ll"
    2167 { KEYWORD_RETURN(INT); }                                // GCC
    2168         YY_BREAK
    2169 case 65:
     2169{ KEYWORD_RETURN(LONG); }
     2170        YY_BREAK
     2171case 67:
    21702172YY_RULE_SETUP
    21712173#line 235 "lex.ll"
    2172 { KEYWORD_RETURN(LABEL); }                              // GCC
    2173         YY_BREAK
    2174 case 66:
     2174{ KEYWORD_RETURN(LVALUE); }                             // CFA
     2175        YY_BREAK
     2176case 68:
    21752177YY_RULE_SETUP
    21762178#line 236 "lex.ll"
    2177 { KEYWORD_RETURN(LONG); }
    2178         YY_BREAK
    2179 case 67:
     2179{ KEYWORD_RETURN(NORETURN); }                   // C11
     2180        YY_BREAK
     2181case 69:
    21802182YY_RULE_SETUP
    21812183#line 237 "lex.ll"
    2182 { KEYWORD_RETURN(LVALUE); }                             // CFA
    2183         YY_BREAK
    2184 case 68:
     2184{ KEYWORD_RETURN(OFFSETOF); }           // GCC
     2185        YY_BREAK
     2186case 70:
    21852187YY_RULE_SETUP
    21862188#line 238 "lex.ll"
    2187 { KEYWORD_RETURN(NORETURN); }                   // C11
    2188         YY_BREAK
    2189 case 69:
     2189{ KEYWORD_RETURN(OTYPE); }                              // CFA
     2190        YY_BREAK
     2191case 71:
    21902192YY_RULE_SETUP
    21912193#line 239 "lex.ll"
    2192 { KEYWORD_RETURN(OFFSETOF); }           // GCC
    2193         YY_BREAK
    2194 case 70:
     2194{ KEYWORD_RETURN(REGISTER); }
     2195        YY_BREAK
     2196case 72:
    21952197YY_RULE_SETUP
    21962198#line 240 "lex.ll"
    2197 { KEYWORD_RETURN(OTYPE); }                              // CFA
    2198         YY_BREAK
    2199 case 71:
     2199{ KEYWORD_RETURN(RESTRICT); }                   // C99
     2200        YY_BREAK
     2201case 73:
    22002202YY_RULE_SETUP
    22012203#line 241 "lex.ll"
    2202 { KEYWORD_RETURN(REGISTER); }
    2203         YY_BREAK
    2204 case 72:
     2204{ KEYWORD_RETURN(RESTRICT); }                   // GCC
     2205        YY_BREAK
     2206case 74:
    22052207YY_RULE_SETUP
    22062208#line 242 "lex.ll"
    2207 { KEYWORD_RETURN(RESTRICT); }                   // C99
    2208         YY_BREAK
    2209 case 73:
     2209{ KEYWORD_RETURN(RESTRICT); }                   // GCC
     2210        YY_BREAK
     2211case 75:
    22102212YY_RULE_SETUP
    22112213#line 243 "lex.ll"
    2212 { KEYWORD_RETURN(RESTRICT); }                   // GCC
    2213         YY_BREAK
    2214 case 74:
     2214{ KEYWORD_RETURN(RETURN); }
     2215        YY_BREAK
     2216case 76:
    22152217YY_RULE_SETUP
    22162218#line 244 "lex.ll"
    2217 { KEYWORD_RETURN(RESTRICT); }                   // GCC
    2218         YY_BREAK
    2219 case 75:
     2219{ KEYWORD_RETURN(SHORT); }
     2220        YY_BREAK
     2221case 77:
    22202222YY_RULE_SETUP
    22212223#line 245 "lex.ll"
    2222 { KEYWORD_RETURN(RETURN); }
    2223         YY_BREAK
    2224 case 76:
     2224{ KEYWORD_RETURN(SIGNED); }
     2225        YY_BREAK
     2226case 78:
    22252227YY_RULE_SETUP
    22262228#line 246 "lex.ll"
    2227 { KEYWORD_RETURN(SHORT); }
    2228         YY_BREAK
    2229 case 77:
     2229{ KEYWORD_RETURN(SIGNED); }                             // GCC
     2230        YY_BREAK
     2231case 79:
    22302232YY_RULE_SETUP
    22312233#line 247 "lex.ll"
    2232 { KEYWORD_RETURN(SIGNED); }
    2233         YY_BREAK
    2234 case 78:
     2234{ KEYWORD_RETURN(SIGNED); }                             // GCC
     2235        YY_BREAK
     2236case 80:
    22352237YY_RULE_SETUP
    22362238#line 248 "lex.ll"
    2237 { KEYWORD_RETURN(SIGNED); }                             // GCC
    2238         YY_BREAK
    2239 case 79:
     2239{ KEYWORD_RETURN(SIZEOF); }
     2240        YY_BREAK
     2241case 81:
    22402242YY_RULE_SETUP
    22412243#line 249 "lex.ll"
    2242 { KEYWORD_RETURN(SIGNED); }                             // GCC
    2243         YY_BREAK
    2244 case 80:
     2244{ KEYWORD_RETURN(STATIC); }
     2245        YY_BREAK
     2246case 82:
    22452247YY_RULE_SETUP
    22462248#line 250 "lex.ll"
    2247 { KEYWORD_RETURN(SIZEOF); }
    2248         YY_BREAK
    2249 case 81:
     2249{ KEYWORD_RETURN(STATICASSERT); }               // C11
     2250        YY_BREAK
     2251case 83:
    22502252YY_RULE_SETUP
    22512253#line 251 "lex.ll"
    2252 { KEYWORD_RETURN(STATIC); }
    2253         YY_BREAK
    2254 case 82:
     2254{ KEYWORD_RETURN(STRUCT); }
     2255        YY_BREAK
     2256case 84:
    22552257YY_RULE_SETUP
    22562258#line 252 "lex.ll"
    2257 { KEYWORD_RETURN(STATICASSERT); }               // C11
    2258         YY_BREAK
    2259 case 83:
     2259{ KEYWORD_RETURN(SWITCH); }
     2260        YY_BREAK
     2261case 85:
    22602262YY_RULE_SETUP
    22612263#line 253 "lex.ll"
    2262 { KEYWORD_RETURN(STRUCT); }
    2263         YY_BREAK
    2264 case 84:
     2264{ KEYWORD_RETURN(THREADLOCAL); }                // C11
     2265        YY_BREAK
     2266case 86:
    22652267YY_RULE_SETUP
    22662268#line 254 "lex.ll"
    2267 { KEYWORD_RETURN(SWITCH); }
    2268         YY_BREAK
    2269 case 85:
     2269{ KEYWORD_RETURN(THROW); }                              // CFA
     2270        YY_BREAK
     2271case 87:
    22702272YY_RULE_SETUP
    22712273#line 255 "lex.ll"
    2272 { KEYWORD_RETURN(THREADLOCAL); }                // C11
    2273         YY_BREAK
    2274 case 86:
     2274{ KEYWORD_RETURN(THROWRESUME); }                // CFA
     2275        YY_BREAK
     2276case 88:
    22752277YY_RULE_SETUP
    22762278#line 256 "lex.ll"
    2277 { KEYWORD_RETURN(THROW); }                              // CFA
    2278         YY_BREAK
    2279 case 87:
     2279{ KEYWORD_RETURN(TRAIT); }                              // CFA
     2280        YY_BREAK
     2281case 89:
    22802282YY_RULE_SETUP
    22812283#line 257 "lex.ll"
    2282 { KEYWORD_RETURN(THROWRESUME); }                // CFA
    2283         YY_BREAK
    2284 case 88:
     2284{ KEYWORD_RETURN(TRY); }                                // CFA
     2285        YY_BREAK
     2286case 90:
    22852287YY_RULE_SETUP
    22862288#line 258 "lex.ll"
    2287 { KEYWORD_RETURN(TRAIT); }                              // CFA
    2288         YY_BREAK
    2289 case 89:
     2289{ KEYWORD_RETURN(TYPEDEF); }
     2290        YY_BREAK
     2291case 91:
    22902292YY_RULE_SETUP
    22912293#line 259 "lex.ll"
    2292 { KEYWORD_RETURN(TRY); }                                // CFA
    2293         YY_BREAK
    2294 case 90:
     2294{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2295        YY_BREAK
     2296case 92:
    22952297YY_RULE_SETUP
    22962298#line 260 "lex.ll"
    2297 { KEYWORD_RETURN(TYPEDEF); }
    2298         YY_BREAK
    2299 case 91:
     2299{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2300        YY_BREAK
     2301case 93:
    23002302YY_RULE_SETUP
    23012303#line 261 "lex.ll"
    23022304{ KEYWORD_RETURN(TYPEOF); }                             // GCC
    23032305        YY_BREAK
    2304 case 92:
     2306case 94:
    23052307YY_RULE_SETUP
    23062308#line 262 "lex.ll"
    2307 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    2308         YY_BREAK
    2309 case 93:
     2309{ KEYWORD_RETURN(UNION); }
     2310        YY_BREAK
     2311case 95:
    23102312YY_RULE_SETUP
    23112313#line 263 "lex.ll"
    2312 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    2313         YY_BREAK
    2314 case 94:
     2314{ KEYWORD_RETURN(UNSIGNED); }
     2315        YY_BREAK
     2316case 96:
    23152317YY_RULE_SETUP
    23162318#line 264 "lex.ll"
    2317 { KEYWORD_RETURN(UNION); }
    2318         YY_BREAK
    2319 case 95:
     2319{ KEYWORD_RETURN(VALIST); }                     // GCC
     2320        YY_BREAK
     2321case 97:
    23202322YY_RULE_SETUP
    23212323#line 265 "lex.ll"
    2322 { KEYWORD_RETURN(UNSIGNED); }
    2323         YY_BREAK
    2324 case 96:
     2324{ KEYWORD_RETURN(VOID); }
     2325        YY_BREAK
     2326case 98:
    23252327YY_RULE_SETUP
    23262328#line 266 "lex.ll"
    2327 { KEYWORD_RETURN(VALIST); }                     // GCC
    2328         YY_BREAK
    2329 case 97:
     2329{ KEYWORD_RETURN(VOLATILE); }
     2330        YY_BREAK
     2331case 99:
    23302332YY_RULE_SETUP
    23312333#line 267 "lex.ll"
    2332 { KEYWORD_RETURN(VOID); }
    2333         YY_BREAK
    2334 case 98:
     2334{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2335        YY_BREAK
     2336case 100:
    23352337YY_RULE_SETUP
    23362338#line 268 "lex.ll"
    2337 { KEYWORD_RETURN(VOLATILE); }
    2338         YY_BREAK
    2339 case 99:
     2339{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2340        YY_BREAK
     2341case 101:
    23402342YY_RULE_SETUP
    23412343#line 269 "lex.ll"
    2342 { KEYWORD_RETURN(VOLATILE); }                   // GCC
    2343         YY_BREAK
    2344 case 100:
    2345 YY_RULE_SETUP
    2346 #line 270 "lex.ll"
    2347 { KEYWORD_RETURN(VOLATILE); }                   // GCC
    2348         YY_BREAK
    2349 case 101:
    2350 YY_RULE_SETUP
    2351 #line 271 "lex.ll"
    23522344{ KEYWORD_RETURN(WHILE); }
    23532345        YY_BREAK
     
    23552347case 102:
    23562348YY_RULE_SETUP
     2349#line 272 "lex.ll"
     2350{ IDENTIFIER_RETURN(); }
     2351        YY_BREAK
     2352case 103:
     2353YY_RULE_SETUP
     2354#line 273 "lex.ll"
     2355{ ATTRIBUTE_RETURN(); }
     2356        YY_BREAK
     2357case 104:
     2358YY_RULE_SETUP
    23572359#line 274 "lex.ll"
     2360{ BEGIN BKQUOTE; }
     2361        YY_BREAK
     2362case 105:
     2363YY_RULE_SETUP
     2364#line 275 "lex.ll"
    23582365{ IDENTIFIER_RETURN(); }
    23592366        YY_BREAK
    2360 case 103:
    2361 YY_RULE_SETUP
    2362 #line 275 "lex.ll"
    2363 { ATTRIBUTE_RETURN(); }
    2364         YY_BREAK
    2365 case 104:
     2367case 106:
    23662368YY_RULE_SETUP
    23672369#line 276 "lex.ll"
    2368 { BEGIN BKQUOTE; }
    2369         YY_BREAK
    2370 case 105:
    2371 YY_RULE_SETUP
    2372 #line 277 "lex.ll"
    2373 { IDENTIFIER_RETURN(); }
    2374         YY_BREAK
    2375 case 106:
    2376 YY_RULE_SETUP
    2377 #line 278 "lex.ll"
    23782370{ BEGIN 0; }
    23792371        YY_BREAK
     
    23812373case 107:
    23822374YY_RULE_SETUP
     2375#line 279 "lex.ll"
     2376{ NUMERIC_RETURN(ZERO); }                               // CFA
     2377        YY_BREAK
     2378case 108:
     2379YY_RULE_SETUP
     2380#line 280 "lex.ll"
     2381{ NUMERIC_RETURN(ONE); }                                // CFA
     2382        YY_BREAK
     2383case 109:
     2384YY_RULE_SETUP
    23832385#line 281 "lex.ll"
    2384 { NUMERIC_RETURN(ZERO); }                               // CFA
    2385         YY_BREAK
    2386 case 108:
     2386{ NUMERIC_RETURN(INTEGERconstant); }
     2387        YY_BREAK
     2388case 110:
    23872389YY_RULE_SETUP
    23882390#line 282 "lex.ll"
    2389 { NUMERIC_RETURN(ONE); }                                // CFA
    2390         YY_BREAK
    2391 case 109:
     2391{ NUMERIC_RETURN(INTEGERconstant); }
     2392        YY_BREAK
     2393case 111:
    23922394YY_RULE_SETUP
    23932395#line 283 "lex.ll"
    23942396{ NUMERIC_RETURN(INTEGERconstant); }
    23952397        YY_BREAK
    2396 case 110:
     2398case 112:
    23972399YY_RULE_SETUP
    23982400#line 284 "lex.ll"
    2399 { NUMERIC_RETURN(INTEGERconstant); }
    2400         YY_BREAK
    2401 case 111:
     2401{ NUMERIC_RETURN(FLOATINGconstant); }
     2402        YY_BREAK
     2403case 113:
    24022404YY_RULE_SETUP
    24032405#line 285 "lex.ll"
    2404 { NUMERIC_RETURN(INTEGERconstant); }
    2405         YY_BREAK
    2406 case 112:
    2407 YY_RULE_SETUP
    2408 #line 286 "lex.ll"
    2409 { NUMERIC_RETURN(FLOATINGconstant); }
    2410         YY_BREAK
    2411 case 113:
    2412 YY_RULE_SETUP
    2413 #line 287 "lex.ll"
    24142406{ NUMERIC_RETURN(FLOATINGconstant); }
    24152407        YY_BREAK
     
    24172409case 114:
    24182410YY_RULE_SETUP
    2419 #line 290 "lex.ll"
     2411#line 288 "lex.ll"
    24202412{ BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    24212413        YY_BREAK
    24222414case 115:
    24232415YY_RULE_SETUP
    2424 #line 291 "lex.ll"
     2416#line 289 "lex.ll"
    24252417{ *strtext += std::string( yytext ); }
    24262418        YY_BREAK
     
    24282420/* rule 116 can match eol */
    24292421YY_RULE_SETUP
    2430 #line 292 "lex.ll"
     2422#line 290 "lex.ll"
    24312423{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
    24322424        YY_BREAK
     
    24352427case 117:
    24362428YY_RULE_SETUP
    2437 #line 296 "lex.ll"
     2429#line 294 "lex.ll"
    24382430{ BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
    24392431        YY_BREAK
    24402432case 118:
    24412433YY_RULE_SETUP
    2442 #line 297 "lex.ll"
     2434#line 295 "lex.ll"
    24432435{ *strtext += std::string( yytext ); }
    24442436        YY_BREAK
     
    24462438/* rule 119 can match eol */
    24472439YY_RULE_SETUP
    2448 #line 298 "lex.ll"
     2440#line 296 "lex.ll"
    24492441{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
    24502442        YY_BREAK
     
    24532445case 120:
    24542446YY_RULE_SETUP
    2455 #line 302 "lex.ll"
     2447#line 300 "lex.ll"
    24562448{ rm_underscore(); *strtext += std::string( yytext ); }
    24572449        YY_BREAK
     
    24592451/* rule 121 can match eol */
    24602452YY_RULE_SETUP
    2461 #line 303 "lex.ll"
     2453#line 301 "lex.ll"
    24622454{}                                              // continuation (ALSO HANDLED BY CPP)
    24632455        YY_BREAK
    24642456case 122:
    24652457YY_RULE_SETUP
    2466 #line 304 "lex.ll"
     2458#line 302 "lex.ll"
    24672459{ *strtext += std::string( yytext ); } // unknown escape character
    24682460        YY_BREAK
     
    24702462case 123:
    24712463YY_RULE_SETUP
     2464#line 305 "lex.ll"
     2465{ ASCIIOP_RETURN(); }
     2466        YY_BREAK
     2467case 124:
     2468YY_RULE_SETUP
     2469#line 306 "lex.ll"
     2470{ ASCIIOP_RETURN(); }
     2471        YY_BREAK
     2472case 125:
     2473YY_RULE_SETUP
    24722474#line 307 "lex.ll"
    24732475{ ASCIIOP_RETURN(); }
    24742476        YY_BREAK
    2475 case 124:
     2477case 126:
    24762478YY_RULE_SETUP
    24772479#line 308 "lex.ll"
    24782480{ ASCIIOP_RETURN(); }
    24792481        YY_BREAK
    2480 case 125:
     2482case 127:
    24812483YY_RULE_SETUP
    24822484#line 309 "lex.ll"
    24832485{ ASCIIOP_RETURN(); }
    24842486        YY_BREAK
    2485 case 126:
     2487case 128:
    24862488YY_RULE_SETUP
    24872489#line 310 "lex.ll"
    24882490{ ASCIIOP_RETURN(); }
    24892491        YY_BREAK
    2490 case 127:
     2492case 129:
    24912493YY_RULE_SETUP
    24922494#line 311 "lex.ll"
    2493 { ASCIIOP_RETURN(); }
    2494         YY_BREAK
    2495 case 128:
     2495{ ASCIIOP_RETURN(); }                                   // also operator
     2496        YY_BREAK
     2497case 130:
    24962498YY_RULE_SETUP
    24972499#line 312 "lex.ll"
    24982500{ ASCIIOP_RETURN(); }
    24992501        YY_BREAK
    2500 case 129:
     2502case 131:
    25012503YY_RULE_SETUP
    25022504#line 313 "lex.ll"
     2505{ ASCIIOP_RETURN(); }
     2506        YY_BREAK
     2507case 132:
     2508YY_RULE_SETUP
     2509#line 314 "lex.ll"
    25032510{ ASCIIOP_RETURN(); }                                   // also operator
    25042511        YY_BREAK
    2505 case 130:
    2506 YY_RULE_SETUP
    2507 #line 314 "lex.ll"
    2508 { ASCIIOP_RETURN(); }
    2509         YY_BREAK
    2510 case 131:
     2512case 133:
    25112513YY_RULE_SETUP
    25122514#line 315 "lex.ll"
    2513 { ASCIIOP_RETURN(); }
    2514         YY_BREAK
    2515 case 132:
    2516 YY_RULE_SETUP
    2517 #line 316 "lex.ll"
    2518 { ASCIIOP_RETURN(); }                                   // also operator
    2519         YY_BREAK
    2520 case 133:
    2521 YY_RULE_SETUP
    2522 #line 317 "lex.ll"
    25232515{ NAMEDOP_RETURN(ELLIPSIS); }
    25242516        YY_BREAK
     
    25262518case 134:
    25272519YY_RULE_SETUP
     2520#line 318 "lex.ll"
     2521{ RETURN_VAL('['); }
     2522        YY_BREAK
     2523case 135:
     2524YY_RULE_SETUP
     2525#line 319 "lex.ll"
     2526{ RETURN_VAL(']'); }
     2527        YY_BREAK
     2528case 136:
     2529YY_RULE_SETUP
    25282530#line 320 "lex.ll"
    2529 { RETURN_VAL('['); }
    2530         YY_BREAK
    2531 case 135:
     2531{ RETURN_VAL('{'); }
     2532        YY_BREAK
     2533case 137:
    25322534YY_RULE_SETUP
    25332535#line 321 "lex.ll"
    2534 { RETURN_VAL(']'); }
    2535         YY_BREAK
    2536 case 136:
    2537 YY_RULE_SETUP
    2538 #line 322 "lex.ll"
    2539 { RETURN_VAL('{'); }
    2540         YY_BREAK
    2541 case 137:
    2542 YY_RULE_SETUP
    2543 #line 323 "lex.ll"
    25442536{ RETURN_VAL('}'); }
    25452537        YY_BREAK
     
    25472539case 138:
    25482540YY_RULE_SETUP
     2541#line 324 "lex.ll"
     2542{ ASCIIOP_RETURN(); }
     2543        YY_BREAK
     2544case 139:
     2545YY_RULE_SETUP
     2546#line 325 "lex.ll"
     2547{ ASCIIOP_RETURN(); }
     2548        YY_BREAK
     2549case 140:
     2550YY_RULE_SETUP
    25492551#line 326 "lex.ll"
    25502552{ ASCIIOP_RETURN(); }
    25512553        YY_BREAK
    2552 case 139:
     2554case 141:
    25532555YY_RULE_SETUP
    25542556#line 327 "lex.ll"
    25552557{ ASCIIOP_RETURN(); }
    25562558        YY_BREAK
    2557 case 140:
     2559case 142:
    25582560YY_RULE_SETUP
    25592561#line 328 "lex.ll"
    25602562{ ASCIIOP_RETURN(); }
    25612563        YY_BREAK
    2562 case 141:
     2564case 143:
    25632565YY_RULE_SETUP
    25642566#line 329 "lex.ll"
    25652567{ ASCIIOP_RETURN(); }
    25662568        YY_BREAK
    2567 case 142:
     2569case 144:
    25682570YY_RULE_SETUP
    25692571#line 330 "lex.ll"
    25702572{ ASCIIOP_RETURN(); }
    25712573        YY_BREAK
    2572 case 143:
     2574case 145:
    25732575YY_RULE_SETUP
    25742576#line 331 "lex.ll"
    25752577{ ASCIIOP_RETURN(); }
    25762578        YY_BREAK
    2577 case 144:
     2579case 146:
    25782580YY_RULE_SETUP
    25792581#line 332 "lex.ll"
    25802582{ ASCIIOP_RETURN(); }
    25812583        YY_BREAK
    2582 case 145:
     2584case 147:
    25832585YY_RULE_SETUP
    25842586#line 333 "lex.ll"
    25852587{ ASCIIOP_RETURN(); }
    25862588        YY_BREAK
    2587 case 146:
     2589case 148:
    25882590YY_RULE_SETUP
    25892591#line 334 "lex.ll"
    25902592{ ASCIIOP_RETURN(); }
    25912593        YY_BREAK
    2592 case 147:
     2594case 149:
    25932595YY_RULE_SETUP
    25942596#line 335 "lex.ll"
    25952597{ ASCIIOP_RETURN(); }
    25962598        YY_BREAK
    2597 case 148:
     2599case 150:
    25982600YY_RULE_SETUP
    25992601#line 336 "lex.ll"
    26002602{ ASCIIOP_RETURN(); }
    26012603        YY_BREAK
    2602 case 149:
     2604case 151:
    26032605YY_RULE_SETUP
    26042606#line 337 "lex.ll"
    26052607{ ASCIIOP_RETURN(); }
    26062608        YY_BREAK
    2607 case 150:
    2608 YY_RULE_SETUP
    2609 #line 338 "lex.ll"
    2610 { ASCIIOP_RETURN(); }
    2611         YY_BREAK
    2612 case 151:
     2609case 152:
    26132610YY_RULE_SETUP
    26142611#line 339 "lex.ll"
    2615 { ASCIIOP_RETURN(); }
    2616         YY_BREAK
    2617 case 152:
     2612{ NAMEDOP_RETURN(ICR); }
     2613        YY_BREAK
     2614case 153:
     2615YY_RULE_SETUP
     2616#line 340 "lex.ll"
     2617{ NAMEDOP_RETURN(DECR); }
     2618        YY_BREAK
     2619case 154:
    26182620YY_RULE_SETUP
    26192621#line 341 "lex.ll"
    2620 { NAMEDOP_RETURN(ICR); }
    2621         YY_BREAK
    2622 case 153:
     2622{ NAMEDOP_RETURN(EQ); }
     2623        YY_BREAK
     2624case 155:
    26232625YY_RULE_SETUP
    26242626#line 342 "lex.ll"
    2625 { NAMEDOP_RETURN(DECR); }
    2626         YY_BREAK
    2627 case 154:
     2627{ NAMEDOP_RETURN(NE); }
     2628        YY_BREAK
     2629case 156:
    26282630YY_RULE_SETUP
    26292631#line 343 "lex.ll"
    2630 { NAMEDOP_RETURN(EQ); }
    2631         YY_BREAK
    2632 case 155:
     2632{ NAMEDOP_RETURN(LS); }
     2633        YY_BREAK
     2634case 157:
    26332635YY_RULE_SETUP
    26342636#line 344 "lex.ll"
    2635 { NAMEDOP_RETURN(NE); }
    2636         YY_BREAK
    2637 case 156:
     2637{ NAMEDOP_RETURN(RS); }
     2638        YY_BREAK
     2639case 158:
    26382640YY_RULE_SETUP
    26392641#line 345 "lex.ll"
    2640 { NAMEDOP_RETURN(LS); }
    2641         YY_BREAK
    2642 case 157:
     2642{ NAMEDOP_RETURN(LE); }
     2643        YY_BREAK
     2644case 159:
    26432645YY_RULE_SETUP
    26442646#line 346 "lex.ll"
    2645 { NAMEDOP_RETURN(RS); }
    2646         YY_BREAK
    2647 case 158:
     2647{ NAMEDOP_RETURN(GE); }
     2648        YY_BREAK
     2649case 160:
    26482650YY_RULE_SETUP
    26492651#line 347 "lex.ll"
    2650 { NAMEDOP_RETURN(LE); }
    2651         YY_BREAK
    2652 case 159:
     2652{ NAMEDOP_RETURN(ANDAND); }
     2653        YY_BREAK
     2654case 161:
    26532655YY_RULE_SETUP
    26542656#line 348 "lex.ll"
    2655 { NAMEDOP_RETURN(GE); }
    2656         YY_BREAK
    2657 case 160:
     2657{ NAMEDOP_RETURN(OROR); }
     2658        YY_BREAK
     2659case 162:
    26582660YY_RULE_SETUP
    26592661#line 349 "lex.ll"
    2660 { NAMEDOP_RETURN(ANDAND); }
    2661         YY_BREAK
    2662 case 161:
     2662{ NAMEDOP_RETURN(ARROW); }
     2663        YY_BREAK
     2664case 163:
    26632665YY_RULE_SETUP
    26642666#line 350 "lex.ll"
    2665 { NAMEDOP_RETURN(OROR); }
    2666         YY_BREAK
    2667 case 162:
     2667{ NAMEDOP_RETURN(PLUSassign); }
     2668        YY_BREAK
     2669case 164:
    26682670YY_RULE_SETUP
    26692671#line 351 "lex.ll"
    2670 { NAMEDOP_RETURN(ARROW); }
    2671         YY_BREAK
    2672 case 163:
     2672{ NAMEDOP_RETURN(MINUSassign); }
     2673        YY_BREAK
     2674case 165:
    26732675YY_RULE_SETUP
    26742676#line 352 "lex.ll"
    2675 { NAMEDOP_RETURN(PLUSassign); }
    2676         YY_BREAK
    2677 case 164:
     2677{ NAMEDOP_RETURN(MULTassign); }
     2678        YY_BREAK
     2679case 166:
    26782680YY_RULE_SETUP
    26792681#line 353 "lex.ll"
    2680 { NAMEDOP_RETURN(MINUSassign); }
    2681         YY_BREAK
    2682 case 165:
     2682{ NAMEDOP_RETURN(DIVassign); }
     2683        YY_BREAK
     2684case 167:
    26832685YY_RULE_SETUP
    26842686#line 354 "lex.ll"
    2685 { NAMEDOP_RETURN(MULTassign); }
    2686         YY_BREAK
    2687 case 166:
     2687{ NAMEDOP_RETURN(MODassign); }
     2688        YY_BREAK
     2689case 168:
    26882690YY_RULE_SETUP
    26892691#line 355 "lex.ll"
    2690 { NAMEDOP_RETURN(DIVassign); }
    2691         YY_BREAK
    2692 case 167:
     2692{ NAMEDOP_RETURN(ANDassign); }
     2693        YY_BREAK
     2694case 169:
    26932695YY_RULE_SETUP
    26942696#line 356 "lex.ll"
    2695 { NAMEDOP_RETURN(MODassign); }
    2696         YY_BREAK
    2697 case 168:
     2697{ NAMEDOP_RETURN(ORassign); }
     2698        YY_BREAK
     2699case 170:
    26982700YY_RULE_SETUP
    26992701#line 357 "lex.ll"
    2700 { NAMEDOP_RETURN(ANDassign); }
    2701         YY_BREAK
    2702 case 169:
     2702{ NAMEDOP_RETURN(ERassign); }
     2703        YY_BREAK
     2704case 171:
    27032705YY_RULE_SETUP
    27042706#line 358 "lex.ll"
    2705 { NAMEDOP_RETURN(ORassign); }
    2706         YY_BREAK
    2707 case 170:
     2707{ NAMEDOP_RETURN(LSassign); }
     2708        YY_BREAK
     2709case 172:
    27082710YY_RULE_SETUP
    27092711#line 359 "lex.ll"
    2710 { NAMEDOP_RETURN(ERassign); }
    2711         YY_BREAK
    2712 case 171:
    2713 YY_RULE_SETUP
    2714 #line 360 "lex.ll"
    2715 { NAMEDOP_RETURN(LSassign); }
    2716         YY_BREAK
    2717 case 172:
     2712{ NAMEDOP_RETURN(RSassign); }
     2713        YY_BREAK
     2714case 173:
    27182715YY_RULE_SETUP
    27192716#line 361 "lex.ll"
    2720 { NAMEDOP_RETURN(RSassign); }
    2721         YY_BREAK
    2722 case 173:
    2723 YY_RULE_SETUP
    2724 #line 363 "lex.ll"
    27252717{ NAMEDOP_RETURN(ATassign); }
    27262718        YY_BREAK
     
    27282720case 174:
    27292721YY_RULE_SETUP
     2722#line 364 "lex.ll"
     2723{ IDENTIFIER_RETURN(); }                                // unary
     2724        YY_BREAK
     2725case 175:
     2726YY_RULE_SETUP
     2727#line 365 "lex.ll"
     2728{ IDENTIFIER_RETURN(); }
     2729        YY_BREAK
     2730case 176:
     2731YY_RULE_SETUP
    27302732#line 366 "lex.ll"
    2731 { IDENTIFIER_RETURN(); }                                // unary
    2732         YY_BREAK
    2733 case 175:
     2733{ IDENTIFIER_RETURN(); }
     2734        YY_BREAK
     2735case 177:
    27342736YY_RULE_SETUP
    27352737#line 367 "lex.ll"
    2736 { IDENTIFIER_RETURN(); }
    2737         YY_BREAK
    2738 case 176:
    2739 YY_RULE_SETUP
    2740 #line 368 "lex.ll"
    2741 { IDENTIFIER_RETURN(); }
    2742         YY_BREAK
    2743 case 177:
    2744 YY_RULE_SETUP
    2745 #line 369 "lex.ll"
    27462738{ IDENTIFIER_RETURN(); }                // binary
    27472739        YY_BREAK
     
    27742766case 178:
    27752767YY_RULE_SETUP
    2776 #line 396 "lex.ll"
     2768#line 394 "lex.ll"
    27772769{
    27782770        // 1 or 2 character unary operator ?
     
    27892781case 179:
    27902782YY_RULE_SETUP
     2783#line 406 "lex.ll"
     2784{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
     2785        YY_BREAK
     2786case 180:
     2787YY_RULE_SETUP
    27912788#line 408 "lex.ll"
    2792 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
    2793         YY_BREAK
    2794 case 180:
    2795 YY_RULE_SETUP
    2796 #line 410 "lex.ll"
    27972789ECHO;
    27982790        YY_BREAK
    2799 #line 2800 "Parser/lex.cc"
     2791#line 2792 "Parser/lex.cc"
    28002792case YY_STATE_EOF(INITIAL):
    28012793case YY_STATE_EOF(COMMENT):
     
    37723764#define YYTABLES_NAME "yytables"
    37733765
    3774 #line 410 "lex.ll"
     3766#line 408 "lex.ll"
    37753767
    37763768
  • src/Parser/lex.h

    rb3f9a0cb r89173242  
    1010// Created On       : Sat Sep 22 08:58:10 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 21 18:18:06 2016
    13 // Update Count     : 346
     12// Last Modified On : Mon Jun  8 20:28:48 2015
     13// Update Count     : 341
    1414//
    1515
     
    2020void yyerror( const char * );
    2121
    22 #include <string>
    23 #include "ParseNode.h"
    2422// External declarations for information sharing between lexer and scanner
    25 class TypedefTable;
     23#include "TypedefTable.h"
    2624extern TypedefTable typedefTable;
    2725
  • src/Parser/lex.ll

    rb3f9a0cb r89173242  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Mon Mar 21 23:33:46 2016
    13  * Update Count     : 450
     12 * Last Modified On : Wed Mar  2 18:07:20 2016
     13 * Update Count     : 434
    1414 */
    1515
     
    2727
    2828#include "lex.h"
     29#include "ParseNode.h"
    2930#include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
    30 #include "ParseNode.h"
    31 #include "TypedefTable.h"
    3231
    3332char *yyfilename;
     
    4544#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    4645#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    47 #define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
     46#define IDENTIFIER_RETURN()     RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) )
    4847#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
    4948
     
    9695fractional_constant ({decimal_digits}?"."{decimal_digits})|({decimal_digits}".")
    9796exponent "_"?[eE]"_"?[+-]?{decimal_digits}
    98                                 // GCC: D (double), DL (long double) and iI (imaginary) suffixes
    99 floating_suffix "_"?([fFdDlL][iI]?|"DL"|[iI][lLfFdD]?)
    100                                 //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI]))
     97                                // GCC: D (double), LD (long double) and iI (imaginary) suffixes
     98floating_suffix "_"?([fFdD]?|([lL]?)|([iI][lLfFdD]?)|([lLfFdD][iI]))
    10199floating_constant (({fractional_constant}{exponent}?)|({decimal_digits}{exponent})){floating_suffix}?
    102100
  • src/Parser/parser.cc

    rb3f9a0cb r89173242  
    7777#include <cstdio>
    7878#include <stack>
     79#include "TypedefTable.h"
    7980#include "lex.h"
    80 #include "parser.h"
    8181#include "ParseNode.h"
    82 #include "TypedefTable.h"
    8382#include "TypeData.h"
    8483#include "LinkageSpec.h"
     
    9190
    9291/* Line 268 of yacc.c  */
    93 #line 94 "Parser/parser.cc"
     92#line 93 "Parser/parser.cc"
    9493
    9594/* Enabling traces.  */
     
    342341
    343342/* Line 293 of yacc.c  */
    344 #line 112 "parser.yy"
     343#line 111 "parser.yy"
    345344
    346345        Token tok;
     
    359358
    360359/* Line 293 of yacc.c  */
    361 #line 362 "Parser/parser.cc"
     360#line 361 "Parser/parser.cc"
    362361} YYSTYPE;
    363362# define YYSTYPE_IS_TRIVIAL 1
     
    371370
    372371/* Line 343 of yacc.c  */
    373 #line 374 "Parser/parser.cc"
     372#line 373 "Parser/parser.cc"
    374373
    375374#ifdef short
     
    10161015static const yytype_uint16 yyrline[] =
    10171016{
    1018        0,   292,   292,   298,   307,   308,   309,   313,   314,   315,
    1019      319,   320,   324,   325,   329,   330,   334,   335,   341,   343,
    1020      345,   347,   352,   353,   359,   363,   365,   366,   368,   369,
    1021      371,   373,   375,   383,   384,   390,   391,   392,   397,   399,
    1022      404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
    1023      431,   433,   435,   437,   439,   441,   447,   449,   451,   453,
    1024      455,   457,   459,   461,   463,   468,   469,   470,   471,   475,
    1025      476,   478,   483,   484,   486,   488,   493,   494,   496,   501,
    1026      502,   504,   509,   510,   512,   514,   516,   521,   522,   524,
    1027      529,   530,   535,   536,   541,   542,   547,   548,   553,   554,
    1028      559,   560,   562,   564,   569,   574,   575,   577,   579,   585,
    1029      586,   592,   594,   596,   598,   603,   604,   609,   610,   611,
    1030      612,   613,   614,   615,   616,   617,   618,   622,   623,   629,
    1031      630,   636,   637,   638,   639,   640,   641,   642,   643,   644,
    1032      653,   660,   662,   672,   673,   678,   680,   682,   684,   688,
    1033      689,   694,   699,   702,   704,   706,   711,   713,   721,   722,
    1034      724,   728,   729,   734,   735,   740,   741,   745,   750,   751,
    1035      755,   757,   763,   764,   768,   770,   772,   774,   780,   781,
    1036      785,   786,   790,   792,   794,   799,   801,   806,   808,   812,
    1037      815,   819,   822,   826,   828,   832,   834,   841,   843,   845,
    1038      854,   856,   858,   860,   862,   867,   869,   871,   873,   878,
    1039      891,   892,   897,   899,   904,   908,   910,   912,   914,   916,
    1040      922,   923,   929,   930,   934,   935,   940,   942,   948,   949,
    1041      951,   956,   958,   965,   967,   971,   972,   977,   979,   983,
    1042      984,   988,   990,   994,   995,   999,  1000,  1004,  1005,  1020,
    1043     1021,  1022,  1023,  1024,  1028,  1033,  1040,  1050,  1055,  1060,
    1044     1068,  1073,  1078,  1083,  1088,  1096,  1118,  1123,  1130,  1132,
    1045     1139,  1144,  1149,  1160,  1165,  1170,  1175,  1180,  1189,  1194,
    1046     1202,  1203,  1204,  1205,  1211,  1216,  1224,  1225,  1226,  1227,
    1047     1231,  1232,  1233,  1234,  1239,  1240,  1249,  1250,  1255,  1256,
    1048     1261,  1263,  1265,  1267,  1269,  1272,  1271,  1283,  1284,  1286,
    1049     1296,  1297,  1302,  1306,  1308,  1310,  1312,  1314,  1316,  1318,
    1050     1320,  1325,  1327,  1329,  1331,  1333,  1335,  1337,  1339,  1341,
    1051     1343,  1345,  1347,  1349,  1355,  1356,  1358,  1360,  1362,  1367,
    1052     1368,  1374,  1375,  1377,  1379,  1384,  1386,  1388,  1390,  1395,
    1053     1396,  1398,  1400,  1405,  1406,  1408,  1413,  1414,  1416,  1418,
    1054     1423,  1425,  1427,  1432,  1433,  1437,  1439,  1441,  1443,  1445,
    1055     1450,  1452,  1457,  1459,  1464,  1465,  1467,  1468,  1473,  1474,
    1056     1476,  1478,  1483,  1485,  1491,  1492,  1494,  1497,  1500,  1505,
    1057     1506,  1511,  1516,  1520,  1522,  1524,  1529,  1531,  1537,  1538,
    1058     1546,  1547,  1551,  1552,  1553,  1555,  1557,  1564,  1565,  1567,
    1059     1569,  1574,  1575,  1581,  1582,  1586,  1587,  1592,  1593,  1594,
    1060     1596,  1604,  1605,  1607,  1610,  1612,  1616,  1617,  1618,  1620,
    1061     1622,  1626,  1631,  1639,  1640,  1649,  1651,  1656,  1657,  1658,
    1062     1662,  1663,  1664,  1668,  1669,  1670,  1674,  1675,  1676,  1681,
    1063     1682,  1683,  1684,  1690,  1691,  1693,  1698,  1699,  1704,  1705,
    1064     1706,  1707,  1708,  1723,  1724,  1729,  1730,  1738,  1740,  1742,
    1065     1745,  1747,  1749,  1772,  1773,  1775,  1777,  1782,  1783,  1785,
    1066     1790,  1795,  1796,  1802,  1801,  1805,  1809,  1811,  1813,  1819,
    1067     1820,  1825,  1830,  1832,  1837,  1839,  1840,  1842,  1847,  1849,
    1068     1851,  1856,  1858,  1863,  1868,  1876,  1882,  1881,  1895,  1896,
    1069     1901,  1902,  1906,  1911,  1916,  1924,  1929,  1940,  1941,  1952,
    1070     1953,  1959,  1960,  1964,  1965,  1966,  1969,  1968,  1979,  1984,
    1071     1989,  1995,  2004,  2010,  2016,  2022,  2028,  2036,  2042,  2050,
    1072     2056,  2065,  2066,  2067,  2071,  2075,  2077,  2082,  2083,  2087,
    1073     2088,  2093,  2099,  2100,  2103,  2105,  2106,  2110,  2111,  2112,
    1074     2113,  2147,  2149,  2150,  2152,  2157,  2162,  2167,  2169,  2171,
    1075     2176,  2178,  2180,  2182,  2187,  2189,  2199,  2201,  2202,  2207,
    1076     2209,  2211,  2216,  2218,  2220,  2225,  2227,  2229,  2238,  2239,
    1077     2240,  2244,  2246,  2248,  2253,  2255,  2257,  2262,  2264,  2266,
    1078     2281,  2283,  2284,  2286,  2291,  2292,  2297,  2299,  2301,  2306,
    1079     2308,  2310,  2312,  2317,  2319,  2321,  2331,  2333,  2334,  2336,
    1080     2341,  2343,  2345,  2350,  2352,  2354,  2356,  2361,  2363,  2365,
    1081     2396,  2398,  2399,  2401,  2406,  2411,  2419,  2421,  2423,  2428,
    1082     2430,  2435,  2437,  2451,  2452,  2454,  2459,  2461,  2463,  2465,
    1083     2467,  2472,  2473,  2475,  2477,  2482,  2484,  2486,  2492,  2494,
    1084     2496,  2500,  2502,  2504,  2506,  2520,  2521,  2523,  2528,  2530,
    1085     2532,  2534,  2536,  2541,  2542,  2544,  2546,  2551,  2553,  2555,
    1086     2561,  2562,  2564,  2573,  2576,  2578,  2581,  2583,  2585,  2598,
    1087     2599,  2601,  2606,  2608,  2610,  2612,  2614,  2619,  2620,  2622,
    1088     2624,  2629,  2631,  2639,  2640,  2641,  2646,  2647,  2651,  2653,
    1089     2655,  2657,  2659,  2661,  2668,  2670,  2672,  2674,  2676,  2678,
    1090     2680,  2682,  2684,  2686,  2691,  2693,  2695,  2700,  2726,  2727,
    1091     2729,  2733,  2734,  2738,  2740,  2742,  2744,  2746,  2748,  2755,
    1092     2757,  2759,  2761,  2763,  2765,  2770,  2775,  2777,  2779,  2797,
    1093     2799,  2804,  2805
     1017       0,   291,   291,   297,   306,   307,   308,   312,   313,   314,
     1018     318,   319,   323,   324,   328,   329,   333,   334,   340,   342,
     1019     344,   346,   351,   352,   358,   362,   364,   365,   367,   368,
     1020     370,   372,   374,   382,   383,   389,   390,   391,   396,   398,
     1021     403,   404,   408,   412,   414,   416,   418,   423,   426,   428,
     1022     430,   432,   434,   436,   438,   440,   446,   448,   450,   452,
     1023     454,   456,   458,   460,   462,   467,   468,   469,   470,   474,
     1024     475,   477,   482,   483,   485,   487,   492,   493,   495,   500,
     1025     501,   503,   508,   509,   511,   513,   515,   520,   521,   523,
     1026     528,   529,   534,   535,   540,   541,   546,   547,   552,   553,
     1027     558,   559,   561,   563,   568,   573,   574,   576,   578,   584,
     1028     585,   591,   593,   595,   597,   602,   603,   608,   609,   610,
     1029     611,   612,   613,   614,   615,   616,   617,   621,   622,   628,
     1030     629,   635,   636,   637,   638,   639,   640,   641,   642,   643,
     1031     652,   659,   661,   671,   672,   677,   679,   681,   683,   687,
     1032     688,   693,   698,   701,   703,   705,   710,   712,   720,   721,
     1033     723,   727,   728,   733,   734,   739,   740,   744,   749,   750,
     1034     754,   756,   762,   763,   767,   769,   771,   773,   779,   780,
     1035     784,   785,   789,   791,   793,   798,   800,   805,   807,   811,
     1036     814,   818,   821,   825,   827,   831,   833,   840,   842,   844,
     1037     853,   855,   857,   859,   861,   866,   868,   870,   872,   877,
     1038     890,   891,   896,   898,   903,   907,   909,   911,   913,   915,
     1039     921,   922,   928,   929,   933,   934,   939,   941,   947,   948,
     1040     950,   955,   957,   964,   966,   970,   971,   976,   978,   982,
     1041     983,   987,   989,   993,   994,   998,   999,  1003,  1004,  1019,
     1042    1020,  1021,  1022,  1023,  1027,  1032,  1039,  1049,  1054,  1059,
     1043    1067,  1072,  1077,  1082,  1087,  1095,  1117,  1122,  1129,  1131,
     1044    1138,  1143,  1148,  1159,  1164,  1169,  1174,  1179,  1188,  1193,
     1045    1201,  1202,  1203,  1204,  1210,  1215,  1223,  1224,  1225,  1226,
     1046    1230,  1231,  1232,  1233,  1238,  1239,  1248,  1249,  1254,  1255,
     1047    1260,  1262,  1264,  1266,  1268,  1271,  1270,  1282,  1283,  1285,
     1048    1295,  1296,  1301,  1305,  1307,  1309,  1311,  1313,  1315,  1317,
     1049    1319,  1324,  1326,  1328,  1330,  1332,  1334,  1336,  1338,  1340,
     1050    1342,  1344,  1346,  1348,  1354,  1355,  1357,  1359,  1361,  1366,
     1051    1367,  1373,  1374,  1376,  1378,  1383,  1385,  1387,  1389,  1394,
     1052    1395,  1397,  1399,  1404,  1405,  1407,  1412,  1413,  1415,  1417,
     1053    1422,  1424,  1426,  1431,  1432,  1436,  1438,  1440,  1442,  1444,
     1054    1449,  1451,  1456,  1458,  1463,  1464,  1466,  1467,  1472,  1473,
     1055    1475,  1477,  1482,  1484,  1490,  1491,  1493,  1496,  1499,  1504,
     1056    1505,  1510,  1515,  1519,  1521,  1523,  1528,  1530,  1536,  1537,
     1057    1545,  1546,  1550,  1551,  1552,  1554,  1556,  1563,  1564,  1566,
     1058    1568,  1573,  1574,  1580,  1581,  1585,  1586,  1591,  1592,  1593,
     1059    1595,  1603,  1604,  1606,  1609,  1611,  1615,  1616,  1617,  1619,
     1060    1621,  1625,  1630,  1638,  1639,  1648,  1650,  1655,  1656,  1657,
     1061    1661,  1662,  1663,  1667,  1668,  1669,  1673,  1674,  1675,  1680,
     1062    1681,  1682,  1683,  1689,  1690,  1692,  1697,  1698,  1703,  1704,
     1063    1705,  1706,  1707,  1722,  1723,  1728,  1729,  1737,  1739,  1741,
     1064    1744,  1746,  1748,  1771,  1772,  1774,  1776,  1781,  1782,  1784,
     1065    1789,  1794,  1795,  1801,  1800,  1804,  1808,  1810,  1812,  1818,
     1066    1819,  1824,  1829,  1831,  1836,  1838,  1839,  1841,  1846,  1848,
     1067    1850,  1855,  1857,  1862,  1867,  1875,  1881,  1880,  1894,  1895,
     1068    1900,  1901,  1905,  1910,  1915,  1923,  1928,  1939,  1940,  1951,
     1069    1952,  1958,  1959,  1963,  1964,  1965,  1968,  1967,  1978,  1983,
     1070    1988,  1994,  2003,  2009,  2015,  2021,  2027,  2035,  2041,  2049,
     1071    2055,  2064,  2065,  2066,  2070,  2074,  2076,  2081,  2082,  2086,
     1072    2087,  2092,  2098,  2099,  2102,  2104,  2105,  2109,  2110,  2111,
     1073    2112,  2146,  2148,  2149,  2151,  2156,  2161,  2166,  2168,  2170,
     1074    2175,  2177,  2179,  2181,  2186,  2188,  2198,  2200,  2201,  2206,
     1075    2208,  2210,  2215,  2217,  2219,  2224,  2226,  2228,  2237,  2238,
     1076    2239,  2243,  2245,  2247,  2252,  2254,  2256,  2261,  2263,  2265,
     1077    2280,  2282,  2283,  2285,  2290,  2291,  2296,  2298,  2300,  2305,
     1078    2307,  2309,  2311,  2316,  2318,  2320,  2330,  2332,  2333,  2335,
     1079    2340,  2342,  2344,  2349,  2351,  2353,  2355,  2360,  2362,  2364,
     1080    2395,  2397,  2398,  2400,  2405,  2410,  2418,  2420,  2422,  2427,
     1081    2429,  2434,  2436,  2450,  2451,  2453,  2458,  2460,  2462,  2464,
     1082    2466,  2471,  2472,  2474,  2476,  2481,  2483,  2485,  2491,  2493,
     1083    2495,  2499,  2501,  2503,  2505,  2519,  2520,  2522,  2527,  2529,
     1084    2531,  2533,  2535,  2540,  2541,  2543,  2545,  2550,  2552,  2554,
     1085    2560,  2561,  2563,  2572,  2575,  2577,  2580,  2582,  2584,  2597,
     1086    2598,  2600,  2605,  2607,  2609,  2611,  2613,  2618,  2619,  2621,
     1087    2623,  2628,  2630,  2638,  2639,  2640,  2645,  2646,  2650,  2652,
     1088    2654,  2656,  2658,  2660,  2667,  2669,  2671,  2673,  2675,  2677,
     1089    2679,  2681,  2683,  2685,  2690,  2692,  2694,  2699,  2725,  2726,
     1090    2728,  2732,  2733,  2737,  2739,  2741,  2743,  2745,  2747,  2754,
     1091    2756,  2758,  2760,  2762,  2764,  2769,  2774,  2776,  2778,  2796,
     1092    2798,  2803,  2804
    10941093};
    10951094#endif
     
    50565055
    50575056/* Line 1806 of yacc.c  */
    5058 #line 292 "parser.yy"
     5057#line 291 "parser.yy"
    50595058    {
    50605059                        typedefTable.enterScope();
     
    50655064
    50665065/* Line 1806 of yacc.c  */
    5067 #line 298 "parser.yy"
     5066#line 297 "parser.yy"
    50685067    {
    50695068                        typedefTable.leaveScope();
     
    50745073
    50755074/* Line 1806 of yacc.c  */
     5075#line 306 "parser.yy"
     5076    { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     5077    break;
     5078
     5079  case 5:
     5080
     5081/* Line 1806 of yacc.c  */
    50765082#line 307 "parser.yy"
    5077     { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
    5078     break;
    5079 
    5080   case 5:
     5083    { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     5084    break;
     5085
     5086  case 6:
    50815087
    50825088/* Line 1806 of yacc.c  */
    50835089#line 308 "parser.yy"
    5084     { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
    5085     break;
    5086 
    5087   case 6:
    5088 
    5089 /* Line 1806 of yacc.c  */
    5090 #line 309 "parser.yy"
    50915090    { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
    50925091    break;
     
    50955094
    50965095/* Line 1806 of yacc.c  */
     5096#line 333 "parser.yy"
     5097    { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
     5098    break;
     5099
     5100  case 17:
     5101
     5102/* Line 1806 of yacc.c  */
    50975103#line 334 "parser.yy"
    5098     { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
    5099     break;
    5100 
    5101   case 17:
    5102 
    5103 /* Line 1806 of yacc.c  */
    5104 #line 335 "parser.yy"
    51055104    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
    51065105    break;
     
    51095108
    51105109/* Line 1806 of yacc.c  */
    5111 #line 342 "parser.yy"
     5110#line 341 "parser.yy"
    51125111    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    51135112    break;
     
    51165115
    51175116/* Line 1806 of yacc.c  */
    5118 #line 344 "parser.yy"
     5117#line 343 "parser.yy"
    51195118    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    51205119    break;
     
    51235122
    51245123/* Line 1806 of yacc.c  */
    5125 #line 346 "parser.yy"
     5124#line 345 "parser.yy"
    51265125    { (yyval.en) = (yyvsp[(2) - (3)].en); }
    51275126    break;
     
    51305129
    51315130/* Line 1806 of yacc.c  */
    5132 #line 348 "parser.yy"
     5131#line 347 "parser.yy"
    51335132    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
    51345133    break;
     
    51375136
    51385137/* Line 1806 of yacc.c  */
    5139 #line 358 "parser.yy"
     5138#line 357 "parser.yy"
    51405139    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
    51415140    break;
     
    51445143
    51455144/* Line 1806 of yacc.c  */
    5146 #line 360 "parser.yy"
     5145#line 359 "parser.yy"
    51475146    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
    51485147    break;
     
    51515150
    51525151/* Line 1806 of yacc.c  */
    5153 #line 364 "parser.yy"
     5152#line 363 "parser.yy"
    51545153    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51555154    break;
     
    51585157
    51595158/* Line 1806 of yacc.c  */
    5160 #line 367 "parser.yy"
     5159#line 366 "parser.yy"
    51615160    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51625161    break;
     
    51655164
    51665165/* Line 1806 of yacc.c  */
    5167 #line 370 "parser.yy"
     5166#line 369 "parser.yy"
    51685167    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
    51695168    break;
     
    51725171
    51735172/* Line 1806 of yacc.c  */
    5174 #line 372 "parser.yy"
     5173#line 371 "parser.yy"
    51755174    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
    51765175    break;
     
    51795178
    51805179/* Line 1806 of yacc.c  */
    5181 #line 374 "parser.yy"
     5180#line 373 "parser.yy"
    51825181    { (yyval.en) = 0; }
    51835182    break;
     
    51865185
    51875186/* Line 1806 of yacc.c  */
    5188 #line 376 "parser.yy"
     5187#line 375 "parser.yy"
    51895188    {
    51905189                        Token fn; fn.str = new std::string( "?{}" ); // location undefined
     
    51965195
    51975196/* Line 1806 of yacc.c  */
    5198 #line 385 "parser.yy"
     5197#line 384 "parser.yy"
    51995198    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    52005199    break;
     
    52035202
    52045203/* Line 1806 of yacc.c  */
    5205 #line 390 "parser.yy"
     5204#line 389 "parser.yy"
    52065205    { (yyval.en) = 0; }
    52075206    break;
     
    52105209
    52115210/* Line 1806 of yacc.c  */
    5212 #line 393 "parser.yy"
     5211#line 392 "parser.yy"
    52135212    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
    52145213    break;
     
    52175216
    52185217/* Line 1806 of yacc.c  */
    5219 #line 398 "parser.yy"
     5218#line 397 "parser.yy"
    52205219    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
    52215220    break;
     
    52245223
    52255224/* Line 1806 of yacc.c  */
    5226 #line 400 "parser.yy"
     5225#line 399 "parser.yy"
    52275226    { (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) )))); }
    52285227    break;
     
    52315230
    52325231/* Line 1806 of yacc.c  */
    5233 #line 405 "parser.yy"
     5232#line 404 "parser.yy"
    52345233    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    52355234    break;
     
    52385237
    52395238/* Line 1806 of yacc.c  */
    5240 #line 410 "parser.yy"
     5239#line 409 "parser.yy"
    52415240    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    52425241    break;
     
    52455244
    52465245/* Line 1806 of yacc.c  */
    5247 #line 414 "parser.yy"
     5246#line 413 "parser.yy"
    52485247    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    52495248    break;
     
    52525251
    52535252/* Line 1806 of yacc.c  */
    5254 #line 416 "parser.yy"
     5253#line 415 "parser.yy"
    52555254    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    52565255    break;
     
    52595258
    52605259/* Line 1806 of yacc.c  */
    5261 #line 418 "parser.yy"
     5260#line 417 "parser.yy"
    52625261    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    52635262    break;
     
    52665265
    52675266/* Line 1806 of yacc.c  */
    5268 #line 420 "parser.yy"
     5267#line 419 "parser.yy"
    52695268    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    52705269    break;
     
    52735272
    52745273/* Line 1806 of yacc.c  */
    5275 #line 428 "parser.yy"
     5274#line 427 "parser.yy"
    52765275    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    52775276    break;
     
    52805279
    52815280/* Line 1806 of yacc.c  */
    5282 #line 430 "parser.yy"
     5281#line 429 "parser.yy"
    52835282    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    52845283    break;
     
    52875286
    52885287/* Line 1806 of yacc.c  */
    5289 #line 432 "parser.yy"
     5288#line 431 "parser.yy"
    52905289    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
    52915290    break;
     
    52945293
    52955294/* Line 1806 of yacc.c  */
    5296 #line 434 "parser.yy"
     5295#line 433 "parser.yy"
    52975296    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
    52985297    break;
     
    53015300
    53025301/* Line 1806 of yacc.c  */
    5303 #line 436 "parser.yy"
     5302#line 435 "parser.yy"
    53045303    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    53055304    break;
     
    53085307
    53095308/* Line 1806 of yacc.c  */
    5310 #line 438 "parser.yy"
     5309#line 437 "parser.yy"
    53115310    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    53125311    break;
     
    53155314
    53165315/* Line 1806 of yacc.c  */
    5317 #line 440 "parser.yy"
     5316#line 439 "parser.yy"
    53185317    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
    53195318    break;
     
    53225321
    53235322/* Line 1806 of yacc.c  */
    5324 #line 442 "parser.yy"
     5323#line 441 "parser.yy"
    53255324    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
    53265325    break;
     
    53295328
    53305329/* Line 1806 of yacc.c  */
    5331 #line 448 "parser.yy"
     5330#line 447 "parser.yy"
    53325331    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
    53335332    break;
     
    53365335
    53375336/* Line 1806 of yacc.c  */
    5338 #line 450 "parser.yy"
     5337#line 449 "parser.yy"
    53395338    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    53405339    break;
     
    53435342
    53445343/* Line 1806 of yacc.c  */
    5345 #line 452 "parser.yy"
     5344#line 451 "parser.yy"
    53465345    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
    53475346    break;
     
    53505349
    53515350/* Line 1806 of yacc.c  */
    5352 #line 454 "parser.yy"
     5351#line 453 "parser.yy"
    53535352    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
    53545353    break;
     
    53575356
    53585357/* Line 1806 of yacc.c  */
    5359 #line 456 "parser.yy"
     5358#line 455 "parser.yy"
    53605359    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    53615360    break;
     
    53645363
    53655364/* Line 1806 of yacc.c  */
    5366 #line 458 "parser.yy"
     5365#line 457 "parser.yy"
    53675366    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
    53685367    break;
     
    53715370
    53725371/* Line 1806 of yacc.c  */
    5373 #line 460 "parser.yy"
     5372#line 459 "parser.yy"
    53745373    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
    53755374    break;
     
    53785377
    53795378/* Line 1806 of yacc.c  */
    5380 #line 462 "parser.yy"
     5379#line 461 "parser.yy"
    53815380    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
    53825381    break;
     
    53855384
    53865385/* Line 1806 of yacc.c  */
    5387 #line 464 "parser.yy"
     5386#line 463 "parser.yy"
    53885387    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); }
    53895388    break;
     
    53925391
    53935392/* Line 1806 of yacc.c  */
     5393#line 467 "parser.yy"
     5394    { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     5395    break;
     5396
     5397  case 66:
     5398
     5399/* Line 1806 of yacc.c  */
    53945400#line 468 "parser.yy"
    5395     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
    5396     break;
    5397 
    5398   case 66:
     5401    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     5402    break;
     5403
     5404  case 67:
    53995405
    54005406/* Line 1806 of yacc.c  */
    54015407#line 469 "parser.yy"
    5402     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
    5403     break;
    5404 
    5405   case 67:
     5408    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     5409    break;
     5410
     5411  case 68:
    54065412
    54075413/* Line 1806 of yacc.c  */
    54085414#line 470 "parser.yy"
    5409     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
    5410     break;
    5411 
    5412   case 68:
    5413 
    5414 /* Line 1806 of yacc.c  */
    5415 #line 471 "parser.yy"
    54165415    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
    54175416    break;
     
    54205419
    54215420/* Line 1806 of yacc.c  */
    5422 #line 477 "parser.yy"
     5421#line 476 "parser.yy"
    54235422    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    54245423    break;
     
    54275426
    54285427/* Line 1806 of yacc.c  */
    5429 #line 479 "parser.yy"
     5428#line 478 "parser.yy"
    54305429    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    54315430    break;
     
    54345433
    54355434/* Line 1806 of yacc.c  */
    5436 #line 485 "parser.yy"
     5435#line 484 "parser.yy"
    54375436    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54385437    break;
     
    54415440
    54425441/* Line 1806 of yacc.c  */
    5443 #line 487 "parser.yy"
     5442#line 486 "parser.yy"
    54445443    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54455444    break;
     
    54485447
    54495448/* Line 1806 of yacc.c  */
    5450 #line 489 "parser.yy"
     5449#line 488 "parser.yy"
    54515450    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54525451    break;
     
    54555454
    54565455/* Line 1806 of yacc.c  */
    5457 #line 495 "parser.yy"
     5456#line 494 "parser.yy"
    54585457    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54595458    break;
     
    54625461
    54635462/* Line 1806 of yacc.c  */
    5464 #line 497 "parser.yy"
     5463#line 496 "parser.yy"
    54655464    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54665465    break;
     
    54695468
    54705469/* Line 1806 of yacc.c  */
    5471 #line 503 "parser.yy"
     5470#line 502 "parser.yy"
    54725471    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54735472    break;
     
    54765475
    54775476/* Line 1806 of yacc.c  */
    5478 #line 505 "parser.yy"
     5477#line 504 "parser.yy"
    54795478    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54805479    break;
     
    54835482
    54845483/* Line 1806 of yacc.c  */
    5485 #line 511 "parser.yy"
     5484#line 510 "parser.yy"
    54865485    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54875486    break;
     
    54905489
    54915490/* Line 1806 of yacc.c  */
    5492 #line 513 "parser.yy"
     5491#line 512 "parser.yy"
    54935492    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54945493    break;
     
    54975496
    54985497/* Line 1806 of yacc.c  */
    5499 #line 515 "parser.yy"
     5498#line 514 "parser.yy"
    55005499    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55015500    break;
     
    55045503
    55055504/* Line 1806 of yacc.c  */
    5506 #line 517 "parser.yy"
     5505#line 516 "parser.yy"
    55075506    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55085507    break;
     
    55115510
    55125511/* Line 1806 of yacc.c  */
    5513 #line 523 "parser.yy"
     5512#line 522 "parser.yy"
    55145513    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55155514    break;
     
    55185517
    55195518/* Line 1806 of yacc.c  */
    5520 #line 525 "parser.yy"
     5519#line 524 "parser.yy"
    55215520    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55225521    break;
     
    55255524
    55265525/* Line 1806 of yacc.c  */
    5527 #line 531 "parser.yy"
     5526#line 530 "parser.yy"
    55285527    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55295528    break;
     
    55325531
    55335532/* Line 1806 of yacc.c  */
    5534 #line 537 "parser.yy"
     5533#line 536 "parser.yy"
    55355534    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55365535    break;
     
    55395538
    55405539/* Line 1806 of yacc.c  */
    5541 #line 543 "parser.yy"
     5540#line 542 "parser.yy"
    55425541    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55435542    break;
     
    55465545
    55475546/* Line 1806 of yacc.c  */
    5548 #line 549 "parser.yy"
     5547#line 548 "parser.yy"
    55495548    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55505549    break;
     
    55535552
    55545553/* Line 1806 of yacc.c  */
    5555 #line 555 "parser.yy"
     5554#line 554 "parser.yy"
    55565555    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55575556    break;
     
    55605559
    55615560/* Line 1806 of yacc.c  */
    5562 #line 561 "parser.yy"
     5561#line 560 "parser.yy"
    55635562    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    55645563    break;
     
    55675566
    55685567/* Line 1806 of yacc.c  */
    5569 #line 563 "parser.yy"
     5568#line 562 "parser.yy"
    55705569    { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    55715570    break;
     
    55745573
    55755574/* Line 1806 of yacc.c  */
    5576 #line 565 "parser.yy"
     5575#line 564 "parser.yy"
    55775576    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    55785577    break;
     
    55815580
    55825581/* Line 1806 of yacc.c  */
    5583 #line 576 "parser.yy"
     5582#line 575 "parser.yy"
    55845583    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55855584    break;
     
    55885587
    55895588/* Line 1806 of yacc.c  */
    5590 #line 578 "parser.yy"
     5589#line 577 "parser.yy"
    55915590    { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55925591    break;
     
    55955594
    55965595/* Line 1806 of yacc.c  */
    5597 #line 580 "parser.yy"
     5596#line 579 "parser.yy"
    55985597    { (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) ); }
    55995598    break;
     
    56025601
    56035602/* Line 1806 of yacc.c  */
    5604 #line 585 "parser.yy"
     5603#line 584 "parser.yy"
    56055604    { (yyval.en) = new NullExprNode; }
    56065605    break;
     
    56095608
    56105609/* Line 1806 of yacc.c  */
    5611 #line 593 "parser.yy"
     5610#line 592 "parser.yy"
    56125611    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
    56135612    break;
     
    56165615
    56175616/* Line 1806 of yacc.c  */
    5618 #line 595 "parser.yy"
     5617#line 594 "parser.yy"
    56195618    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
    56205619    break;
     
    56235622
    56245623/* Line 1806 of yacc.c  */
    5625 #line 597 "parser.yy"
     5624#line 596 "parser.yy"
    56265625    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
    56275626    break;
     
    56305629
    56315630/* Line 1806 of yacc.c  */
    5632 #line 599 "parser.yy"
     5631#line 598 "parser.yy"
    56335632    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
    56345633    break;
     
    56375636
    56385637/* Line 1806 of yacc.c  */
    5639 #line 605 "parser.yy"
     5638#line 604 "parser.yy"
    56405639    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    56415640    break;
     
    56445643
    56455644/* Line 1806 of yacc.c  */
     5645#line 608 "parser.yy"
     5646    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     5647    break;
     5648
     5649  case 118:
     5650
     5651/* Line 1806 of yacc.c  */
    56465652#line 609 "parser.yy"
    5647     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
    5648     break;
    5649 
    5650   case 118:
     5653    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     5654    break;
     5655
     5656  case 119:
    56515657
    56525658/* Line 1806 of yacc.c  */
    56535659#line 610 "parser.yy"
    5654     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
    5655     break;
    5656 
    5657   case 119:
     5660    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     5661    break;
     5662
     5663  case 120:
    56585664
    56595665/* Line 1806 of yacc.c  */
    56605666#line 611 "parser.yy"
    5661     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
    5662     break;
    5663 
    5664   case 120:
     5667    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     5668    break;
     5669
     5670  case 121:
    56655671
    56665672/* Line 1806 of yacc.c  */
    56675673#line 612 "parser.yy"
    5668     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
    5669     break;
    5670 
    5671   case 121:
     5674    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     5675    break;
     5676
     5677  case 122:
    56725678
    56735679/* Line 1806 of yacc.c  */
    56745680#line 613 "parser.yy"
    5675     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
    5676     break;
    5677 
    5678   case 122:
     5681    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     5682    break;
     5683
     5684  case 123:
    56795685
    56805686/* Line 1806 of yacc.c  */
    56815687#line 614 "parser.yy"
    5682     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
    5683     break;
    5684 
    5685   case 123:
     5688    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     5689    break;
     5690
     5691  case 124:
    56865692
    56875693/* Line 1806 of yacc.c  */
    56885694#line 615 "parser.yy"
    5689     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
    5690     break;
    5691 
    5692   case 124:
     5695    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     5696    break;
     5697
     5698  case 125:
    56935699
    56945700/* Line 1806 of yacc.c  */
    56955701#line 616 "parser.yy"
    5696     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
    5697     break;
    5698 
    5699   case 125:
     5702    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     5703    break;
     5704
     5705  case 126:
    57005706
    57015707/* Line 1806 of yacc.c  */
    57025708#line 617 "parser.yy"
    5703     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
    5704     break;
    5705 
    5706   case 126:
    5707 
    5708 /* Line 1806 of yacc.c  */
    5709 #line 618 "parser.yy"
    57105709    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
    57115710    break;
     
    57145713
    57155714/* Line 1806 of yacc.c  */
    5716 #line 624 "parser.yy"
     5715#line 623 "parser.yy"
    57175716    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57185717    break;
     
    57215720
    57225721/* Line 1806 of yacc.c  */
    5723 #line 629 "parser.yy"
     5722#line 628 "parser.yy"
    57245723    { (yyval.en) = 0; }
    57255724    break;
     
    57285727
    57295728/* Line 1806 of yacc.c  */
    5730 #line 638 "parser.yy"
     5729#line 637 "parser.yy"
    57315730    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    57325731    break;
     
    57355734
    57365735/* Line 1806 of yacc.c  */
    5737 #line 645 "parser.yy"
     5736#line 644 "parser.yy"
    57385737    {
    57395738                        Token fn; fn.str = new std::string( "^?{}" ); // location undefined
     
    57465745
    57475746/* Line 1806 of yacc.c  */
    5748 #line 654 "parser.yy"
     5747#line 653 "parser.yy"
    57495748    {
    57505749                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    57555754
    57565755/* Line 1806 of yacc.c  */
    5757 #line 661 "parser.yy"
     5756#line 660 "parser.yy"
    57585757    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
    57595758    break;
     
    57625761
    57635762/* Line 1806 of yacc.c  */
    5764 #line 668 "parser.yy"
     5763#line 667 "parser.yy"
    57655764    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
    57665765    break;
     
    57695768
    57705769/* Line 1806 of yacc.c  */
    5771 #line 674 "parser.yy"
     5770#line 673 "parser.yy"
    57725771    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    57735772    break;
     
    57765775
    57775776/* Line 1806 of yacc.c  */
    5778 #line 679 "parser.yy"
     5777#line 678 "parser.yy"
    57795778    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57805779    break;
     
    57835782
    57845783/* Line 1806 of yacc.c  */
    5785 #line 681 "parser.yy"
     5784#line 680 "parser.yy"
    57865785    { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
    57875786    break;
     
    57905789
    57915790/* Line 1806 of yacc.c  */
    5792 #line 683 "parser.yy"
     5791#line 682 "parser.yy"
    57935792    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    57945793    break;
     
    57975796
    57985797/* Line 1806 of yacc.c  */
    5799 #line 690 "parser.yy"
     5798#line 689 "parser.yy"
    58005799    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    58015800    break;
     
    58045803
    58055804/* Line 1806 of yacc.c  */
    5806 #line 695 "parser.yy"
     5805#line 694 "parser.yy"
    58075806    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    58085807    break;
     
    58115810
    58125811/* Line 1806 of yacc.c  */
    5813 #line 701 "parser.yy"
     5812#line 700 "parser.yy"
    58145813    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    58155814    break;
     
    58185817
    58195818/* Line 1806 of yacc.c  */
    5820 #line 703 "parser.yy"
     5819#line 702 "parser.yy"
    58215820    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    58225821    break;
     
    58255824
    58265825/* Line 1806 of yacc.c  */
    5827 #line 705 "parser.yy"
     5826#line 704 "parser.yy"
    58285827    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    58295828    break;
     
    58325831
    58335832/* Line 1806 of yacc.c  */
    5834 #line 707 "parser.yy"
     5833#line 706 "parser.yy"
    58355834    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
    58365835    break;
     
    58395838
    58405839/* Line 1806 of yacc.c  */
    5841 #line 712 "parser.yy"
     5840#line 711 "parser.yy"
    58425841    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    58435842    break;
     
    58465845
    58475846/* Line 1806 of yacc.c  */
    5848 #line 714 "parser.yy"
     5847#line 713 "parser.yy"
    58495848    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
    58505849    break;
     
    58535852
    58545853/* Line 1806 of yacc.c  */
    5855 #line 721 "parser.yy"
     5854#line 720 "parser.yy"
    58565855    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    58575856    break;
     
    58605859
    58615860/* Line 1806 of yacc.c  */
    5862 #line 723 "parser.yy"
     5861#line 722 "parser.yy"
    58635862    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    58645863    break;
     
    58675866
    58685867/* Line 1806 of yacc.c  */
    5869 #line 730 "parser.yy"
     5868#line 729 "parser.yy"
    58705869    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    58715870    break;
     
    58745873
    58755874/* Line 1806 of yacc.c  */
     5875#line 733 "parser.yy"
     5876    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
     5877    break;
     5878
     5879  case 164:
     5880
     5881/* Line 1806 of yacc.c  */
    58765882#line 734 "parser.yy"
    5877     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    5878     break;
    5879 
    5880   case 164:
    5881 
    5882 /* Line 1806 of yacc.c  */
    5883 #line 735 "parser.yy"
    58845883    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    58855884    break;
     
    58885887
    58895888/* Line 1806 of yacc.c  */
    5890 #line 741 "parser.yy"
     5889#line 740 "parser.yy"
    58915890    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    58925891    break;
     
    58955894
    58965895/* Line 1806 of yacc.c  */
    5897 #line 745 "parser.yy"
     5896#line 744 "parser.yy"
    58985897    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    58995898    break;
     
    59025901
    59035902/* Line 1806 of yacc.c  */
    5904 #line 750 "parser.yy"
     5903#line 749 "parser.yy"
    59055904    { (yyval.sn) = 0; }
    59065905    break;
     
    59095908
    59105909/* Line 1806 of yacc.c  */
    5911 #line 756 "parser.yy"
     5910#line 755 "parser.yy"
    59125911    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    59135912    break;
     
    59165915
    59175916/* Line 1806 of yacc.c  */
    5918 #line 758 "parser.yy"
     5917#line 757 "parser.yy"
    59195918    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    59205919    break;
     
    59235922
    59245923/* Line 1806 of yacc.c  */
    5925 #line 763 "parser.yy"
     5924#line 762 "parser.yy"
    59265925    { (yyval.sn) = 0; }
    59275926    break;
     
    59305929
    59315930/* Line 1806 of yacc.c  */
    5932 #line 769 "parser.yy"
     5931#line 768 "parser.yy"
    59335932    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    59345933    break;
     
    59375936
    59385937/* Line 1806 of yacc.c  */
    5939 #line 771 "parser.yy"
     5938#line 770 "parser.yy"
    59405939    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
    59415940    break;
     
    59445943
    59455944/* Line 1806 of yacc.c  */
    5946 #line 773 "parser.yy"
     5945#line 772 "parser.yy"
    59475946    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    59485947    break;
     
    59515950
    59525951/* Line 1806 of yacc.c  */
    5953 #line 775 "parser.yy"
     5952#line 774 "parser.yy"
    59545953    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
    59555954    break;
     
    59585957
    59595958/* Line 1806 of yacc.c  */
    5960 #line 780 "parser.yy"
     5959#line 779 "parser.yy"
    59615960    { (yyval.sn) = 0; }
    59625961    break;
    59635962
    59645963  case 180:
     5964
     5965/* Line 1806 of yacc.c  */
     5966#line 784 "parser.yy"
     5967    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
     5968    break;
     5969
     5970  case 181:
    59655971
    59665972/* Line 1806 of yacc.c  */
     
    59695975    break;
    59705976
    5971   case 181:
    5972 
    5973 /* Line 1806 of yacc.c  */
    5974 #line 786 "parser.yy"
    5975     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    5976     break;
    5977 
    59785977  case 182:
    59795978
    59805979/* Line 1806 of yacc.c  */
    5981 #line 791 "parser.yy"
     5980#line 790 "parser.yy"
    59825981    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    59835982    break;
     
    59865985
    59875986/* Line 1806 of yacc.c  */
    5988 #line 793 "parser.yy"
     5987#line 792 "parser.yy"
    59895988    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    59905989    break;
     
    59935992
    59945993/* Line 1806 of yacc.c  */
    5995 #line 795 "parser.yy"
     5994#line 794 "parser.yy"
    59965995    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    59975996    break;
     
    60005999
    60016000/* Line 1806 of yacc.c  */
    6002 #line 800 "parser.yy"
     6001#line 799 "parser.yy"
    60036002    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    60046003    break;
     
    60076006
    60086007/* Line 1806 of yacc.c  */
    6009 #line 802 "parser.yy"
     6008#line 801 "parser.yy"
    60106009    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    60116010    break;
     
    60146013
    60156014/* Line 1806 of yacc.c  */
    6016 #line 807 "parser.yy"
     6015#line 806 "parser.yy"
    60176016    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    60186017    break;
     
    60216020
    60226021/* Line 1806 of yacc.c  */
    6023 #line 811 "parser.yy"
     6022#line 810 "parser.yy"
    60246023    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    60256024    break;
     
    60286027
    60296028/* Line 1806 of yacc.c  */
    6030 #line 814 "parser.yy"
     6029#line 813 "parser.yy"
    60316030    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    60326031    break;
     
    60356034
    60366035/* Line 1806 of yacc.c  */
    6037 #line 818 "parser.yy"
     6036#line 817 "parser.yy"
    60386037    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    60396038    break;
     
    60426041
    60436042/* Line 1806 of yacc.c  */
    6044 #line 821 "parser.yy"
     6043#line 820 "parser.yy"
    60456044    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    60466045    break;
     
    60496048
    60506049/* Line 1806 of yacc.c  */
    6051 #line 825 "parser.yy"
     6050#line 824 "parser.yy"
    60526051    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    60536052    break;
     
    60566055
    60576056/* Line 1806 of yacc.c  */
    6058 #line 827 "parser.yy"
     6057#line 826 "parser.yy"
    60596058    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    60606059    break;
     
    60636062
    60646063/* Line 1806 of yacc.c  */
    6065 #line 829 "parser.yy"
     6064#line 828 "parser.yy"
    60666065    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    60676066    break;
     
    60706069
    60716070/* Line 1806 of yacc.c  */
    6072 #line 833 "parser.yy"
     6071#line 832 "parser.yy"
    60736072    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    60746073    break;
     
    60776076
    60786077/* Line 1806 of yacc.c  */
    6079 #line 835 "parser.yy"
     6078#line 834 "parser.yy"
    60806079    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    60816080    break;
     
    60846083
    60856084/* Line 1806 of yacc.c  */
    6086 #line 842 "parser.yy"
     6085#line 841 "parser.yy"
    60876086    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    60886087    break;
     
    60916090
    60926091/* Line 1806 of yacc.c  */
    6093 #line 844 "parser.yy"
     6092#line 843 "parser.yy"
    60946093    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    60956094    break;
     
    60986097
    60996098/* Line 1806 of yacc.c  */
    6100 #line 846 "parser.yy"
     6099#line 845 "parser.yy"
    61016100    {
    61026101                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    61086107
    61096108/* Line 1806 of yacc.c  */
    6110 #line 857 "parser.yy"
     6109#line 856 "parser.yy"
    61116110    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    61126111    break;
     
    61156114
    61166115/* Line 1806 of yacc.c  */
    6117 #line 859 "parser.yy"
     6116#line 858 "parser.yy"
    61186117    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    61196118    break;
     
    61226121
    61236122/* Line 1806 of yacc.c  */
    6124 #line 861 "parser.yy"
     6123#line 860 "parser.yy"
    61256124    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    61266125    break;
     
    61296128
    61306129/* Line 1806 of yacc.c  */
    6131 #line 863 "parser.yy"
     6130#line 862 "parser.yy"
    61326131    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    61336132    break;
     
    61366135
    61376136/* Line 1806 of yacc.c  */
    6138 #line 868 "parser.yy"
     6137#line 867 "parser.yy"
    61396138    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    61406139    break;
     
    61436142
    61446143/* Line 1806 of yacc.c  */
    6145 #line 870 "parser.yy"
     6144#line 869 "parser.yy"
    61466145    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    61476146    break;
     
    61506149
    61516150/* Line 1806 of yacc.c  */
    6152 #line 872 "parser.yy"
     6151#line 871 "parser.yy"
    61536152    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    61546153    break;
     
    61576156
    61586157/* Line 1806 of yacc.c  */
    6159 #line 874 "parser.yy"
     6158#line 873 "parser.yy"
    61606159    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    61616160    break;
     
    61646163
    61656164/* Line 1806 of yacc.c  */
    6166 #line 879 "parser.yy"
     6165#line 878 "parser.yy"
    61676166    {
    61686167                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    61746173
    61756174/* Line 1806 of yacc.c  */
    6176 #line 893 "parser.yy"
     6175#line 892 "parser.yy"
    61776176    {
    61786177                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    61846183
    61856184/* Line 1806 of yacc.c  */
    6186 #line 898 "parser.yy"
     6185#line 897 "parser.yy"
    61876186    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    61886187    break;
     
    61916190
    61926191/* Line 1806 of yacc.c  */
    6193 #line 900 "parser.yy"
     6192#line 899 "parser.yy"
    61946193    {
    61956194                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62016200
    62026201/* Line 1806 of yacc.c  */
    6203 #line 909 "parser.yy"
     6202#line 908 "parser.yy"
    62046203    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
    62056204    break;
     
    62086207
    62096208/* Line 1806 of yacc.c  */
    6210 #line 911 "parser.yy"
     6209#line 910 "parser.yy"
    62116210    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
    62126211    break;
     
    62156214
    62166215/* Line 1806 of yacc.c  */
    6217 #line 913 "parser.yy"
     6216#line 912 "parser.yy"
    62186217    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
    62196218    break;
     
    62226221
    62236222/* Line 1806 of yacc.c  */
    6224 #line 915 "parser.yy"
     6223#line 914 "parser.yy"
    62256224    { (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) ); }
    62266225    break;
     
    62296228
    62306229/* Line 1806 of yacc.c  */
    6231 #line 917 "parser.yy"
     6230#line 916 "parser.yy"
    62326231    { (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) ); }
    62336232    break;
     
    62366235
    62376236/* Line 1806 of yacc.c  */
    6238 #line 922 "parser.yy"
     6237#line 921 "parser.yy"
    62396238    { (yyval.flag) = false; }
    62406239    break;
     
    62436242
    62446243/* Line 1806 of yacc.c  */
    6245 #line 924 "parser.yy"
     6244#line 923 "parser.yy"
    62466245    { (yyval.flag) = true; }
    62476246    break;
     
    62506249
    62516250/* Line 1806 of yacc.c  */
    6252 #line 929 "parser.yy"
     6251#line 928 "parser.yy"
    62536252    { (yyval.en) = 0; }
    62546253    break;
     
    62576256
    62586257/* Line 1806 of yacc.c  */
    6259 #line 936 "parser.yy"
     6258#line 935 "parser.yy"
    62606259    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    62616260    break;
     
    62646263
    62656264/* Line 1806 of yacc.c  */
    6266 #line 941 "parser.yy"
     6265#line 940 "parser.yy"
    62676266    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
    62686267    break;
     
    62716270
    62726271/* Line 1806 of yacc.c  */
    6273 #line 943 "parser.yy"
     6272#line 942 "parser.yy"
    62746273    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
    62756274    break;
     
    62786277
    62796278/* Line 1806 of yacc.c  */
    6280 #line 948 "parser.yy"
     6279#line 947 "parser.yy"
    62816280    { (yyval.constant) = 0; }
    62826281    break;
     
    62856284
    62866285/* Line 1806 of yacc.c  */
    6287 #line 950 "parser.yy"
     6286#line 949 "parser.yy"
    62886287    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    62896288    break;
     
    62926291
    62936292/* Line 1806 of yacc.c  */
    6294 #line 952 "parser.yy"
     6293#line 951 "parser.yy"
    62956294    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    62966295    break;
     
    62996298
    63006299/* Line 1806 of yacc.c  */
    6301 #line 957 "parser.yy"
     6300#line 956 "parser.yy"
    63026301    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
    63036302    break;
     
    63066305
    63076306/* Line 1806 of yacc.c  */
    6308 #line 959 "parser.yy"
     6307#line 958 "parser.yy"
    63096308    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
    63106309    break;
     
    63136312
    63146313/* Line 1806 of yacc.c  */
    6315 #line 966 "parser.yy"
     6314#line 965 "parser.yy"
    63166315    { (yyval.decl) = 0; }
    63176316    break;
     
    63206319
    63216320/* Line 1806 of yacc.c  */
    6322 #line 973 "parser.yy"
     6321#line 972 "parser.yy"
    63236322    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    63246323    break;
     
    63276326
    63286327/* Line 1806 of yacc.c  */
    6329 #line 978 "parser.yy"
     6328#line 977 "parser.yy"
    63306329    { (yyval.decl) = 0; }
    63316330    break;
     
    63346333
    63356334/* Line 1806 of yacc.c  */
    6336 #line 985 "parser.yy"
     6335#line 984 "parser.yy"
    63376336    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    63386337    break;
    63396338
    63406339  case 245:
     6340
     6341/* Line 1806 of yacc.c  */
     6342#line 998 "parser.yy"
     6343    {}
     6344    break;
     6345
     6346  case 246:
    63416347
    63426348/* Line 1806 of yacc.c  */
     
    63456351    break;
    63466352
    6347   case 246:
    6348 
    6349 /* Line 1806 of yacc.c  */
    6350 #line 1000 "parser.yy"
    6351     {}
    6352     break;
    6353 
    63546353  case 254:
    63556354
    63566355/* Line 1806 of yacc.c  */
    6357 #line 1029 "parser.yy"
     6356#line 1028 "parser.yy"
    63586357    {
    63596358                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6360                         (yyval.decl) = (yyvsp[(1) - (2)].decl)->addInitializer( (yyvsp[(2) - (2)].in) );
     6359                        (yyval.decl) = (yyvsp[(1) - (2)].decl);
    63616360                }
    63626361    break;
     
    63656364
    63666365/* Line 1806 of yacc.c  */
    6367 #line 1036 "parser.yy"
     6366#line 1035 "parser.yy"
    63686367    {
    63696368                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6370                         (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].in) );;
     6369                        (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) );
    63716370                }
    63726371    break;
     
    63756374
    63766375/* Line 1806 of yacc.c  */
    6377 #line 1041 "parser.yy"
     6376#line 1040 "parser.yy"
    63786377    {
    63796378                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
    6380                         (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) )->addInitializer( (yyvsp[(6) - (6)].in) ) );
     6379                        (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) ) );
    63816380                }
    63826381    break;
     
    63856384
    63866385/* Line 1806 of yacc.c  */
    6387 #line 1051 "parser.yy"
     6386#line 1050 "parser.yy"
    63886387    {
    63896388                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    63956394
    63966395/* Line 1806 of yacc.c  */
    6397 #line 1056 "parser.yy"
     6396#line 1055 "parser.yy"
    63986397    {
    63996398                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    64056404
    64066405/* Line 1806 of yacc.c  */
    6407 #line 1061 "parser.yy"
     6406#line 1060 "parser.yy"
    64086407    {
    64096408                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    64156414
    64166415/* Line 1806 of yacc.c  */
    6417 #line 1069 "parser.yy"
     6416#line 1068 "parser.yy"
    64186417    {
    64196418                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64256424
    64266425/* Line 1806 of yacc.c  */
    6427 #line 1074 "parser.yy"
     6426#line 1073 "parser.yy"
    64286427    {
    64296428                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64356434
    64366435/* Line 1806 of yacc.c  */
    6437 #line 1079 "parser.yy"
     6436#line 1078 "parser.yy"
    64386437    {
    64396438                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64456444
    64466445/* Line 1806 of yacc.c  */
    6447 #line 1084 "parser.yy"
     6446#line 1083 "parser.yy"
    64486447    {
    64496448                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64556454
    64566455/* Line 1806 of yacc.c  */
    6457 #line 1089 "parser.yy"
     6456#line 1088 "parser.yy"
    64586457    {
    64596458                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    64656464
    64666465/* Line 1806 of yacc.c  */
    6467 #line 1097 "parser.yy"
     6466#line 1096 "parser.yy"
    64686467    {
    64696468                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    64746473
    64756474/* Line 1806 of yacc.c  */
    6476 #line 1120 "parser.yy"
     6475#line 1119 "parser.yy"
    64776476    {
    64786477                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64836482
    64846483/* Line 1806 of yacc.c  */
    6485 #line 1124 "parser.yy"
     6484#line 1123 "parser.yy"
    64866485    {
    64876486                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    64926491
    64936492/* Line 1806 of yacc.c  */
    6494 #line 1131 "parser.yy"
     6493#line 1130 "parser.yy"
    64956494    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    64966495    break;
     
    64996498
    65006499/* Line 1806 of yacc.c  */
    6501 #line 1135 "parser.yy"
     6500#line 1134 "parser.yy"
    65026501    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    65036502    break;
     
    65066505
    65076506/* Line 1806 of yacc.c  */
    6508 #line 1140 "parser.yy"
     6507#line 1139 "parser.yy"
    65096508    {
    65106509                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65166515
    65176516/* Line 1806 of yacc.c  */
    6518 #line 1145 "parser.yy"
     6517#line 1144 "parser.yy"
    65196518    {
    65206519                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65266525
    65276526/* Line 1806 of yacc.c  */
    6528 #line 1150 "parser.yy"
     6527#line 1149 "parser.yy"
    65296528    {
    65306529                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    65366535
    65376536/* Line 1806 of yacc.c  */
    6538 #line 1161 "parser.yy"
     6537#line 1160 "parser.yy"
    65396538    {
    65406539                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65466545
    65476546/* Line 1806 of yacc.c  */
    6548 #line 1166 "parser.yy"
     6547#line 1165 "parser.yy"
    65496548    {
    65506549                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65566555
    65576556/* Line 1806 of yacc.c  */
    6558 #line 1171 "parser.yy"
     6557#line 1170 "parser.yy"
    65596558    {
    65606559                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65666565
    65676566/* Line 1806 of yacc.c  */
    6568 #line 1176 "parser.yy"
     6567#line 1175 "parser.yy"
    65696568    {
    65706569                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65766575
    65776576/* Line 1806 of yacc.c  */
    6578 #line 1181 "parser.yy"
     6577#line 1180 "parser.yy"
    65796578    {
    65806579                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65866585
    65876586/* Line 1806 of yacc.c  */
    6588 #line 1190 "parser.yy"
     6587#line 1189 "parser.yy"
    65896588    {
    65906589                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    65966595
    65976596/* Line 1806 of yacc.c  */
    6598 #line 1195 "parser.yy"
     6597#line 1194 "parser.yy"
    65996598    {
    66006599                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    66066605
    66076606/* Line 1806 of yacc.c  */
    6608 #line 1212 "parser.yy"
     6607#line 1211 "parser.yy"
    66096608    {
    66106609                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66166615
    66176616/* Line 1806 of yacc.c  */
    6618 #line 1217 "parser.yy"
     6617#line 1216 "parser.yy"
    66196618    {
    66206619                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66266625
    66276626/* Line 1806 of yacc.c  */
    6628 #line 1239 "parser.yy"
     6627#line 1238 "parser.yy"
    66296628    { (yyval.decl) = 0; }
    66306629    break;
     
    66336632
    66346633/* Line 1806 of yacc.c  */
    6635 #line 1251 "parser.yy"
     6634#line 1250 "parser.yy"
    66366635    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66376636    break;
     
    66406639
    66416640/* Line 1806 of yacc.c  */
    6642 #line 1262 "parser.yy"
     6641#line 1261 "parser.yy"
    66436642    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    66446643    break;
     
    66476646
    66486647/* Line 1806 of yacc.c  */
    6649 #line 1264 "parser.yy"
     6648#line 1263 "parser.yy"
    66506649    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    66516650    break;
     
    66546653
    66556654/* Line 1806 of yacc.c  */
    6656 #line 1266 "parser.yy"
     6655#line 1265 "parser.yy"
    66576656    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    66586657    break;
     
    66616660
    66626661/* Line 1806 of yacc.c  */
    6663 #line 1268 "parser.yy"
     6662#line 1267 "parser.yy"
    66646663    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    66656664    break;
     
    66686667
    66696668/* Line 1806 of yacc.c  */
    6670 #line 1270 "parser.yy"
     6669#line 1269 "parser.yy"
    66716670    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    66726671    break;
     
    66756674
    66766675/* Line 1806 of yacc.c  */
    6677 #line 1272 "parser.yy"
     6676#line 1271 "parser.yy"
    66786677    {
    66796678                        typedefTable.enterScope();
     
    66846683
    66856684/* Line 1806 of yacc.c  */
    6686 #line 1276 "parser.yy"
     6685#line 1275 "parser.yy"
    66876686    {
    66886687                        typedefTable.leaveScope();
     
    66946693
    66956694/* Line 1806 of yacc.c  */
    6696 #line 1285 "parser.yy"
     6695#line 1284 "parser.yy"
    66976696    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66986697    break;
     
    67016700
    67026701/* Line 1806 of yacc.c  */
    6703 #line 1287 "parser.yy"
     6702#line 1286 "parser.yy"
    67046703    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    67056704    break;
     
    67086707
    67096708/* Line 1806 of yacc.c  */
    6710 #line 1298 "parser.yy"
     6709#line 1297 "parser.yy"
    67116710    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67126711    break;
     
    67156714
    67166715/* Line 1806 of yacc.c  */
    6717 #line 1307 "parser.yy"
     6716#line 1306 "parser.yy"
    67186717    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    67196718    break;
     
    67226721
    67236722/* Line 1806 of yacc.c  */
    6724 #line 1309 "parser.yy"
     6723#line 1308 "parser.yy"
    67256724    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    67266725    break;
     
    67296728
    67306729/* Line 1806 of yacc.c  */
    6731 #line 1311 "parser.yy"
     6730#line 1310 "parser.yy"
    67326731    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    67336732    break;
     
    67366735
    67376736/* Line 1806 of yacc.c  */
    6738 #line 1313 "parser.yy"
     6737#line 1312 "parser.yy"
    67396738    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    67406739    break;
     
    67436742
    67446743/* Line 1806 of yacc.c  */
    6745 #line 1315 "parser.yy"
     6744#line 1314 "parser.yy"
    67466745    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    67476746    break;
     
    67506749
    67516750/* Line 1806 of yacc.c  */
    6752 #line 1317 "parser.yy"
     6751#line 1316 "parser.yy"
    67536752    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    67546753    break;
     
    67576756
    67586757/* Line 1806 of yacc.c  */
    6759 #line 1319 "parser.yy"
     6758#line 1318 "parser.yy"
    67606759    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    67616760    break;
     
    67646763
    67656764/* Line 1806 of yacc.c  */
    6766 #line 1321 "parser.yy"
     6765#line 1320 "parser.yy"
    67676766    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    67686767    break;
     
    67716770
    67726771/* Line 1806 of yacc.c  */
    6773 #line 1326 "parser.yy"
     6772#line 1325 "parser.yy"
    67746773    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    67756774    break;
     
    67786777
    67796778/* Line 1806 of yacc.c  */
    6780 #line 1328 "parser.yy"
     6779#line 1327 "parser.yy"
    67816780    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    67826781    break;
     
    67856784
    67866785/* Line 1806 of yacc.c  */
    6787 #line 1330 "parser.yy"
     6786#line 1329 "parser.yy"
    67886787    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    67896788    break;
     
    67926791
    67936792/* Line 1806 of yacc.c  */
    6794 #line 1332 "parser.yy"
     6793#line 1331 "parser.yy"
    67956794    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    67966795    break;
     
    67996798
    68006799/* Line 1806 of yacc.c  */
    6801 #line 1334 "parser.yy"
     6800#line 1333 "parser.yy"
    68026801    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    68036802    break;
     
    68066805
    68076806/* Line 1806 of yacc.c  */
    6808 #line 1336 "parser.yy"
     6807#line 1335 "parser.yy"
    68096808    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    68106809    break;
     
    68136812
    68146813/* Line 1806 of yacc.c  */
    6815 #line 1338 "parser.yy"
     6814#line 1337 "parser.yy"
    68166815    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    68176816    break;
     
    68206819
    68216820/* Line 1806 of yacc.c  */
    6822 #line 1340 "parser.yy"
     6821#line 1339 "parser.yy"
    68236822    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    68246823    break;
     
    68276826
    68286827/* Line 1806 of yacc.c  */
    6829 #line 1342 "parser.yy"
     6828#line 1341 "parser.yy"
    68306829    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    68316830    break;
     
    68346833
    68356834/* Line 1806 of yacc.c  */
    6836 #line 1344 "parser.yy"
     6835#line 1343 "parser.yy"
    68376836    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    68386837    break;
     
    68416840
    68426841/* Line 1806 of yacc.c  */
    6843 #line 1346 "parser.yy"
     6842#line 1345 "parser.yy"
    68446843    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    68456844    break;
     
    68486847
    68496848/* Line 1806 of yacc.c  */
    6850 #line 1348 "parser.yy"
     6849#line 1347 "parser.yy"
    68516850    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    68526851    break;
     
    68556854
    68566855/* Line 1806 of yacc.c  */
    6857 #line 1350 "parser.yy"
     6856#line 1349 "parser.yy"
    68586857    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    68596858    break;
     
    68626861
    68636862/* Line 1806 of yacc.c  */
    6864 #line 1357 "parser.yy"
     6863#line 1356 "parser.yy"
    68656864    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68666865    break;
     
    68696868
    68706869/* Line 1806 of yacc.c  */
    6871 #line 1359 "parser.yy"
     6870#line 1358 "parser.yy"
    68726871    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    68736872    break;
     
    68766875
    68776876/* Line 1806 of yacc.c  */
    6878 #line 1361 "parser.yy"
     6877#line 1360 "parser.yy"
    68796878    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68806879    break;
     
    68836882
    68846883/* Line 1806 of yacc.c  */
    6885 #line 1363 "parser.yy"
     6884#line 1362 "parser.yy"
    68866885    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    68876886    break;
     
    68906889
    68916890/* Line 1806 of yacc.c  */
    6892 #line 1369 "parser.yy"
     6891#line 1368 "parser.yy"
    68936892    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    68946893    break;
     
    68976896
    68986897/* Line 1806 of yacc.c  */
    6899 #line 1376 "parser.yy"
     6898#line 1375 "parser.yy"
    69006899    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69016900    break;
     
    69046903
    69056904/* Line 1806 of yacc.c  */
    6906 #line 1378 "parser.yy"
     6905#line 1377 "parser.yy"
    69076906    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69086907    break;
     
    69116910
    69126911/* Line 1806 of yacc.c  */
    6913 #line 1380 "parser.yy"
     6912#line 1379 "parser.yy"
    69146913    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    69156914    break;
     
    69186917
    69196918/* Line 1806 of yacc.c  */
    6920 #line 1385 "parser.yy"
     6919#line 1384 "parser.yy"
    69216920    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    69226921    break;
     
    69256924
    69266925/* Line 1806 of yacc.c  */
    6927 #line 1387 "parser.yy"
     6926#line 1386 "parser.yy"
    69286927    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    69296928    break;
     
    69326931
    69336932/* Line 1806 of yacc.c  */
    6934 #line 1389 "parser.yy"
     6933#line 1388 "parser.yy"
    69356934    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    69366935    break;
     
    69396938
    69406939/* Line 1806 of yacc.c  */
    6941 #line 1391 "parser.yy"
     6940#line 1390 "parser.yy"
    69426941    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    69436942    break;
     
    69466945
    69476946/* Line 1806 of yacc.c  */
    6948 #line 1397 "parser.yy"
     6947#line 1396 "parser.yy"
    69496948    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69506949    break;
     
    69536952
    69546953/* Line 1806 of yacc.c  */
    6955 #line 1399 "parser.yy"
     6954#line 1398 "parser.yy"
    69566955    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69576956    break;
     
    69606959
    69616960/* Line 1806 of yacc.c  */
    6962 #line 1401 "parser.yy"
     6961#line 1400 "parser.yy"
    69636962    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69646963    break;
     
    69676966
    69686967/* Line 1806 of yacc.c  */
    6969 #line 1407 "parser.yy"
     6968#line 1406 "parser.yy"
    69706969    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69716970    break;
     
    69746973
    69756974/* Line 1806 of yacc.c  */
    6976 #line 1409 "parser.yy"
     6975#line 1408 "parser.yy"
    69776976    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69786977    break;
     
    69816980
    69826981/* Line 1806 of yacc.c  */
    6983 #line 1415 "parser.yy"
     6982#line 1414 "parser.yy"
    69846983    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69856984    break;
     
    69886987
    69896988/* Line 1806 of yacc.c  */
    6990 #line 1417 "parser.yy"
     6989#line 1416 "parser.yy"
    69916990    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69926991    break;
     
    69956994
    69966995/* Line 1806 of yacc.c  */
    6997 #line 1419 "parser.yy"
     6996#line 1418 "parser.yy"
    69986997    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69996998    break;
     
    70027001
    70037002/* Line 1806 of yacc.c  */
    7004 #line 1424 "parser.yy"
     7003#line 1423 "parser.yy"
    70057004    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    70067005    break;
     
    70097008
    70107009/* Line 1806 of yacc.c  */
    7011 #line 1426 "parser.yy"
     7010#line 1425 "parser.yy"
    70127011    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    70137012    break;
     
    70167015
    70177016/* Line 1806 of yacc.c  */
    7018 #line 1428 "parser.yy"
     7017#line 1427 "parser.yy"
    70197018    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70207019    break;
     
    70237022
    70247023/* Line 1806 of yacc.c  */
    7025 #line 1438 "parser.yy"
     7024#line 1437 "parser.yy"
    70267025    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    70277026    break;
     
    70307029
    70317030/* Line 1806 of yacc.c  */
    7032 #line 1440 "parser.yy"
     7031#line 1439 "parser.yy"
    70337032    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
    70347033    break;
     
    70377036
    70387037/* Line 1806 of yacc.c  */
    7039 #line 1442 "parser.yy"
     7038#line 1441 "parser.yy"
    70407039    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
    70417040    break;
     
    70447043
    70457044/* Line 1806 of yacc.c  */
    7046 #line 1444 "parser.yy"
     7045#line 1443 "parser.yy"
    70477046    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    70487047    break;
     
    70517050
    70527051/* Line 1806 of yacc.c  */
    7053 #line 1446 "parser.yy"
     7052#line 1445 "parser.yy"
    70547053    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    70557054    break;
     
    70587057
    70597058/* Line 1806 of yacc.c  */
    7060 #line 1451 "parser.yy"
     7059#line 1450 "parser.yy"
    70617060    { (yyval.aggKey) = DeclarationNode::Struct; }
    70627061    break;
     
    70657064
    70667065/* Line 1806 of yacc.c  */
    7067 #line 1453 "parser.yy"
     7066#line 1452 "parser.yy"
    70687067    { (yyval.aggKey) = DeclarationNode::Union; }
    70697068    break;
     
    70727071
    70737072/* Line 1806 of yacc.c  */
    7074 #line 1458 "parser.yy"
     7073#line 1457 "parser.yy"
    70757074    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
    70767075    break;
     
    70797078
    70807079/* Line 1806 of yacc.c  */
    7081 #line 1460 "parser.yy"
     7080#line 1459 "parser.yy"
    70827081    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    70837082    break;
     
    70867085
    70877086/* Line 1806 of yacc.c  */
    7088 #line 1466 "parser.yy"
     7087#line 1465 "parser.yy"
    70897088    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    70907089    break;
     
    70937092
    70947093/* Line 1806 of yacc.c  */
    7095 #line 1469 "parser.yy"
     7094#line 1468 "parser.yy"
    70967095    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    70977096    break;
     
    71007099
    71017100/* Line 1806 of yacc.c  */
    7102 #line 1475 "parser.yy"
     7101#line 1474 "parser.yy"
    71037102    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    71047103    break;
     
    71077106
    71087107/* Line 1806 of yacc.c  */
    7109 #line 1477 "parser.yy"
     7108#line 1476 "parser.yy"
    71107109    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    71117110    break;
     
    71147113
    71157114/* Line 1806 of yacc.c  */
    7116 #line 1479 "parser.yy"
     7115#line 1478 "parser.yy"
    71177116    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
    71187117    break;
     
    71217120
    71227121/* Line 1806 of yacc.c  */
    7123 #line 1484 "parser.yy"
     7122#line 1483 "parser.yy"
    71247123    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    71257124    break;
     
    71287127
    71297128/* Line 1806 of yacc.c  */
    7130 #line 1486 "parser.yy"
     7129#line 1485 "parser.yy"
    71317130    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    71327131    break;
     
    71357134
    71367135/* Line 1806 of yacc.c  */
    7137 #line 1491 "parser.yy"
     7136#line 1490 "parser.yy"
    71387137    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
    71397138    break;
     
    71427141
    71437142/* Line 1806 of yacc.c  */
    7144 #line 1493 "parser.yy"
     7143#line 1492 "parser.yy"
    71457144    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    71467145    break;
     
    71497148
    71507149/* Line 1806 of yacc.c  */
    7151 #line 1496 "parser.yy"
     7150#line 1495 "parser.yy"
    71527151    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71537152    break;
     
    71567155
    71577156/* Line 1806 of yacc.c  */
    7158 #line 1499 "parser.yy"
     7157#line 1498 "parser.yy"
    71597158    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71607159    break;
     
    71637162
    71647163/* Line 1806 of yacc.c  */
    7165 #line 1505 "parser.yy"
     7164#line 1504 "parser.yy"
    71667165    { (yyval.en) = 0; }
    71677166    break;
     
    71707169
    71717170/* Line 1806 of yacc.c  */
    7172 #line 1507 "parser.yy"
     7171#line 1506 "parser.yy"
    71737172    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    71747173    break;
     
    71777176
    71787177/* Line 1806 of yacc.c  */
    7179 #line 1512 "parser.yy"
     7178#line 1511 "parser.yy"
    71807179    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    71817180    break;
     
    71847183
    71857184/* Line 1806 of yacc.c  */
    7186 #line 1521 "parser.yy"
     7185#line 1520 "parser.yy"
    71877186    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    71887187    break;
     
    71917190
    71927191/* Line 1806 of yacc.c  */
    7193 #line 1523 "parser.yy"
     7192#line 1522 "parser.yy"
    71947193    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
    71957194    break;
     
    71987197
    71997198/* Line 1806 of yacc.c  */
    7200 #line 1525 "parser.yy"
     7199#line 1524 "parser.yy"
    72017200    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
    72027201    break;
     
    72057204
    72067205/* Line 1806 of yacc.c  */
    7207 #line 1530 "parser.yy"
     7206#line 1529 "parser.yy"
    72087207    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    72097208    break;
     
    72127211
    72137212/* Line 1806 of yacc.c  */
    7214 #line 1532 "parser.yy"
     7213#line 1531 "parser.yy"
    72157214    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    72167215    break;
     
    72197218
    72207219/* Line 1806 of yacc.c  */
    7221 #line 1537 "parser.yy"
     7220#line 1536 "parser.yy"
    72227221    { (yyval.en) = 0; }
    72237222    break;
     
    72267225
    72277226/* Line 1806 of yacc.c  */
    7228 #line 1539 "parser.yy"
     7227#line 1538 "parser.yy"
    72297228    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    72307229    break;
     
    72337232
    72347233/* Line 1806 of yacc.c  */
    7235 #line 1546 "parser.yy"
     7234#line 1545 "parser.yy"
    72367235    { (yyval.decl) = 0; }
    72377236    break;
     
    72407239
    72417240/* Line 1806 of yacc.c  */
    7242 #line 1554 "parser.yy"
     7241#line 1553 "parser.yy"
    72437242    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72447243    break;
     
    72477246
    72487247/* Line 1806 of yacc.c  */
    7249 #line 1556 "parser.yy"
     7248#line 1555 "parser.yy"
    72507249    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72517250    break;
     
    72547253
    72557254/* Line 1806 of yacc.c  */
    7256 #line 1558 "parser.yy"
     7255#line 1557 "parser.yy"
    72577256    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    72587257    break;
     
    72617260
    72627261/* Line 1806 of yacc.c  */
    7263 #line 1566 "parser.yy"
     7262#line 1565 "parser.yy"
    72647263    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72657264    break;
     
    72687267
    72697268/* Line 1806 of yacc.c  */
    7270 #line 1568 "parser.yy"
     7269#line 1567 "parser.yy"
    72717270    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72727271    break;
     
    72757274
    72767275/* Line 1806 of yacc.c  */
    7277 #line 1570 "parser.yy"
     7276#line 1569 "parser.yy"
    72787277    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    72797278    break;
     
    72827281
    72837282/* Line 1806 of yacc.c  */
    7284 #line 1576 "parser.yy"
     7283#line 1575 "parser.yy"
    72857284    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    72867285    break;
     
    72897288
    72907289/* Line 1806 of yacc.c  */
    7291 #line 1581 "parser.yy"
     7290#line 1580 "parser.yy"
    72927291    { (yyval.decl) = 0; }
    72937292    break;
     
    72967295
    72977296/* Line 1806 of yacc.c  */
    7298 #line 1588 "parser.yy"
     7297#line 1587 "parser.yy"
    72997298    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    73007299    break;
     
    73037302
    73047303/* Line 1806 of yacc.c  */
    7305 #line 1595 "parser.yy"
     7304#line 1594 "parser.yy"
    73067305    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73077306    break;
     
    73107309
    73117310/* Line 1806 of yacc.c  */
    7312 #line 1597 "parser.yy"
     7311#line 1596 "parser.yy"
    73137312    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73147313    break;
     
    73177316
    73187317/* Line 1806 of yacc.c  */
    7319 #line 1606 "parser.yy"
     7318#line 1605 "parser.yy"
    73207319    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    73217320    break;
     
    73247323
    73257324/* Line 1806 of yacc.c  */
    7326 #line 1609 "parser.yy"
     7325#line 1608 "parser.yy"
    73277326    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    73287327    break;
     
    73317330
    73327331/* Line 1806 of yacc.c  */
    7333 #line 1611 "parser.yy"
     7332#line 1610 "parser.yy"
    73347333    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    73357334    break;
     
    73387337
    73397338/* Line 1806 of yacc.c  */
    7340 #line 1621 "parser.yy"
     7339#line 1620 "parser.yy"
    73417340    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73427341    break;
     
    73457344
    73467345/* Line 1806 of yacc.c  */
    7347 #line 1627 "parser.yy"
     7346#line 1626 "parser.yy"
    73487347    {
    73497348                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73557354
    73567355/* Line 1806 of yacc.c  */
    7357 #line 1632 "parser.yy"
     7356#line 1631 "parser.yy"
    73587357    {
    73597358                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    73657364
    73667365/* Line 1806 of yacc.c  */
    7367 #line 1641 "parser.yy"
     7366#line 1640 "parser.yy"
    73687367    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73697368    break;
     
    73727371
    73737372/* Line 1806 of yacc.c  */
    7374 #line 1650 "parser.yy"
     7373#line 1649 "parser.yy"
    73757374    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    73767375    break;
     
    73797378
    73807379/* Line 1806 of yacc.c  */
    7381 #line 1652 "parser.yy"
     7380#line 1651 "parser.yy"
    73827381    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    73837382    break;
     
    73867385
    73877386/* Line 1806 of yacc.c  */
    7388 #line 1677 "parser.yy"
     7387#line 1676 "parser.yy"
    73897388    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73907389    break;
     
    73937392
    73947393/* Line 1806 of yacc.c  */
    7395 #line 1685 "parser.yy"
     7394#line 1684 "parser.yy"
    73967395    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    73977396    break;
     
    74007399
    74017400/* Line 1806 of yacc.c  */
    7402 #line 1690 "parser.yy"
     7401#line 1689 "parser.yy"
    74037402    { (yyval.in) = 0; }
    74047403    break;
     
    74077406
    74087407/* Line 1806 of yacc.c  */
    7409 #line 1692 "parser.yy"
     7408#line 1691 "parser.yy"
    74107409    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    74117410    break;
     
    74147413
    74157414/* Line 1806 of yacc.c  */
    7416 #line 1694 "parser.yy"
     7415#line 1693 "parser.yy"
    74177416    { (yyval.in) = (yyvsp[(2) - (2)].in); }
    74187417    break;
     
    74217420
    74227421/* Line 1806 of yacc.c  */
     7422#line 1697 "parser.yy"
     7423    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     7424    break;
     7425
     7426  case 457:
     7427
     7428/* Line 1806 of yacc.c  */
    74237429#line 1698 "parser.yy"
    7424     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    7425     break;
    7426 
    7427   case 457:
    7428 
    7429 /* Line 1806 of yacc.c  */
    7430 #line 1699 "parser.yy"
    74317430    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
    74327431    break;
     
    74357434
    74367435/* Line 1806 of yacc.c  */
    7437 #line 1704 "parser.yy"
     7436#line 1703 "parser.yy"
    74387437    { (yyval.in) = 0; }
    74397438    break;
     
    74427441
    74437442/* Line 1806 of yacc.c  */
     7443#line 1705 "parser.yy"
     7444    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     7445    break;
     7446
     7447  case 461:
     7448
     7449/* Line 1806 of yacc.c  */
    74447450#line 1706 "parser.yy"
    7445     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    7446     break;
    7447 
    7448   case 461:
    7449 
    7450 /* Line 1806 of yacc.c  */
    7451 #line 1707 "parser.yy"
    74527451    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    74537452    break;
     
    74567455
    74577456/* Line 1806 of yacc.c  */
    7458 #line 1709 "parser.yy"
     7457#line 1708 "parser.yy"
    74597458    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    74607459    break;
     
    74637462
    74647463/* Line 1806 of yacc.c  */
    7465 #line 1725 "parser.yy"
     7464#line 1724 "parser.yy"
    74667465    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
    74677466    break;
     
    74707469
    74717470/* Line 1806 of yacc.c  */
    7472 #line 1731 "parser.yy"
     7471#line 1730 "parser.yy"
    74737472    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    74747473    break;
     
    74777476
    74787477/* Line 1806 of yacc.c  */
    7479 #line 1739 "parser.yy"
     7478#line 1738 "parser.yy"
    74807479    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
    74817480    break;
     
    74847483
    74857484/* Line 1806 of yacc.c  */
    7486 #line 1741 "parser.yy"
     7485#line 1740 "parser.yy"
    74877486    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    74887487    break;
     
    74917490
    74927491/* Line 1806 of yacc.c  */
    7493 #line 1744 "parser.yy"
     7492#line 1743 "parser.yy"
    74947493    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    74957494    break;
     
    74987497
    74997498/* Line 1806 of yacc.c  */
    7500 #line 1746 "parser.yy"
     7499#line 1745 "parser.yy"
    75017500    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    75027501    break;
     
    75057504
    75067505/* Line 1806 of yacc.c  */
    7507 #line 1748 "parser.yy"
     7506#line 1747 "parser.yy"
    75087507    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    75097508    break;
     
    75127511
    75137512/* Line 1806 of yacc.c  */
    7514 #line 1750 "parser.yy"
     7513#line 1749 "parser.yy"
    75157514    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    75167515    break;
     
    75197518
    75207519/* Line 1806 of yacc.c  */
    7521 #line 1774 "parser.yy"
     7520#line 1773 "parser.yy"
    75227521    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75237522    break;
     
    75267525
    75277526/* Line 1806 of yacc.c  */
    7528 #line 1776 "parser.yy"
     7527#line 1775 "parser.yy"
    75297528    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    75307529    break;
     
    75337532
    75347533/* Line 1806 of yacc.c  */
    7535 #line 1778 "parser.yy"
     7534#line 1777 "parser.yy"
    75367535    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    75377536    break;
     
    75407539
    75417540/* Line 1806 of yacc.c  */
    7542 #line 1784 "parser.yy"
     7541#line 1783 "parser.yy"
    75437542    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75447543    break;
     
    75477546
    75487547/* Line 1806 of yacc.c  */
    7549 #line 1786 "parser.yy"
     7548#line 1785 "parser.yy"
    75507549    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    75517550    break;
     
    75547553
    75557554/* Line 1806 of yacc.c  */
    7556 #line 1791 "parser.yy"
     7555#line 1790 "parser.yy"
    75577556    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    75587557    break;
     
    75617560
    75627561/* Line 1806 of yacc.c  */
    7563 #line 1797 "parser.yy"
     7562#line 1796 "parser.yy"
    75647563    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    75657564    break;
     
    75687567
    75697568/* Line 1806 of yacc.c  */
    7570 #line 1802 "parser.yy"
     7569#line 1801 "parser.yy"
    75717570    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
    75727571    break;
     
    75757574
    75767575/* Line 1806 of yacc.c  */
    7577 #line 1804 "parser.yy"
     7576#line 1803 "parser.yy"
    75787577    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    75797578    break;
     
    75827581
    75837582/* Line 1806 of yacc.c  */
    7584 #line 1810 "parser.yy"
     7583#line 1809 "parser.yy"
    75857584    { (yyval.tclass) = DeclarationNode::Type; }
    75867585    break;
     
    75897588
    75907589/* Line 1806 of yacc.c  */
    7591 #line 1812 "parser.yy"
     7590#line 1811 "parser.yy"
    75927591    { (yyval.tclass) = DeclarationNode::Ftype; }
    75937592    break;
     
    75967595
    75977596/* Line 1806 of yacc.c  */
    7598 #line 1814 "parser.yy"
     7597#line 1813 "parser.yy"
    75997598    { (yyval.tclass) = DeclarationNode::Dtype; }
    76007599    break;
     
    76037602
    76047603/* Line 1806 of yacc.c  */
    7605 #line 1819 "parser.yy"
     7604#line 1818 "parser.yy"
    76067605    { (yyval.decl) = 0; }
    76077606    break;
     
    76107609
    76117610/* Line 1806 of yacc.c  */
    7612 #line 1821 "parser.yy"
     7611#line 1820 "parser.yy"
    76137612    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    76147613    break;
     
    76177616
    76187617/* Line 1806 of yacc.c  */
    7619 #line 1826 "parser.yy"
     7618#line 1825 "parser.yy"
    76207619    {
    76217620                        typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
     
    76277626
    76287627/* Line 1806 of yacc.c  */
    7629 #line 1831 "parser.yy"
     7628#line 1830 "parser.yy"
    76307629    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
    76317630    break;
     
    76347633
    76357634/* Line 1806 of yacc.c  */
    7636 #line 1833 "parser.yy"
     7635#line 1832 "parser.yy"
    76377636    { (yyval.decl) = 0; }
    76387637    break;
     
    76417640
    76427641/* Line 1806 of yacc.c  */
    7643 #line 1838 "parser.yy"
     7642#line 1837 "parser.yy"
    76447643    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    76457644    break;
     
    76487647
    76497648/* Line 1806 of yacc.c  */
    7650 #line 1841 "parser.yy"
     7649#line 1840 "parser.yy"
    76517650    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    76527651    break;
     
    76557654
    76567655/* Line 1806 of yacc.c  */
    7657 #line 1843 "parser.yy"
     7656#line 1842 "parser.yy"
    76587657    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    76597658    break;
     
    76627661
    76637662/* Line 1806 of yacc.c  */
    7664 #line 1848 "parser.yy"
     7663#line 1847 "parser.yy"
    76657664    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    76667665    break;
     
    76697668
    76707669/* Line 1806 of yacc.c  */
    7671 #line 1850 "parser.yy"
     7670#line 1849 "parser.yy"
    76727671    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    76737672    break;
     
    76767675
    76777676/* Line 1806 of yacc.c  */
    7678 #line 1852 "parser.yy"
     7677#line 1851 "parser.yy"
    76797678    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    76807679    break;
     
    76837682
    76847683/* Line 1806 of yacc.c  */
    7685 #line 1857 "parser.yy"
     7684#line 1856 "parser.yy"
    76867685    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    76877686    break;
     
    76907689
    76917690/* Line 1806 of yacc.c  */
    7692 #line 1859 "parser.yy"
     7691#line 1858 "parser.yy"
    76937692    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    76947693    break;
     
    76977696
    76987697/* Line 1806 of yacc.c  */
    7699 #line 1864 "parser.yy"
     7698#line 1863 "parser.yy"
    77007699    {
    77017700                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    77077706
    77087707/* Line 1806 of yacc.c  */
    7709 #line 1869 "parser.yy"
     7708#line 1868 "parser.yy"
    77107709    {
    77117710                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    77177716
    77187717/* Line 1806 of yacc.c  */
    7719 #line 1877 "parser.yy"
     7718#line 1876 "parser.yy"
    77207719    {
    77217720                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
     
    77277726
    77287727/* Line 1806 of yacc.c  */
    7729 #line 1882 "parser.yy"
     7728#line 1881 "parser.yy"
    77307729    {
    77317730                        typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     
    77377736
    77387737/* Line 1806 of yacc.c  */
    7739 #line 1887 "parser.yy"
     7738#line 1886 "parser.yy"
    77407739    {
    77417740                        typedefTable.leaveTrait();
     
    77487747
    77497748/* Line 1806 of yacc.c  */
    7750 #line 1897 "parser.yy"
     7749#line 1896 "parser.yy"
    77517750    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    77527751    break;
     
    77557754
    77567755/* Line 1806 of yacc.c  */
    7757 #line 1907 "parser.yy"
     7756#line 1906 "parser.yy"
    77587757    {
    77597758                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77657764
    77667765/* Line 1806 of yacc.c  */
    7767 #line 1912 "parser.yy"
     7766#line 1911 "parser.yy"
    77687767    {
    77697768                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77757774
    77767775/* Line 1806 of yacc.c  */
    7777 #line 1917 "parser.yy"
     7776#line 1916 "parser.yy"
    77787777    {
    77797778                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    77857784
    77867785/* Line 1806 of yacc.c  */
    7787 #line 1925 "parser.yy"
     7786#line 1924 "parser.yy"
    77887787    {
    77897788                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    77957794
    77967795/* Line 1806 of yacc.c  */
    7797 #line 1930 "parser.yy"
     7796#line 1929 "parser.yy"
    77987797    {
    77997798                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78057804
    78067805/* Line 1806 of yacc.c  */
    7807 #line 1940 "parser.yy"
     7806#line 1939 "parser.yy"
    78087807    {}
    78097808    break;
     
    78127811
    78137812/* Line 1806 of yacc.c  */
    7814 #line 1942 "parser.yy"
     7813#line 1941 "parser.yy"
    78157814    {
    78167815                        if ( theTree ) {
     
    78257824
    78267825/* Line 1806 of yacc.c  */
    7827 #line 1954 "parser.yy"
     7826#line 1953 "parser.yy"
    78287827    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    78297828    break;
     
    78327831
    78337832/* Line 1806 of yacc.c  */
    7834 #line 1959 "parser.yy"
     7833#line 1958 "parser.yy"
    78357834    { (yyval.decl) = 0; }
    78367835    break;
     
    78397838
    78407839/* Line 1806 of yacc.c  */
    7841 #line 1967 "parser.yy"
     7840#line 1966 "parser.yy"
    78427841    {}
    78437842    break;
     
    78467845
    78477846/* Line 1806 of yacc.c  */
    7848 #line 1969 "parser.yy"
     7847#line 1968 "parser.yy"
    78497848    {
    78507849                        linkageStack.push( linkage );
     
    78567855
    78577856/* Line 1806 of yacc.c  */
    7858 #line 1974 "parser.yy"
     7857#line 1973 "parser.yy"
    78597858    {
    78607859                        linkage = linkageStack.top();
     
    78677866
    78687867/* Line 1806 of yacc.c  */
    7869 #line 1980 "parser.yy"
     7868#line 1979 "parser.yy"
    78707869    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    78717870    break;
     
    78747873
    78757874/* Line 1806 of yacc.c  */
    7876 #line 1990 "parser.yy"
     7875#line 1989 "parser.yy"
    78777876    {
    78787877                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78857884
    78867885/* Line 1806 of yacc.c  */
    7887 #line 1996 "parser.yy"
     7886#line 1995 "parser.yy"
    78887887    {
    78897888                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    78967895
    78977896/* Line 1806 of yacc.c  */
    7898 #line 2005 "parser.yy"
     7897#line 2004 "parser.yy"
    78997898    {
    79007899                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79077906
    79087907/* Line 1806 of yacc.c  */
    7909 #line 2011 "parser.yy"
     7908#line 2010 "parser.yy"
    79107909    {
    79117910                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79187917
    79197918/* Line 1806 of yacc.c  */
    7920 #line 2017 "parser.yy"
     7919#line 2016 "parser.yy"
    79217920    {
    79227921                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79297928
    79307929/* Line 1806 of yacc.c  */
    7931 #line 2023 "parser.yy"
     7930#line 2022 "parser.yy"
    79327931    {
    79337932                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79407939
    79417940/* Line 1806 of yacc.c  */
    7942 #line 2029 "parser.yy"
     7941#line 2028 "parser.yy"
    79437942    {
    79447943                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79517950
    79527951/* Line 1806 of yacc.c  */
    7953 #line 2037 "parser.yy"
     7952#line 2036 "parser.yy"
    79547953    {
    79557954                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79627961
    79637962/* Line 1806 of yacc.c  */
    7964 #line 2043 "parser.yy"
     7963#line 2042 "parser.yy"
    79657964    {
    79667965                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79737972
    79747973/* Line 1806 of yacc.c  */
    7975 #line 2051 "parser.yy"
     7974#line 2050 "parser.yy"
    79767975    {
    79777976                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79847983
    79857984/* Line 1806 of yacc.c  */
    7986 #line 2057 "parser.yy"
     7985#line 2056 "parser.yy"
    79877986    {
    79887987                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79957994
    79967995/* Line 1806 of yacc.c  */
    7997 #line 2072 "parser.yy"
     7996#line 2071 "parser.yy"
    79987997    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    79997998    break;
     
    80028001
    80038002/* Line 1806 of yacc.c  */
    8004 #line 2082 "parser.yy"
     8003#line 2081 "parser.yy"
    80058004    { (yyval.decl) = 0; }
    80068005    break;
     
    80098008
    80108009/* Line 1806 of yacc.c  */
    8011 #line 2089 "parser.yy"
     8010#line 2088 "parser.yy"
    80128011    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    80138012    break;
     
    80168015
    80178016/* Line 1806 of yacc.c  */
    8018 #line 2095 "parser.yy"
     8017#line 2094 "parser.yy"
    80198018    { (yyval.decl) = 0; }
    80208019    break;
    80218020
    80228021  case 557:
     8022
     8023/* Line 1806 of yacc.c  */
     8024#line 2109 "parser.yy"
     8025    {}
     8026    break;
     8027
     8028  case 558:
    80238029
    80248030/* Line 1806 of yacc.c  */
     
    80278033    break;
    80288034
    8029   case 558:
     8035  case 559:
    80308036
    80318037/* Line 1806 of yacc.c  */
     
    80348040    break;
    80358041
    8036   case 559:
     8042  case 560:
    80378043
    80388044/* Line 1806 of yacc.c  */
     
    80418047    break;
    80428048
    8043   case 560:
    8044 
    8045 /* Line 1806 of yacc.c  */
    8046 #line 2113 "parser.yy"
    8047     {}
    8048     break;
    8049 
    80508049  case 561:
    80518050
    80528051/* Line 1806 of yacc.c  */
    8053 #line 2148 "parser.yy"
     8052#line 2147 "parser.yy"
    80548053    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80558054    break;
     
    80588057
    80598058/* Line 1806 of yacc.c  */
    8060 #line 2151 "parser.yy"
     8059#line 2150 "parser.yy"
    80618060    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80628061    break;
     
    80658064
    80668065/* Line 1806 of yacc.c  */
    8067 #line 2153 "parser.yy"
     8066#line 2152 "parser.yy"
    80688067    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80698068    break;
     
    80728071
    80738072/* Line 1806 of yacc.c  */
    8074 #line 2158 "parser.yy"
     8073#line 2157 "parser.yy"
    80758074    {
    80768075                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    80828081
    80838082/* Line 1806 of yacc.c  */
    8084 #line 2163 "parser.yy"
     8083#line 2162 "parser.yy"
    80858084    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    80868085    break;
     
    80898088
    80908089/* Line 1806 of yacc.c  */
    8091 #line 2168 "parser.yy"
     8090#line 2167 "parser.yy"
    80928091    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    80938092    break;
     
    80968095
    80978096/* Line 1806 of yacc.c  */
    8098 #line 2170 "parser.yy"
     8097#line 2169 "parser.yy"
    80998098    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81008099    break;
     
    81038102
    81048103/* Line 1806 of yacc.c  */
    8105 #line 2172 "parser.yy"
     8104#line 2171 "parser.yy"
    81068105    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81078106    break;
     
    81108109
    81118110/* Line 1806 of yacc.c  */
    8112 #line 2177 "parser.yy"
     8111#line 2176 "parser.yy"
    81138112    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    81148113    break;
     
    81178116
    81188117/* Line 1806 of yacc.c  */
    8119 #line 2179 "parser.yy"
     8118#line 2178 "parser.yy"
    81208119    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81218120    break;
     
    81248123
    81258124/* Line 1806 of yacc.c  */
    8126 #line 2181 "parser.yy"
     8125#line 2180 "parser.yy"
    81278126    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81288127    break;
     
    81318130
    81328131/* Line 1806 of yacc.c  */
    8133 #line 2183 "parser.yy"
     8132#line 2182 "parser.yy"
    81348133    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81358134    break;
     
    81388137
    81398138/* Line 1806 of yacc.c  */
    8140 #line 2188 "parser.yy"
     8139#line 2187 "parser.yy"
    81418140    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81428141    break;
     
    81458144
    81468145/* Line 1806 of yacc.c  */
    8147 #line 2190 "parser.yy"
     8146#line 2189 "parser.yy"
    81488147    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81498148    break;
     
    81528151
    81538152/* Line 1806 of yacc.c  */
    8154 #line 2200 "parser.yy"
     8153#line 2199 "parser.yy"
    81558154    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81568155    break;
     
    81598158
    81608159/* Line 1806 of yacc.c  */
    8161 #line 2203 "parser.yy"
     8160#line 2202 "parser.yy"
    81628161    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81638162    break;
     
    81668165
    81678166/* Line 1806 of yacc.c  */
    8168 #line 2208 "parser.yy"
     8167#line 2207 "parser.yy"
    81698168    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    81708169    break;
     
    81738172
    81748173/* Line 1806 of yacc.c  */
    8175 #line 2210 "parser.yy"
     8174#line 2209 "parser.yy"
    81768175    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81778176    break;
     
    81808179
    81818180/* Line 1806 of yacc.c  */
    8182 #line 2212 "parser.yy"
     8181#line 2211 "parser.yy"
    81838182    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81848183    break;
     
    81878186
    81888187/* Line 1806 of yacc.c  */
    8189 #line 2217 "parser.yy"
     8188#line 2216 "parser.yy"
    81908189    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81918190    break;
     
    81948193
    81958194/* Line 1806 of yacc.c  */
    8196 #line 2219 "parser.yy"
     8195#line 2218 "parser.yy"
    81978196    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81988197    break;
     
    82018200
    82028201/* Line 1806 of yacc.c  */
    8203 #line 2221 "parser.yy"
     8202#line 2220 "parser.yy"
    82048203    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82058204    break;
     
    82088207
    82098208/* Line 1806 of yacc.c  */
    8210 #line 2226 "parser.yy"
     8209#line 2225 "parser.yy"
    82118210    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82128211    break;
     
    82158214
    82168215/* Line 1806 of yacc.c  */
    8217 #line 2228 "parser.yy"
     8216#line 2227 "parser.yy"
    82188217    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82198218    break;
     
    82228221
    82238222/* Line 1806 of yacc.c  */
    8224 #line 2230 "parser.yy"
     8223#line 2229 "parser.yy"
    82258224    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82268225    break;
     
    82298228
    82308229/* Line 1806 of yacc.c  */
    8231 #line 2245 "parser.yy"
     8230#line 2244 "parser.yy"
    82328231    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    82338232    break;
     
    82368235
    82378236/* Line 1806 of yacc.c  */
    8238 #line 2247 "parser.yy"
     8237#line 2246 "parser.yy"
    82398238    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    82408239    break;
     
    82438242
    82448243/* Line 1806 of yacc.c  */
    8245 #line 2249 "parser.yy"
     8244#line 2248 "parser.yy"
    82468245    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82478246    break;
     
    82508249
    82518250/* Line 1806 of yacc.c  */
    8252 #line 2254 "parser.yy"
     8251#line 2253 "parser.yy"
    82538252    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    82548253    break;
     
    82578256
    82588257/* Line 1806 of yacc.c  */
    8259 #line 2256 "parser.yy"
     8258#line 2255 "parser.yy"
    82608259    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    82618260    break;
     
    82648263
    82658264/* Line 1806 of yacc.c  */
    8266 #line 2258 "parser.yy"
     8265#line 2257 "parser.yy"
    82678266    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82688267    break;
     
    82718270
    82728271/* Line 1806 of yacc.c  */
    8273 #line 2263 "parser.yy"
     8272#line 2262 "parser.yy"
    82748273    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82758274    break;
     
    82788277
    82798278/* Line 1806 of yacc.c  */
    8280 #line 2265 "parser.yy"
     8279#line 2264 "parser.yy"
    82818280    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    82828281    break;
     
    82858284
    82868285/* Line 1806 of yacc.c  */
    8287 #line 2267 "parser.yy"
     8286#line 2266 "parser.yy"
    82888287    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82898288    break;
     
    82928291
    82938292/* Line 1806 of yacc.c  */
    8294 #line 2282 "parser.yy"
     8293#line 2281 "parser.yy"
    82958294    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82968295    break;
     
    82998298
    83008299/* Line 1806 of yacc.c  */
    8301 #line 2285 "parser.yy"
     8300#line 2284 "parser.yy"
    83028301    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83038302    break;
     
    83068305
    83078306/* Line 1806 of yacc.c  */
    8308 #line 2287 "parser.yy"
     8307#line 2286 "parser.yy"
    83098308    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83108309    break;
     
    83138312
    83148313/* Line 1806 of yacc.c  */
    8315 #line 2293 "parser.yy"
     8314#line 2292 "parser.yy"
    83168315    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83178316    break;
     
    83208319
    83218320/* Line 1806 of yacc.c  */
    8322 #line 2298 "parser.yy"
     8321#line 2297 "parser.yy"
    83238322    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    83248323    break;
     
    83278326
    83288327/* Line 1806 of yacc.c  */
    8329 #line 2300 "parser.yy"
     8328#line 2299 "parser.yy"
    83308329    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    83318330    break;
     
    83348333
    83358334/* Line 1806 of yacc.c  */
    8336 #line 2302 "parser.yy"
     8335#line 2301 "parser.yy"
    83378336    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83388337    break;
     
    83418340
    83428341/* Line 1806 of yacc.c  */
    8343 #line 2307 "parser.yy"
     8342#line 2306 "parser.yy"
    83448343    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    83458344    break;
     
    83488347
    83498348/* Line 1806 of yacc.c  */
    8350 #line 2309 "parser.yy"
     8349#line 2308 "parser.yy"
    83518350    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83528351    break;
     
    83558354
    83568355/* Line 1806 of yacc.c  */
    8357 #line 2311 "parser.yy"
     8356#line 2310 "parser.yy"
    83588357    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    83598358    break;
     
    83628361
    83638362/* Line 1806 of yacc.c  */
    8364 #line 2313 "parser.yy"
     8363#line 2312 "parser.yy"
    83658364    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83668365    break;
     
    83698368
    83708369/* Line 1806 of yacc.c  */
    8371 #line 2318 "parser.yy"
     8370#line 2317 "parser.yy"
    83728371    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    83738372    break;
     
    83768375
    83778376/* Line 1806 of yacc.c  */
    8378 #line 2320 "parser.yy"
     8377#line 2319 "parser.yy"
    83798378    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    83808379    break;
     
    83838382
    83848383/* Line 1806 of yacc.c  */
    8385 #line 2322 "parser.yy"
     8384#line 2321 "parser.yy"
    83868385    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    83878386    break;
     
    83908389
    83918390/* Line 1806 of yacc.c  */
    8392 #line 2332 "parser.yy"
     8391#line 2331 "parser.yy"
    83938392    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83948393    break;
     
    83978396
    83988397/* Line 1806 of yacc.c  */
    8399 #line 2335 "parser.yy"
     8398#line 2334 "parser.yy"
    84008399    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84018400    break;
     
    84048403
    84058404/* Line 1806 of yacc.c  */
    8406 #line 2337 "parser.yy"
     8405#line 2336 "parser.yy"
    84078406    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84088407    break;
     
    84118410
    84128411/* Line 1806 of yacc.c  */
    8413 #line 2342 "parser.yy"
     8412#line 2341 "parser.yy"
    84148413    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    84158414    break;
     
    84188417
    84198418/* Line 1806 of yacc.c  */
    8420 #line 2344 "parser.yy"
     8419#line 2343 "parser.yy"
    84218420    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    84228421    break;
     
    84258424
    84268425/* Line 1806 of yacc.c  */
    8427 #line 2346 "parser.yy"
     8426#line 2345 "parser.yy"
    84288427    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84298428    break;
     
    84328431
    84338432/* Line 1806 of yacc.c  */
    8434 #line 2351 "parser.yy"
     8433#line 2350 "parser.yy"
    84358434    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    84368435    break;
     
    84398438
    84408439/* Line 1806 of yacc.c  */
    8441 #line 2353 "parser.yy"
     8440#line 2352 "parser.yy"
    84428441    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84438442    break;
     
    84468445
    84478446/* Line 1806 of yacc.c  */
    8448 #line 2355 "parser.yy"
     8447#line 2354 "parser.yy"
    84498448    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    84508449    break;
     
    84538452
    84548453/* Line 1806 of yacc.c  */
    8455 #line 2357 "parser.yy"
     8454#line 2356 "parser.yy"
    84568455    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84578456    break;
     
    84608459
    84618460/* Line 1806 of yacc.c  */
    8462 #line 2362 "parser.yy"
     8461#line 2361 "parser.yy"
    84638462    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    84648463    break;
     
    84678466
    84688467/* Line 1806 of yacc.c  */
    8469 #line 2364 "parser.yy"
     8468#line 2363 "parser.yy"
    84708469    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    84718470    break;
     
    84748473
    84758474/* Line 1806 of yacc.c  */
    8476 #line 2366 "parser.yy"
     8475#line 2365 "parser.yy"
    84778476    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    84788477    break;
     
    84818480
    84828481/* Line 1806 of yacc.c  */
    8483 #line 2397 "parser.yy"
     8482#line 2396 "parser.yy"
    84848483    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84858484    break;
     
    84888487
    84898488/* Line 1806 of yacc.c  */
    8490 #line 2400 "parser.yy"
     8489#line 2399 "parser.yy"
    84918490    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84928491    break;
     
    84958494
    84968495/* Line 1806 of yacc.c  */
    8497 #line 2402 "parser.yy"
     8496#line 2401 "parser.yy"
    84988497    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    84998498    break;
     
    85028501
    85038502/* Line 1806 of yacc.c  */
    8504 #line 2407 "parser.yy"
     8503#line 2406 "parser.yy"
    85058504    {
    85068505                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85128511
    85138512/* Line 1806 of yacc.c  */
    8514 #line 2412 "parser.yy"
     8513#line 2411 "parser.yy"
    85158514    {
    85168515                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85228521
    85238522/* Line 1806 of yacc.c  */
    8524 #line 2420 "parser.yy"
     8523#line 2419 "parser.yy"
    85258524    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85268525    break;
     
    85298528
    85308529/* Line 1806 of yacc.c  */
    8531 #line 2422 "parser.yy"
     8530#line 2421 "parser.yy"
    85328531    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85338532    break;
     
    85368535
    85378536/* Line 1806 of yacc.c  */
    8538 #line 2424 "parser.yy"
     8537#line 2423 "parser.yy"
    85398538    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85408539    break;
     
    85438542
    85448543/* Line 1806 of yacc.c  */
    8545 #line 2429 "parser.yy"
     8544#line 2428 "parser.yy"
    85468545    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    85478546    break;
     
    85508549
    85518550/* Line 1806 of yacc.c  */
    8552 #line 2431 "parser.yy"
     8551#line 2430 "parser.yy"
    85538552    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    85548553    break;
     
    85578556
    85588557/* Line 1806 of yacc.c  */
    8559 #line 2436 "parser.yy"
     8558#line 2435 "parser.yy"
    85608559    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    85618560    break;
     
    85648563
    85658564/* Line 1806 of yacc.c  */
    8566 #line 2438 "parser.yy"
     8565#line 2437 "parser.yy"
    85678566    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    85688567    break;
     
    85718570
    85728571/* Line 1806 of yacc.c  */
    8573 #line 2453 "parser.yy"
     8572#line 2452 "parser.yy"
    85748573    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85758574    break;
     
    85788577
    85798578/* Line 1806 of yacc.c  */
    8580 #line 2455 "parser.yy"
     8579#line 2454 "parser.yy"
    85818580    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    85828581    break;
     
    85858584
    85868585/* Line 1806 of yacc.c  */
    8587 #line 2460 "parser.yy"
     8586#line 2459 "parser.yy"
    85888587    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    85898588    break;
     
    85928591
    85938592/* Line 1806 of yacc.c  */
    8594 #line 2462 "parser.yy"
     8593#line 2461 "parser.yy"
    85958594    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    85968595    break;
     
    85998598
    86008599/* Line 1806 of yacc.c  */
    8601 #line 2464 "parser.yy"
     8600#line 2463 "parser.yy"
    86028601    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    86038602    break;
     
    86068605
    86078606/* Line 1806 of yacc.c  */
    8608 #line 2466 "parser.yy"
     8607#line 2465 "parser.yy"
    86098608    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    86108609    break;
     
    86138612
    86148613/* Line 1806 of yacc.c  */
    8615 #line 2468 "parser.yy"
     8614#line 2467 "parser.yy"
    86168615    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86178616    break;
     
    86208619
    86218620/* Line 1806 of yacc.c  */
    8622 #line 2474 "parser.yy"
     8621#line 2473 "parser.yy"
    86238622    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86248623    break;
     
    86278626
    86288627/* Line 1806 of yacc.c  */
    8629 #line 2476 "parser.yy"
     8628#line 2475 "parser.yy"
    86308629    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86318630    break;
     
    86348633
    86358634/* Line 1806 of yacc.c  */
    8636 #line 2478 "parser.yy"
     8635#line 2477 "parser.yy"
    86378636    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86388637    break;
     
    86418640
    86428641/* Line 1806 of yacc.c  */
    8643 #line 2483 "parser.yy"
     8642#line 2482 "parser.yy"
    86448643    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    86458644    break;
     
    86488647
    86498648/* Line 1806 of yacc.c  */
    8650 #line 2485 "parser.yy"
     8649#line 2484 "parser.yy"
    86518650    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86528651    break;
     
    86558654
    86568655/* Line 1806 of yacc.c  */
    8657 #line 2487 "parser.yy"
     8656#line 2486 "parser.yy"
    86588657    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86598658    break;
     
    86628661
    86638662/* Line 1806 of yacc.c  */
    8664 #line 2493 "parser.yy"
     8663#line 2492 "parser.yy"
    86658664    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    86668665    break;
     
    86698668
    86708669/* Line 1806 of yacc.c  */
    8671 #line 2495 "parser.yy"
     8670#line 2494 "parser.yy"
    86728671    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    86738672    break;
     
    86768675
    86778676/* Line 1806 of yacc.c  */
    8678 #line 2501 "parser.yy"
     8677#line 2500 "parser.yy"
    86798678    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    86808679    break;
     
    86838682
    86848683/* Line 1806 of yacc.c  */
    8685 #line 2503 "parser.yy"
     8684#line 2502 "parser.yy"
    86868685    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    86878686    break;
     
    86908689
    86918690/* Line 1806 of yacc.c  */
    8692 #line 2505 "parser.yy"
     8691#line 2504 "parser.yy"
    86938692    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    86948693    break;
     
    86978696
    86988697/* Line 1806 of yacc.c  */
    8699 #line 2507 "parser.yy"
     8698#line 2506 "parser.yy"
    87008699    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    87018700    break;
     
    87048703
    87058704/* Line 1806 of yacc.c  */
    8706 #line 2522 "parser.yy"
     8705#line 2521 "parser.yy"
    87078706    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87088707    break;
     
    87118710
    87128711/* Line 1806 of yacc.c  */
    8713 #line 2524 "parser.yy"
     8712#line 2523 "parser.yy"
    87148713    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    87158714    break;
     
    87188717
    87198718/* Line 1806 of yacc.c  */
    8720 #line 2529 "parser.yy"
     8719#line 2528 "parser.yy"
    87218720    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    87228721    break;
     
    87258724
    87268725/* Line 1806 of yacc.c  */
    8727 #line 2531 "parser.yy"
     8726#line 2530 "parser.yy"
    87288727    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    87298728    break;
     
    87328731
    87338732/* Line 1806 of yacc.c  */
    8734 #line 2533 "parser.yy"
     8733#line 2532 "parser.yy"
    87358734    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    87368735    break;
     
    87398738
    87408739/* Line 1806 of yacc.c  */
    8741 #line 2535 "parser.yy"
     8740#line 2534 "parser.yy"
    87428741    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    87438742    break;
     
    87468745
    87478746/* Line 1806 of yacc.c  */
    8748 #line 2537 "parser.yy"
     8747#line 2536 "parser.yy"
    87498748    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87508749    break;
     
    87538752
    87548753/* Line 1806 of yacc.c  */
    8755 #line 2543 "parser.yy"
     8754#line 2542 "parser.yy"
    87568755    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87578756    break;
     
    87608759
    87618760/* Line 1806 of yacc.c  */
    8762 #line 2545 "parser.yy"
     8761#line 2544 "parser.yy"
    87638762    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    87648763    break;
     
    87678766
    87688767/* Line 1806 of yacc.c  */
    8769 #line 2547 "parser.yy"
     8768#line 2546 "parser.yy"
    87708769    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87718770    break;
     
    87748773
    87758774/* Line 1806 of yacc.c  */
    8776 #line 2552 "parser.yy"
     8775#line 2551 "parser.yy"
    87778776    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    87788777    break;
     
    87818780
    87828781/* Line 1806 of yacc.c  */
    8783 #line 2554 "parser.yy"
     8782#line 2553 "parser.yy"
    87848783    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    87858784    break;
     
    87888787
    87898788/* Line 1806 of yacc.c  */
    8790 #line 2556 "parser.yy"
     8789#line 2555 "parser.yy"
    87918790    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    87928791    break;
     
    87958794
    87968795/* Line 1806 of yacc.c  */
    8797 #line 2563 "parser.yy"
     8796#line 2562 "parser.yy"
    87988797    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    87998798    break;
     
    88028801
    88038802/* Line 1806 of yacc.c  */
    8804 #line 2574 "parser.yy"
     8803#line 2573 "parser.yy"
    88058804    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    88068805    break;
     
    88098808
    88108809/* Line 1806 of yacc.c  */
    8811 #line 2577 "parser.yy"
     8810#line 2576 "parser.yy"
    88128811    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    88138812    break;
     
    88168815
    88178816/* Line 1806 of yacc.c  */
    8818 #line 2579 "parser.yy"
     8817#line 2578 "parser.yy"
    88198818    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    88208819    break;
     
    88238822
    88248823/* Line 1806 of yacc.c  */
    8825 #line 2582 "parser.yy"
     8824#line 2581 "parser.yy"
    88268825    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    88278826    break;
     
    88308829
    88318830/* Line 1806 of yacc.c  */
    8832 #line 2584 "parser.yy"
     8831#line 2583 "parser.yy"
    88338832    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    88348833    break;
     
    88378836
    88388837/* Line 1806 of yacc.c  */
    8839 #line 2586 "parser.yy"
     8838#line 2585 "parser.yy"
    88408839    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    88418840    break;
     
    88448843
    88458844/* Line 1806 of yacc.c  */
    8846 #line 2600 "parser.yy"
     8845#line 2599 "parser.yy"
    88478846    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    88488847    break;
     
    88518850
    88528851/* Line 1806 of yacc.c  */
    8853 #line 2602 "parser.yy"
     8852#line 2601 "parser.yy"
    88548853    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    88558854    break;
     
    88588857
    88598858/* Line 1806 of yacc.c  */
    8860 #line 2607 "parser.yy"
     8859#line 2606 "parser.yy"
    88618860    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    88628861    break;
     
    88658864
    88668865/* Line 1806 of yacc.c  */
    8867 #line 2609 "parser.yy"
     8866#line 2608 "parser.yy"
    88688867    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    88698868    break;
     
    88728871
    88738872/* Line 1806 of yacc.c  */
    8874 #line 2611 "parser.yy"
     8873#line 2610 "parser.yy"
    88758874    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    88768875    break;
     
    88798878
    88808879/* Line 1806 of yacc.c  */
    8881 #line 2613 "parser.yy"
     8880#line 2612 "parser.yy"
    88828881    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    88838882    break;
     
    88868885
    88878886/* Line 1806 of yacc.c  */
    8888 #line 2615 "parser.yy"
     8887#line 2614 "parser.yy"
    88898888    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    88908889    break;
     
    88938892
    88948893/* Line 1806 of yacc.c  */
    8895 #line 2621 "parser.yy"
     8894#line 2620 "parser.yy"
    88968895    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    88978896    break;
     
    89008899
    89018900/* Line 1806 of yacc.c  */
    8902 #line 2623 "parser.yy"
     8901#line 2622 "parser.yy"
    89038902    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    89048903    break;
     
    89078906
    89088907/* Line 1806 of yacc.c  */
    8909 #line 2625 "parser.yy"
     8908#line 2624 "parser.yy"
    89108909    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89118910    break;
     
    89148913
    89158914/* Line 1806 of yacc.c  */
    8916 #line 2630 "parser.yy"
     8915#line 2629 "parser.yy"
    89178916    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    89188917    break;
     
    89218920
    89228921/* Line 1806 of yacc.c  */
    8923 #line 2632 "parser.yy"
     8922#line 2631 "parser.yy"
    89248923    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    89258924    break;
     
    89288927
    89298928/* Line 1806 of yacc.c  */
    8930 #line 2642 "parser.yy"
     8929#line 2641 "parser.yy"
    89318930    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    89328931    break;
     
    89358934
    89368935/* Line 1806 of yacc.c  */
    8937 #line 2652 "parser.yy"
     8936#line 2651 "parser.yy"
    89388937    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89398938    break;
     
    89428941
    89438942/* Line 1806 of yacc.c  */
    8944 #line 2654 "parser.yy"
     8943#line 2653 "parser.yy"
    89458944    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89468945    break;
     
    89498948
    89508949/* Line 1806 of yacc.c  */
    8951 #line 2656 "parser.yy"
     8950#line 2655 "parser.yy"
    89528951    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89538952    break;
     
    89568955
    89578956/* Line 1806 of yacc.c  */
    8958 #line 2658 "parser.yy"
     8957#line 2657 "parser.yy"
    89598958    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89608959    break;
     
    89638962
    89648963/* Line 1806 of yacc.c  */
    8965 #line 2660 "parser.yy"
     8964#line 2659 "parser.yy"
    89668965    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89678966    break;
     
    89708969
    89718970/* Line 1806 of yacc.c  */
    8972 #line 2662 "parser.yy"
     8971#line 2661 "parser.yy"
    89738972    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89748973    break;
     
    89778976
    89788977/* Line 1806 of yacc.c  */
    8979 #line 2669 "parser.yy"
     8978#line 2668 "parser.yy"
    89808979    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89818980    break;
     
    89848983
    89858984/* Line 1806 of yacc.c  */
    8986 #line 2671 "parser.yy"
     8985#line 2670 "parser.yy"
    89878986    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    89888987    break;
     
    89918990
    89928991/* Line 1806 of yacc.c  */
    8993 #line 2673 "parser.yy"
     8992#line 2672 "parser.yy"
    89948993    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    89958994    break;
     
    89988997
    89998998/* Line 1806 of yacc.c  */
    9000 #line 2675 "parser.yy"
     8999#line 2674 "parser.yy"
    90019000    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    90029001    break;
     
    90059004
    90069005/* Line 1806 of yacc.c  */
    9007 #line 2677 "parser.yy"
     9006#line 2676 "parser.yy"
    90089007    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90099008    break;
     
    90129011
    90139012/* Line 1806 of yacc.c  */
    9014 #line 2679 "parser.yy"
     9013#line 2678 "parser.yy"
    90159014    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90169015    break;
     
    90199018
    90209019/* Line 1806 of yacc.c  */
    9021 #line 2681 "parser.yy"
     9020#line 2680 "parser.yy"
    90229021    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90239022    break;
     
    90269025
    90279026/* Line 1806 of yacc.c  */
    9028 #line 2683 "parser.yy"
     9027#line 2682 "parser.yy"
    90299028    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90309029    break;
     
    90339032
    90349033/* Line 1806 of yacc.c  */
    9035 #line 2685 "parser.yy"
     9034#line 2684 "parser.yy"
    90369035    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    90379036    break;
     
    90409039
    90419040/* Line 1806 of yacc.c  */
    9042 #line 2687 "parser.yy"
     9041#line 2686 "parser.yy"
    90439042    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90449043    break;
     
    90479046
    90489047/* Line 1806 of yacc.c  */
    9049 #line 2692 "parser.yy"
     9048#line 2691 "parser.yy"
    90509049    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    90519050    break;
     
    90549053
    90559054/* Line 1806 of yacc.c  */
    9056 #line 2694 "parser.yy"
     9055#line 2693 "parser.yy"
    90579056    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    90589057    break;
     
    90619060
    90629061/* Line 1806 of yacc.c  */
    9063 #line 2699 "parser.yy"
     9062#line 2698 "parser.yy"
    90649063    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    90659064    break;
     
    90689067
    90699068/* Line 1806 of yacc.c  */
    9070 #line 2701 "parser.yy"
     9069#line 2700 "parser.yy"
    90719070    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    90729071    break;
     
    90759074
    90769075/* Line 1806 of yacc.c  */
    9077 #line 2728 "parser.yy"
     9076#line 2727 "parser.yy"
    90789077    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    90799078    break;
     
    90829081
    90839082/* Line 1806 of yacc.c  */
    9084 #line 2739 "parser.yy"
     9083#line 2738 "parser.yy"
    90859084    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90869085    break;
     
    90899088
    90909089/* Line 1806 of yacc.c  */
    9091 #line 2741 "parser.yy"
     9090#line 2740 "parser.yy"
    90929091    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90939092    break;
     
    90969095
    90979096/* Line 1806 of yacc.c  */
    9098 #line 2743 "parser.yy"
     9097#line 2742 "parser.yy"
    90999098    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91009099    break;
     
    91039102
    91049103/* Line 1806 of yacc.c  */
    9105 #line 2745 "parser.yy"
     9104#line 2744 "parser.yy"
    91069105    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91079106    break;
     
    91109109
    91119110/* Line 1806 of yacc.c  */
    9112 #line 2747 "parser.yy"
     9111#line 2746 "parser.yy"
    91139112    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    91149113    break;
     
    91179116
    91189117/* Line 1806 of yacc.c  */
    9119 #line 2749 "parser.yy"
     9118#line 2748 "parser.yy"
    91209119    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    91219120    break;
     
    91249123
    91259124/* Line 1806 of yacc.c  */
    9126 #line 2756 "parser.yy"
     9125#line 2755 "parser.yy"
    91279126    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91289127    break;
     
    91319130
    91329131/* Line 1806 of yacc.c  */
    9133 #line 2758 "parser.yy"
     9132#line 2757 "parser.yy"
    91349133    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91359134    break;
     
    91389137
    91399138/* Line 1806 of yacc.c  */
    9140 #line 2760 "parser.yy"
     9139#line 2759 "parser.yy"
    91419140    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91429141    break;
     
    91459144
    91469145/* Line 1806 of yacc.c  */
    9147 #line 2762 "parser.yy"
     9146#line 2761 "parser.yy"
    91489147    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91499148    break;
     
    91529151
    91539152/* Line 1806 of yacc.c  */
    9154 #line 2764 "parser.yy"
     9153#line 2763 "parser.yy"
    91559154    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    91569155    break;
     
    91599158
    91609159/* Line 1806 of yacc.c  */
    9161 #line 2766 "parser.yy"
     9160#line 2765 "parser.yy"
    91629161    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    91639162    break;
     
    91669165
    91679166/* Line 1806 of yacc.c  */
    9168 #line 2771 "parser.yy"
     9167#line 2770 "parser.yy"
    91699168    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    91709169    break;
     
    91739172
    91749173/* Line 1806 of yacc.c  */
    9175 #line 2776 "parser.yy"
     9174#line 2775 "parser.yy"
    91769175    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    91779176    break;
     
    91809179
    91819180/* Line 1806 of yacc.c  */
    9182 #line 2778 "parser.yy"
     9181#line 2777 "parser.yy"
    91839182    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91849183    break;
     
    91879186
    91889187/* Line 1806 of yacc.c  */
    9189 #line 2780 "parser.yy"
     9188#line 2779 "parser.yy"
    91909189    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    91919190    break;
     
    91949193
    91959194/* Line 1806 of yacc.c  */
    9196 #line 2804 "parser.yy"
     9195#line 2803 "parser.yy"
    91979196    { (yyval.en) = 0; }
    91989197    break;
     
    92019200
    92029201/* Line 1806 of yacc.c  */
    9203 #line 2806 "parser.yy"
     9202#line 2805 "parser.yy"
    92049203    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    92059204    break;
     
    92089207
    92099208/* Line 1806 of yacc.c  */
    9210 #line 9211 "Parser/parser.cc"
     9209#line 9210 "Parser/parser.cc"
    92119210      default: break;
    92129211    }
     
    94399438
    94409439/* Line 2067 of yacc.c  */
    9441 #line 2809 "parser.yy"
     9440#line 2808 "parser.yy"
    94429441
    94439442// ----end of grammar----
  • src/Parser/parser.h

    rb3f9a0cb r89173242  
    262262
    263263/* Line 2068 of yacc.c  */
    264 #line 112 "parser.yy"
     264#line 111 "parser.yy"
    265265
    266266        Token tok;
  • src/Parser/parser.yy

    rb3f9a0cb r89173242  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 24 16:16:16 2016
    13 // Update Count     : 1498
     12// Last Modified On : Wed Mar  2 17:24:45 2016
     13// Update Count     : 1495
    1414//
    1515
     
    5151#include <cstdio>
    5252#include <stack>
     53#include "TypedefTable.h"
    5354#include "lex.h"
    54 #include "parser.h"
    5555#include "ParseNode.h"
    56 #include "TypedefTable.h"
    5756#include "TypeData.h"
    5857#include "LinkageSpec.h"
     
    10291028                {
    10301029                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    1031                         $$ = $1->addInitializer( $2 );
     1030                        $$ = $1;
    10321031                }
    10331032        | declaration_qualifier_list new_variable_specifier initializer_opt
     
    10361035                {
    10371036                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    1038                         $$ = $2->addQualifiers( $1 )->addInitializer( $3 );;
     1037                        $$ = $2->addQualifiers( $1 );
    10391038                }
    10401039        | new_variable_declaration pop ',' push identifier_or_type_name initializer_opt
    10411040                {
    10421041                        typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
    1043                         $$ = $1->appendList( $1->cloneType( $5 )->addInitializer( $6 ) );
     1042                        $$ = $1->appendList( $1->cloneType( $5 ) );
    10441043                }
    10451044        ;
  • src/ResolvExpr/Resolver.cc

    rb3f9a0cb r89173242  
    1010// Created On       : Sun May 17 12:17:01 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar 24 16:43:11 2016
    13 // Update Count     : 181
     12// Last Modified On : Tue Feb  9 21:57:52 2016
     13// Update Count     : 179
    1414//
    1515
     
    165165                Type *new_type = resolveTypeof( objectDecl->get_type(), *this );
    166166                objectDecl->set_type( new_type );
    167                 // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable
    168                 // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes
    169                 // initContext because of a function type can contain object declarations in the return and parameter types. So
    170                 // each value of initContext is retained, so the type on the first analysis is preserved and used for selecting
    171                 // the RHS.
    172                 Type *temp = initContext;
    173167                initContext = new_type;
    174168                SymTab::Indexer::visit( objectDecl );
    175                 initContext = temp;
    176169        }
    177170
  • src/SymTab/Indexer.cc

    rb3f9a0cb r89173242  
    1919#include <typeinfo>
    2020#include <unordered_map>
    21 #include <unordered_set>
    2221#include <utility>
    2322
     
    436435
    437436        void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const {
    438                 std::unordered_set< std::string > foundMangleNames;
     437                if ( ! tables ) return;
     438
     439                IdTable::const_iterator decls = tables->idTable.find( id );
     440                if ( decls != tables->idTable.end() ) {
     441                        const MangleTable &mangleTable = decls->second;
     442                        for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
     443                                out.push_back( decl->second );
     444                        }
     445                }
    439446               
    440                 Indexer::Impl *searchTables = tables;
    441                 while ( searchTables ) {
    442 
    443                         IdTable::const_iterator decls = searchTables->idTable.find( id );
    444                         if ( decls != searchTables->idTable.end() ) {
    445                                 const MangleTable &mangleTable = decls->second;
    446                                 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    447                                         // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found
    448                                         if ( foundMangleNames.insert( decl->first ).second == false ) continue;
    449                                        
    450                                         out.push_back( decl->second );
    451                                 }
    452                         }
    453                        
    454                         // get declarations from base indexers
    455                         searchTables = searchTables->base.tables;
    456                 }
     447                // get declarations from base indexers
     448                tables->base.lookupId( id, out );
    457449        }
    458450
     
    506498        }
    507499
    508         bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const {
     500        bool Indexer::hasCDeclWithName( const std::string &id ) const {
    509501                if ( ! tables ) return false;
    510502
     
    513505                        const MangleTable &mangleTable = decls->second;
    514506                        for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    515                                 // check for C decls with the same name, skipping
    516                                 // those with a compatible type (by mangleName)
    517                                 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true;
    518                         }
    519                 }
    520 
    521                 return tables->base.hasIncompatibleCDecl( id, mangleName );
     507                                if ( decl->second->get_linkage() == LinkageSpec::C ) return true;
     508                        }
     509                }
     510
     511                return tables->base.hasCDeclWithName( id );
    522512        }
    523513       
     
    602592                const std::string &name = decl->get_name();
    603593                std::string mangleName;
    604                 if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) {
     594                if ( decl->get_linkage() == LinkageSpec::C ) {
     595                        mangleName = name;
     596                } else if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) {
    605597                        // mangle the name without including the appropriate suffix, so overridable routines are placed into the
    606598                        // same "bucket" as their user defined versions.
     
    613605                if ( ! existing || ! addedIdConflicts( existing, decl ) ) {
    614606                        // this ensures that no two declarations with the same unmangled name both have C linkage
    615                         if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName ) ) {
     607                        if ( decl->get_linkage() == LinkageSpec::C && hasCDeclWithName( name ) ) {
    616608                                throw SemanticError( "invalid overload of C function ", decl );
    617                         } // NOTE this is broken in Richard's original code in such a way that it never triggers (it
    618                           // doesn't check decls that have the same manglename, and all C-linkage decls are defined to
    619                           // have their name as their manglename, hence the error can never trigger).
    620                           // The code here is closer to correct, but name mangling would have to be completely
    621                           // isomorphic to C type-compatibility, which it may not be.
     609                        }
    622610                       
    623611                        tables->idTable[ name ][ mangleName ] = decl;
  • src/SymTab/Indexer.h

    rb3f9a0cb r89173242  
    9797                /// looks up a specific mangled ID at the given scope
    9898                DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
    99                 /// returns true if there exists a declaration with C linkage and the given name with a different mangled name
    100                 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const;
     99                /// returns true if there exists a declaration with C linkage and the given name
     100                bool hasCDeclWithName( const std::string &id ) const;
    101101                // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope)
    102102                NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const;
  • src/examples/constants.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 11 16:27:38 2016
    13 // Update Count     : 81
     12// Last Modified On : Mon Jan 25 23:44:12 2016
     13// Update Count     : 76
    1414//
    1515
     
    4444        0x_ff_FF_ff_FF_ff_FF_ff_FF;
    4545        9_223_372_036_854_775_807;
    46         18_446_744_073_709_551_615UL;
     46        18_446_744_073_709_551_615;
    4747        3.141_59f;
    4848        3.14159;
     
    5353        L'\x_ff_ee';
    5454        L_"\x_ff_ee";
    55         L"a_b\r\vyc\u_00_40  x_y_z\xff_AA";
    56         L_"a_b\r\vyc\u_00_40\
     55        L"a_b\r\Qyc\u_00_40  x_y_z\xff_AA";
     56        L_"a_b\r\Qyc\u_00_40\
    5757  x_y_z\xff_AA";
    5858        "abc" "def" "ghi";
  • src/examples/fstream_test.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Mar  6 20:58:29 2016
    13 // Update Count     : 54
     12// Last Modified On : Wed Mar  2 15:12:21 2016
     13// Update Count     : 51
    1414//
    1515
     
    2828        int i, j, k;
    2929        sin  | &i | &j | &k;
    30         sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k | endl;
     30        sout | "Vous avez entré" | "i:" | i | "j:" | j | "k:" | k | endl;
    3131}
    3232
  • src/examples/huge.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:16:32 2016
    13 // Update Count     : 2
     12// Last Modified On : Wed May 27 18:15:34 2015
     13// Update Count     : 1
    1414//
    1515
    16 int huge( int n, forall( otype T ) T (*f)( T ) ) {
     16int huge( int n, forall( type T ) T (*f)( T ) ) {
    1717        if ( n <= 0 )
    1818                return f( 0 );
  • src/examples/identity.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:15:08 2016
    13 // Update Count     : 13
     12// Last Modified On : Mon Feb 29 23:40:45 2016
     13// Update Count     : 12
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( otype T )
     18forall( type T )
    1919T identity( T t ) {
    2020        return t;
  • src/examples/includes.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 23:28:02 2016
    13 // Update Count     : 328
     12// Last Modified On : Mon Dec 21 13:54:09 2015
     13// Update Count     : 322
    1414//
    1515
     
    4343#include <ctype.h>
    4444#include <curses.h>
    45 #include <demangle.h>
    46 #include <dialog.h>
     45#include <demangle.h>           // enum / contains "type"
     46#include <dialog.h>                     // enum / contains "type"
    4747#include <dirent.h>
    4848#include <dis-asm.h>
     
    5656#include <err.h>
    5757#include <errno.h>
     58#include <error.h>
    5859#if 0
    59 #include <error.h>
    60 #endif
    6160#include <eti.h>
    62 #include <evdns.h>
     61#include <evdns.h>                      // subdirectory event2 contains "type"
    6362#include <event.h>
    64 #include <evhttp.h>
    65 #if 0
     63#include <evhttp.h>                     // enum / subdirectory event2 contains "type"
    6664#include <evrpc.h>
    6765#include <evutil.h>
    6866#include <execinfo.h>
    69 #include <expat.h>
     67#include <expat.h>                      // enum / contains "type" and "context"
    7068#include <expat_config.h>
    7169#include <expat_external.h>
     
    7674#include <fmtmsg.h>
    7775#include <fnmatch.h>
    78 #include <form.h>
     76#include <form.h>                       // contains "type"
    7977#include <fpu_control.h>
    8078#include <fstab.h>
     
    8381#include <ftw.h>
    8482#include <gconv.h>
    85 //#include <gcrypt.h>
     83//#include <gcrypt.h>           // enum / contains "type"
    8684//#include <gcrypt-module.h>
    8785#include <getopt.h>
     
    109107#include <limits.h>
    110108#include <locale.h>
    111 #include <math.h>
     109#include <math.h>                       // contains "type"
    112110#include <ncurses.h>
    113111#include <setjmp.h>
  • src/examples/it_out.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:14:39 2016
    13 // Update Count     : 8
     12// Last Modified On : Wed Mar  2 18:11:00 2016
     13// Update Count     : 5
    1414//
    1515
     
    2121};
    2222
    23 trait writeable( otype T ) {
     23trait writeable( type T ) {
    2424        forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T );
    2525};
     
    3636};
    3737
    38 trait readable( otype T ) {
     38trait readable( type T ) {
    3939        forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T );
    4040};
     
    4343forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* );
    4444
    45 trait iterator( otype iterator_type, otype elt_type ) {
     45trait iterator( type iterator_type, type elt_type ) {
    4646        iterator_type ?++( iterator_type* );
    4747        iterator_type ++?( iterator_type* );
     
    5252};
    5353
    54 forall( otype elt_type | writeable( elt_type ),
    55                 otype iterator_type | iterator( iterator_type, elt_type ),
     54forall( type elt_type | writeable( elt_type ),
     55                type iterator_type | iterator( iterator_type, elt_type ),
    5656                dtype os_type | ostream( os_type ) )
    5757void write_all( iterator_type begin, iterator_type end, os_type *os );
    5858
    59 forall( otype elt_type | writeable( elt_type ),
    60                 otype iterator_type | iterator( iterator_type, elt_type ),
     59forall( type elt_type | writeable( elt_type ),
     60                type iterator_type | iterator( iterator_type, elt_type ),
    6161                dtype os_type | ostream( os_type ) )
    6262void write_all( elt_type begin, iterator_type end, os_type *os ) {
  • src/examples/limits.c

    rb3f9a0cb r89173242  
    9898// Local Variables: //
    9999// tab-width: 4 //
    100 // compile-command: "cfa limits.c" //
     100// compile-command: "cfa min.c" //
    101101// End: //
  • src/examples/new.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:13:20 2016
    13 // Update Count     : 4
     12// Last Modified On : Mon Jan 25 23:33:55 2016
     13// Update Count     : 2
    1414//
    1515
    16 forall( otype T )
     16forall( type T )
    1717void f( T *t ) {
    1818        t--;
  • src/examples/prolog.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:09:39 2016
    13 // Update Count     : 5
     12// Last Modified On : Wed Mar  2 18:11:18 2016
     13// Update Count     : 2
    1414//
    1515
    16 #include <fstream>
     16extern "C" { extern int printf( const char *fmt, ... ); }
    1717
    18 void printResult( int x ) { sout | "int" | endl; }
    19 void printResult( double x ) { sout | "double" | endl; }
    20 void printResult( char * x ) { sout | "char*" | endl; }
     18void printResult( int x ) { printf( "int\n" ); }
     19void printResult( double x ) { printf( "double\n" ); }
     20void printResult( char * x ) { printf( "char*\n" ); }
    2121
    2222void is_arithmetic( int x ) {}
     
    2525void is_integer( int x ) {}
    2626
    27 trait ArithmeticType( otype T ) {
     27trait ArithmeticType( type T ) {
    2828        void is_arithmetic( T );
    2929};
    3030
    31 trait IntegralType( otype T | ArithmeticType( T ) ) {
     31trait IntegralType( type T | ArithmeticType( T ) ) {
    3232        void is_integer( T );
    3333};
    3434
    35 forall( otype T | IntegralType( T ) | { void printResult( T ); } )
     35forall( type T | IntegralType( T ) | { void printResult( T ); } )
    3636void hornclause( T param ) {
    3737        printResult( param );
  • src/examples/quad.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:07:02 2016
    13 // Update Count     : 8
     12// Last Modified On : Tue Mar  1 08:24:56 2016
     13// Update Count     : 7
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( otype T | { T ?*?( T, T ); } )
     18forall( type T | { T ?*?( T, T ); } )
    1919T square( T t ) {
    2020        return t * t;
    2121}
    2222
    23 forall( otype U | { U square( U ); } )
     23forall( type U | { U square( U ); } )
    2424U quad( U u ) {
    2525        return square( square( u ) );
  • src/examples/random.c

    rb3f9a0cb r89173242  
    77
    88int main() {
    9         rand48seed( getpid() );                                                         // set random seed
     9        randseed( getpid() );                                                           // set random seed
    1010
    1111        // test polymorphic calls to random and stream
    12         char c = rand48();
     12        char c = random();
    1313        sout | c | endl;
    14         int i = rand48();
     14        int i = random();
    1515    sout | i | endl;
    16         unsigned int ui = rand48();
     16        unsigned int ui = random();
    1717    sout | ui | endl;
    18         long int li = rand48();
     18        long int li = random();
    1919    sout | li | endl;
    20         unsigned long int uli = rand48();
     20        unsigned long int uli = random();
    2121    sout | uli | endl;
    22     float f = rand48();
     22    float f = random();
    2323    sout | f | endl;
    24     double d = rand48();
     24    double d = random();
    2525    sout | d | endl;
    26     float _Complex fc = rand48();
     26    float _Complex fc = random();
    2727    sout | fc | endl;
    28     double _Complex dc = rand48();
     28    double _Complex dc = random();
    2929    sout | dc | endl;
    30     long double _Complex ldc = rand48();
     30    long double _Complex ldc = random();
    3131    sout | ldc | endl;
    3232} // main
  • src/examples/searchsort.c

    rb3f9a0cb r89173242  
    1111// Created On       : Thu Feb  4 18:17:50 2016
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Tue Mar 22 22:16:46 2016
    14 // Update Count     : 55
     13// Last Modified On : Wed Feb 17 12:21:04 2016
     14// Update Count     : 46
    1515//
    1616
     
    3636                sout | *v | ", ";
    3737        } // for
    38         sout | endl | endl;
    39 
    40         // descending sort/search by changing < to >
    41         for ( unsigned int i = 0; i < size; i += 1 ) {
    42                 iarr[i] = i + 1;
    43                 sout | iarr[i] | ", ";
    44         } // for
    45         sout | endl;
    46         {
    47                 int ?<?( int x, int y ) { return x > y; }
    48                 qsort( iarr, size );
    49                 for ( unsigned int i = 0; i < size; i += 1 ) {
    50                         sout | iarr[i] | ", ";
    51                 } // for
    52                 sout | endl;
    53                 for ( unsigned int i = 0; i < size; i += 1 ) {
    54                         int *v = bsearch( size - i, iarr, size );
    55                         sout | *v | ", ";
    56                 } // for
    57         }
    5838        sout | endl | endl;
    5939
  • src/examples/simplePoly.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:06:41 2016
    13 // Update Count     : 3
     12// Last Modified On : Wed May 27 18:31:17 2015
     13// Update Count     : 2
    1414//
    1515
    16 forall( otype T, otype U | { T f( T, U ); } )
     16forall( type T, type U | { T f( T, U ); } )
    1717T q( T t, U u ) {
    1818        return f( t, u );
  • src/examples/simpler.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:06:30 2016
    13 // Update Count     : 2
     12// Last Modified On : Wed May 27 18:31:48 2015
     13// Update Count     : 1
    1414//
    1515
    16 forall( otype T ) T id( T, T );
     16forall( type T ) T id( T, T );
    1717
    1818int main() {
  • src/examples/specialize.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:06:17 2016
    13 // Update Count     : 3
     12// Last Modified On : Wed May 27 18:32:26 2015
     13// Update Count     : 2
    1414//
    1515
     
    3939}
    4040
    41 forall( otype T ) T f( T t )
     41forall( type T ) T f( T t )
    4242{
    4343        printf( "in f; sizeof T is %d\n", sizeof( T ) );
  • src/examples/square.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:05:48 2016
    13 // Update Count     : 27
     12// Last Modified On : Wed Feb 17 12:21:58 2016
     13// Update Count     : 26
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( otype T | { T ?*?( T, T ); } )
     18forall( type T | { T ?*?( T, T ); } )
    1919T square( T t ) {
    2020        return t * t;
  • src/examples/sum.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar  4 15:06:47 2016
    13 // Update Count     : 196
     12// Last Modified On : Wed Mar  2 18:12:01 2016
     13// Update Count     : 194
    1414//
    1515
    1616#include <fstream>
    1717
    18 trait sumable( otype T ) {
     18trait sumable( type T ) {
    1919        const T 0;
    2020        T ?+?( T, T );
     
    2424}; // sumable
    2525
    26 forall( otype T | sumable( T ) )
     26forall( type T | sumable( T ) )
    2727T sum( unsigned int n, T a[] ) {
    2828        T total = 0;                                                                            // instantiate T, select 0
  • src/examples/twice.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar  8 22:04:58 2016
    13 // Update Count     : 16
     12// Last Modified On : Wed Feb 17 12:23:25 2016
     13// Update Count     : 13
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( otype T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )
     18forall( type T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )
    1919T twice( const T t ) {
    2020        return t + t;
     
    2727        char ?++( char *op ) { char temp = *op; *op += 1; return temp; }
    2828
    29         sout | twice( 'a' ) | ' ' | twice( 1 ) | twice( 3.2 ) | endl;
     29        sout | twice( 'a' ) | ' ' | twice( 1 ) | ' ' | twice( 3.2 ) | endl;
    3030}
    3131
  • src/libcfa/Makefile.am

    rb3f9a0cb r89173242  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Wed Mar  2 22:59:23 2016
    14 ## Update Count     : 119
     13## Last Modified On : Wed Feb  3 11:19:35 2016
     14## Update Count     : 117
    1515###############################################################################
    1616
     
    6363libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    6464
    65 cheaders = #  expat
     65cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math
    6666cfaheaders = limits
    6767include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
  • src/libcfa/Makefile.in

    rb3f9a0cb r89173242  
    215215libs = stdlib iostream fstream iterator
    216216libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    217 cheaders = #  expat
     217cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math
    218218cfaheaders = limits
    219219include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
  • src/libcfa/builtins.cf

    rb3f9a0cb r89173242  
    584584int __builtin_LINE();
    585585extern const char *__PRETTY_FUNCTION__;
     586typedef int wchar_t;
  • src/libcfa/iostream.c

    rb3f9a0cb r89173242  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar  7 13:51:23 2016
    13 // Update Count     : 227
     12// Last Modified On : Wed Mar  2 18:06:35 2016
     13// Update Count     : 208
    1414//
    1515
     
    133133forall( dtype ostype | ostream( ostype ) )
    134134ostype * ?|?( ostype *os, const char *cp ) {
    135         enum { Open = 1, Close, OpenClose };
    136         static const char mask[256] = {
    137                 // opening delimiters
    138                 ['('] : Open, ['['] : Open, ['{'] : Open,
    139                 ['$'] : Open, [L'£'] : Open, [L'¥'] : Open, [L'¢'] : Open, [L'¿'] : Open, [L'«'] : Open,
    140                 // closing delimiters
    141                 [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
    142                 [')'] : Close, [']'] : Close, ['}'] : Close,
    143                 ['%'] : Close, [L'»'] : Close,
    144                 // opening-closing delimiters
    145                 ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
    146         }; // mask
    147 
    148135        int len = strlen( cp );
    149136        // null string => no separator
    150137  if ( len == 0 ) { sepOff( os ); return os; }
    151         // first character NOT spacing or closing punctuation => add left separator
    152         if ( sepPrt( os ) && isspace( cp[0] ) == 0 && mask[ cp[0] ] != Close && mask[ cp[0] ] != OpenClose ) {
     138        // first character NOT spacing or special punctuation => add left separator
     139        if ( sepPrt( os ) && isspace( cp[0] ) == 0 && cp[0] != '.' && cp[0] != ',' ) {
    153140                prtfmt( os, "%s", sepGet( os ) );
    154141        } // if
    155         // last character IS spacing or opening punctuation => turn off separator for next item
     142        // last character is spacing or special punctuation => turn off separator for next item
    156143        unsigned int posn = len - 1;
    157         if ( isspace( cp[posn] ) || mask[ cp[posn] ] == Open || mask[ cp[posn] ] == OpenClose ) {
     144        if ( isspace( cp[posn] ) || cp[posn] == ':' || cp[posn] == '$' ) {
    158145                sepOff( os );
    159146        } else {
  • src/libcfa/stdlib

    rb3f9a0cb r89173242  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 22 22:34:24 2016
    13 // Update Count     : 69
     12// Last Modified On : Wed Mar  2 17:38:21 2016
     13// Update Count     : 64
    1414//
    1515
     
    1919#include <stddef.h>                                                                             // size_t
    2020} // extern "C"
     21
     22forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
     23forall( otype T ) T * memset( T * ptr );                                        // remove when default value available
    2124
    2225forall( otype T ) T * malloc( void );
     
    3134forall( otype T ) T * memalign( size_t alignment );             // deprecated
    3235forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    33 
    34 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
    35 forall( otype T ) T * memset( T * ptr );                                // remove when default value available
    3636
    3737//---------------------------------------
     
    9393//---------------------------------------
    9494
    95 void rand48seed( long int s );
    96 char rand48();
    97 int rand48();
    98 unsigned int rand48();
    99 long int rand48();
    100 unsigned long int rand48();
    101 float rand48();
    102 double rand48();
    103 float _Complex rand48();
    104 double _Complex rand48();
    105 long double _Complex rand48();
     95void randseed( long int s );
     96char random();
     97int random();
     98unsigned int random();
     99long int random();
     100unsigned long int random();
     101float random();
     102double random();
     103float _Complex random();
     104double _Complex random();
     105long double _Complex random();
    106106
    107107//---------------------------------------
  • src/libcfa/stdlib.c

    rb3f9a0cb r89173242  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 23 13:26:42 2016
    13 // Update Count     : 146
     12// Last Modified On : Wed Mar  2 17:38:47 2016
     13// Update Count     : 143
    1414//
    1515
     
    2626#include <complex.h>                                                                    // _Complex_I, cabsf, cabs, cabsl
    2727} // extern "C"
     28
     29forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
     30        printf( "memset1\n" );
     31    return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
     32} // memset
     33forall( otype T ) T * memset( T * ptr ) {                               // remove when default value available
     34        printf( "memset2\n" );
     35    return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
     36} // memset
    2837
    2938forall( otype T ) T * malloc( void ) {
     
    8291} // posix_memalign
    8392
    84 forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
    85         printf( "memset1\n" );
    86     return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
    87 } // memset
    88 forall( otype T ) T * memset( T * ptr ) {                               // remove when default value available
    89         printf( "memset2\n" );
    90     return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
    91 } // memset
    92 
    9393//---------------------------------------
    9494
     
    243243//---------------------------------------
    244244
    245 void rand48seed( long int s ) { srand48( s ); }
    246 char rand48() { return mrand48(); }
    247 int rand48() { return mrand48(); }
    248 unsigned int rand48() { return lrand48(); }
    249 long int rand48() { return mrand48(); }
    250 unsigned long int rand48() { return lrand48(); }
    251 float rand48() { return (float)drand48(); }                             // otherwise float uses lrand48
    252 double rand48() { return drand48(); }
    253 float _Complex rand48() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
    254 double _Complex rand48() { return drand48() + (double _Complex)(drand48() * _Complex_I); }
    255 long double _Complex rand48() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
     245void randseed( long int s ) { srand48( s ); }
     246char random() { return lrand48(); }
     247int random() { return mrand48(); }
     248unsigned int random() { return lrand48(); }
     249long int random() { return mrand48(); }
     250unsigned long int random() { return lrand48(); }
     251float random() { return (float)drand48(); }                             // otherwise float uses lrand48
     252double random() { return drand48(); }
     253float _Complex random() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
     254double _Complex random() { return drand48() + (double _Complex)(drand48() * _Complex_I); }
     255long double _Complex random() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
    256256
    257257//---------------------------------------
Note: See TracChangeset for help on using the changeset viewer.