Changes in / [0f9e4403:c5833e8]


Ignore:
Files:
22 added
15 deleted
123 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    r0f9e4403 rc5833e8  
    3333
    3434# generated by latex
    35 *.aux
    36 *.bbl
    37 *.blg
    38 *.brf
    39 *.dvi
    40 *.idx
    41 *.ilg
    42 *.ind
    43 *.log
    44 *.out
    45 *.pdf
    46 *.ps
    47 *.toc
     35doc/refrat/refrat.aux
     36doc/refrat/refrat.bbl
     37doc/refrat/refrat.blg
     38doc/refrat/refrat.brf
     39doc/refrat/refrat.dvi
     40doc/refrat/refrat.idx
     41doc/refrat/refrat.ilg
     42doc/refrat/refrat.ind
     43doc/refrat/refrat.log
     44doc/refrat/refrat.out
     45doc/refrat/refrat.pdf
     46doc/refrat/refrat.ps
     47doc/refrat/refrat.toc
  • configure

    r0f9e4403 rc5833e8  
    24092409
    24102410
    2411 if test "x${CXXFLAGS}" = "x"; then
    2412    export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
    2413 else
    2414    export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
    2415 fi
    2416 
    24172411am__api_version='1.11'
    24182412
  • configure.ac

    r0f9e4403 rc5833e8  
    77#AC_CONFIG_SRCDIR([src/main.cc])
    88AC_CONFIG_HEADERS([config.h])
    9 
    10 if test "x${CXXFLAGS}" = "x"; then
    11    export CXXFLAGS="-std=c++11 -g -O2 ${CXXFLAGS}"
    12 else
    13    export CXXFLAGS="-std=c++11 ${CXXFLAGS}"
    14 fi
    159
    1610AM_INIT_AUTOMAKE
  • doc/refrat/Makefile

    r0f9e4403 rc5833e8  
    11## Define the appropriate configuration variables.
    22
    3 TeXLIB = .:../bibliography/:../LaTeXmacros/:
     3TeXLIB = .::
    44LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    5 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
     5BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
    66
    77## Define the text source files.
     
    4343        dvips $< -o $@
    4444
    45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
    46                 ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
     45${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
    4746        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    4847        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     
    5453        -${BibTeX} ${basename $@}
    5554        # Make index from *.aux entries and input index at end of document
    56         makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx
     55        makeindex -s indexstyle ${basename $@}.idx
    5756        ${LaTeX} ${basename $@}.tex
    5857        # Run again to get index title into table of contents
  • doc/refrat/refrat.tex

    r0f9e4403 rc5833e8  
    1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 %%
    3 %% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    4 %%
    5 %% The contents of this file are covered under the licence agreement in the
    6 %% file "LICENCE" distributed with Cforall.
    7 %%
    8 %% refrat.tex --
    9 %%
    10 %% Author           : Peter A. Buhr
    11 %% Created On       : Wed Apr  6 14:52:25 2016
    12 %% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sat Apr  9 10:19:12 2016
    14 %% Update Count     : 8
    15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    16 
    171% requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
    182
     
    215
    226% Latex packages used in the document.
     7
    238\usepackage{fullpage,times}
    249\usepackage{xspace}
     
    2611\usepackage{listings}
    2712\usepackage{comment}
    28 \usepackage{latexsym}                                   % \Box
    29 \usepackage{mathptmx}                                   % better math font with "times"
     13\usepackage{latexsym}                                   % \Box
     14\usepackage{mathptmx}                                   % better math font with "times"
    3015\usepackage[pagewise]{lineno}
    3116\renewcommand{\linenumberfont}{\scriptsize\sffamily}
    3217\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
    3318\usepackage{breakurl}
    34 \renewcommand{\UrlFont}{\small\sf}
     19\urlstyle{sf}
    3520
    3621%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    3722
     23% Names used in the document.
     24
     25\newcommand{\CFA}{Cforall\xspace}               % set language text name
     26\newcommand{\CFAA}{C$\forall$\xspace}   % set language symbolic name
     27\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
     28\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
     29
     30%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     31
    3832% Bespoke macros used in the document.
    39 \input{common}
    40 
    41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    42 
    43 \setcounter{secnumdepth}{3}                             % number subsubsections
    44 \setcounter{tocdepth}{3}                                % subsubsections in table of contents
     33
     34\makeatletter
     35% index macros
     36\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
     37\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
     38\newcommand{\see}[1]{\emph{see} #1}
     39
     40% Define some commands that produce formatted index entries suitable for cross-references.
     41% ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
     42% implementations, and ``\use'' for their uses.
     43
     44%  \newcommand{\bold}[1]{{\bf #1}}
     45%  \def\spec{\@bsphack\begingroup
     46%             \def\protect##1{\string##1\space}\@sanitize
     47%             \@wrxref{|bold}}
     48\def\impl{\@bsphack\begingroup
     49          \def\protect##1{\string##1\space}\@sanitize
     50          \@wrxref{|definition}}
     51\newcommand{\indexcode}[1]{{\lstinline$#1$}}
     52\def\use{\@bsphack\begingroup
     53         \def\protect##1{\string##1\space}\@sanitize
     54         \@wrxref{|hyperpage}}
     55\def\@wrxref#1#2{\let\thepage\relax
     56    \xdef\@gtempa{\write\@indexfile{\string
     57    \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
     58    \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
     59%\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
     60%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
     61
     62% text inline and lowercase index: \Index{Inline and index text}
     63% text inline and as-in index: \Index{Inline and Index text}
     64% text inline but index with different as-is text: \Index[index text]{inline text}
     65\newcommand{\Index}{\@ifstar\@sIndex\@Index}
     66\newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
     67\newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
     68\makeatother
     69
     70% blocks and titles
     71\newcommand{\define}[1]{\emph{#1\/}\index{#1}}
     72\newenvironment{rationale}{%
     73  \begin{quotation}\noindent$\Box$\enspace
     74}{%
     75  \hfill\enspace$\Box$\end{quotation}
     76}%
     77\newcommand{\rewrite}{\(\Rightarrow\)}
     78\newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
     79\newcommand{\examples}{\paragraph{Examples}~\par\noindent}
     80\newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
     81\newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
     82\newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
     83
     84% BNF macros
     85\def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
     86\let\endsyntax=\endtrivlist
     87\newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
     88\newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
     89\newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
     90\newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
     91\newcommand{\opt}{$_{opt}$\ }
     92
     93% adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
     94% \VRef{label} => Section 2.7, \VPageref{label} => page 17
     95% \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
     96\renewcommand{\reftextfaceafter}{\unskip}
     97\renewcommand{\reftextfacebefore}{\unskip}
     98\renewcommand{\reftextafter}{\unskip}
     99\renewcommand{\reftextbefore}{\unskip}
     100\renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
     101\renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
     102\newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
     103\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
     104
     105% adjust listings macros
     106\lstdefinelanguage{CFA}[ANSI]{C}%
     107{morekeywords={asm,_Alignas,_Alignof,_At,_Atomic,_Bool,catch,catchResume,choose,_Complex,context,disable,dtype,enable,
     108        fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,lvalue,_Noreturn,restrict,_Static_assert,
     109        _Thread_local,throw,throwResume,try,type,},
     110}%
     111
     112\lstset{
     113language=CFA,
     114columns=flexible,
     115basicstyle=\sf\small,
     116tabsize=4,
     117xleftmargin=\parindent,
     118escapechar=@,
     119keepspaces=true,
     120%showtabs=true,
     121%tab=\rightarrowfill,
     122}%
     123
     124\makeatletter
     125% replace/adjust listings characters that look bad in sanserif
     126\lst@CCPutMacro
     127\lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{{\ttfamily\upshape -}}} % replace minus
     128\lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
     129\lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
     130\lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
     131\lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
     132\lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
     133%\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
     134\@empty\z@\@empty
     135\makeatother
     136
     137\setcounter{secnumdepth}{3}     % number subsubsections
     138\setcounter{tocdepth}{3}                % subsubsections in table of contents
    45139\makeindex
    46140
     
    49143\begin{document}
    50144\pagestyle{headings}
    51 \linenumbers                                            % comment out to turn off line numbering
    52 
    53 \title{\Huge
    54 \vspace*{1in}
    55 \CFA (\CFL) Reference Manual and Rationale
    56 }% title
    57 \author{\huge
    58 Glen Ditchfield and Peter A. Buhr
    59 }% author
    60 \date{
    61 DRAFT\\\today
    62 }% date
     145\linenumbers                                    % comment out to turn off line numbering
     146
     147\title{\CFA (\CFAA) Reference Manual and Rationale}
     148\author{Glen Ditchfield \and Peter A. Buhr}
     149\date{DRAFT\\\today}
    63150
    64151\pagenumbering{roman}
     
    72159\copyright\,2015 Glen Ditchfield \\ \\
    73160\noindent
    74 This work is licensed under the Creative Commons Attribution 4.0 International License.
    75 To view a copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
     161This work is licensed under the Creative Commons Attribution 4.0 International License. To view a
     162copy of this license, visit {\small\url{http://creativecommons.org/licenses/by/4.0}}.
    76163\vspace*{1in}
    77164
     
    86173\chapter*{Introduction}\addcontentsline{toc}{chapter}{Introduction}
    87174
    88 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language.
    89 It makes frequent reference to the {\c11} standard \cite{C11}, and occasionally compares \CFA to {\CC} \cite{C++}.
    90 
    91 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs).
    92 Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the {\c11} standard.
    93 For a simple introduction to \CFA, see the companion document ``An Overview of \CFA''
     175This document is a reference manual and rationale for \CFA, a polymorphic extension of the C
     176programming language. It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and
     177occasionally compares \CFA to {\CC} \cite{c++}.
     178
     179The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering
     180differs). Unfortunately, this means the manual contains more ``forward references'' than usual,
     181making it harder to follow if the reader does not have a copy of the {\c11} standard. For a simple
     182introduction to \CFA, see the companion document ``An Overview of \CFA''
    94183\cite{Ditchfield96:Overview}.
    95184
    96185\begin{rationale}
    97 Commentary (like this) is quoted with quads.
    98 Commentary usually deals with subtle points, the rationale behind a rule, and design decisions.
     186Commentary (like this) is quoted with quads. Commentary usually deals with subtle points, the
     187rationale behind a rule, and design decisions.
    99188\end{rationale}
    100189
     
    105194\chapter{Terms, definitions, and symbols}
    106195
    107 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11} standard.
     196Terms from the {\c11} standard used in this document have the same meaning as in the {\c11}
     197standard.
    108198
    109199% No ``Conformance'' or ``Environment'' chapters yet.
     
    115205
    116206\section{Notation}
    117 The syntax notation used in this document is the same as in the {\c11} standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
     207The syntax notation used in this document is the same as in the {\c11} standard, with one exception:
     208ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that
     209these rules extend a previous definition, which occurs in this document or in the {\c11} standard.
    118210
    119211
     
    123215\subsection{Scopes of identifiers}\index{scopes}
    124216
    125 \CFA's scope rules differ from C's in one major respect: a declaration of an identifier may overload\index{overloading} outer declarations of lexically identical identifiers in the same
    126 \Index{name space}, instead of hiding them.
    127 The outer declaration is hidden if the two declarations have \Index{compatible type}, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
     217\CFA's scope rules differ from C's in one major respect: a declaration of an identifier may
     218overload\index{overloading} outer declarations of lexically identical identifiers in the same
     219\Index{name space}, instead of hiding them. The outer declaration is hidden if the two declarations
     220have \Index{compatible type}, or if one declares an array type and the other declares a pointer type
     221and the element type and pointed-at type are compatible, or if one has function type and the other
     222is a pointer to a compatible function type, or if one declaration is a \lstinline$type$\use{type} or
    128223\lstinline$typedef$\use{typedef} declaration and the other is not.  The outer declaration becomes
    129224\Index{visible} when the scope of the inner declaration terminates.
    130225\begin{rationale}
    131 Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same scope;
    132 a {\CC} program can not.
     226Hence, a \CFA program can declare an \lstinline$int v$ and a \lstinline$float v$ in the same
     227scope; a {\CC} program can not.
    133228\end{rationale}
    134229
     
    137232\index{linkage}
    138233
    139 \CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with external or internal linkage do not necessarily denote the same object or function.
    140 Instead, in the set of translation units and libraries that constitutes an entire program, any two instances of a particular identifier with \Index{external linkage} denote the same object or function if they have
    141 \Index{compatible type}s, or if one declares an array type and the other declares a pointer type and the element type and pointed-at type are compatible, or if one has function type and the other is a pointer to a compatible function type.
    142 Within one translation unit, each instance of an identifier with \Index{internal linkage} denotes the same object or function in the same circumstances.
     234\CFA's linkage rules differ from C's in only one respect: instances of a particular identifier with
     235external or internal linkage do not necessarily denote the same object or function. Instead, in the
     236set of translation units and libraries that constitutes an entire program, any two instances of a
     237particular identifier with \Index{external linkage} denote the same object or function if they have
     238\Index{compatible type}s, or if one declares an array type and the other declares a pointer type and
     239the element type and pointed-at type are compatible, or if one has function type and the other is a
     240pointer to a compatible function type. Within one translation unit, each instance of an identifier
     241with \Index{internal linkage} denotes the same object or function in the same circumstances.
    143242Identifiers with \Index{no linkage} always denote unique entities.
    144243\begin{rationale}
    145 A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$;
    146 a C program cannot.
     244A \CFA program can declare an \lstinline$extern int v$ and an \lstinline$extern float v$; a C
     245program cannot.
    147246\end{rationale}
    148247
     
    154253\subsubsection{Semantics}
    155254
    156 \CFA provides a capability for generic types;
    157 using this capability a single "generic type generator" can be written that can represent multiple concrete type instantiations by substitution of the "type parameters" of the generic type for concrete types.
    158 Syntactically a generic type generator is represented by putting a forall specifier on a struct or union declaration, as defined in \VRef{forall}.
    159 An instantiation of the generic type is written by specifying the type parameters in parentheses after the name of the generic type generator:
    160 \begin{lstlisting}
    161 forall( otype T | sumable( T ) ) struct pair {
     255\CFA provides a capability for generic types; using this capability a single "generic type
     256generator" can be written that can represent multiple concrete type instantiations by substitution
     257of the "type parameters" of the generic type for concrete types. Syntactically a generic type
     258generator is represented by putting a forall specifier on a struct or union declaration, as defined
     259in \VRef{forall}. An instantiation of the generic type is written by specifying the type parameters
     260in parentheses after the name of the generic type generator:
     261\begin{lstlisting}
     262forall( type T | sumable( T ) ) struct pair {
    162263        T x;
    163264        T y;
     
    166267\end{lstlisting}
    167268
    168 The type parameters in an instantiation of a generic type must satisfy any constraints in the forall specifier on the type generator declaration, e.g., \lstinline$sumable$.
    169 The instantiation then has the semantics that would result if the type parameters were substituted into the type generator declaration by macro substitution.
    170 
    171 Polymorphic 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:
    172 \begin{lstlisting}
    173 forall( otype T ) void swap( pair(T) *p ) {
     269The type parameters in an instantiation of a generic type must satisfy any constraints in the forall
     270specifier on the type generator declaration, e.g., \lstinline$sumable$. The instantiation then has
     271the semantics that would result if the type parameters were substituted into the type generator
     272declaration by macro substitution.
     273
     274Polymorphic functions may have generic types as parameters, and those generic types may use type
     275parameters of the polymorphic function as type parameters of the generic type:
     276\begin{lstlisting}
     277forall( type T ) void swap( pair(T) *p ) {
    174278        T z = p->x;
    175279        p->x = p->y;
     
    181285\subsubsection{Constraints}
    182286
    183 To avoid unduly constraining implementors, the generic type generator definition must be visible at any point where it is instantiated.
    184 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.
     287To avoid unduly constraining implementors, the generic type generator definition must be visible at
     288any point where it is instantiated.  Forward declarations of generic type generators are not
     289forbidden, but the definition must be visible to instantiate the generic type.  Equivalently,
     290instantiations of generic types are not allowed to be incomplete types.
    185291
    186292\examples
    187293\begin{lstlisting}
    188 forall( otype T ) struct A;
    189 
    190 forall( otype T ) struct B {
    191         A(T) *a;                        // legal, but cannot instantiate B(T)
     294forall( type T ) struct A;
     295
     296forall( type T ) struct B {
     297        A(T) *a;  // legal, but cannot instantiate B(T)
    192298};
    193299
    194 B(T) x;                                 // illegal, *x.a is of an incomplete generic type
    195  
    196 forall( otype T ) struct A {
     300B(T) x; // illegal, *x.a is of an incomplete generic type
     301
     302forall( type T ) struct A {
    197303        B( T ) *b;
    198304};
    199305
    200 B( T ) y;                               // legal, *x.a is now of a complete generic type
     306B( T ) y; // legal, *x.a is now of a complete generic type
     307
    201308
    202309// box.h:
    203         forall( otype T ) struct box;
    204         forall( otype T ) box( T ) *make_box( T );
    205         forall( otype T ) void use_box( box( T ) *b );
     310        forall( type T ) struct box;
     311        forall( type T ) box( T ) *make_box( T );
     312        forall( type T ) void use_box( box( T ) *b );
    206313       
    207314// main.c:
    208         box( int ) *b = make_box( 42 ); // illegal, definition of box not visible
    209         use_box( b );           // illegal
     315        box( int ) *b = make_box( 42 ); // illegal, def'n of box not visible
     316        use_box( b ); // illegal
    210317\end{lstlisting}
    211318
     
    213320\section{Conversions}
    214321\CFA defines situations where values of one type are automatically converted to another type.
    215 These conversions are called \define{implicit conversion}s.
    216 The programmer can request
     322These conversions are called \define{implicit conversion}s. The programmer can request
    217323\define{explicit conversion}s using cast expressions.
    218324
     
    224330\subsubsection{Safe arithmetic conversions}
    225331
    226 In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most binary arithmetic operators to convert the operands to a common type and determine the type of the operator's result.
    227 In \CFA, these conversions play a role in overload resolution, and collectively are called the \define{safe arithmetic conversion}s.
    228 
    229 Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$.
    230 Let \(unsigned_{mr}\) be the unsigned integer type with maximal rank.
     332In C, a pattern of conversions known as the \define{usual arithmetic conversion}s is used with most
     333binary arithmetic operators to convert the operands to a common type and determine the type of the
     334operator's result. In \CFA, these conversions play a role in overload resolution, and
     335collectively are called the \define{safe arithmetic conversion}s.
     336
     337Let \(int_r\) and \(unsigned_r\) be the signed and unsigned integer types with integer conversion
     338rank\index{integer conversion rank}\index{rank|see{integer conversion rank}} $r$. Let
     339\(unsigned_{mr}\) be the unsigned integer type with maximal rank.
    231340
    232341The following conversions are \emph{direct} safe arithmetic conversions.
     
    234343\item
    235344The \Index{integer promotion}s.
    236 \item
    237 For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\) to \(unsigned_r\).
    238 \item
    239 For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
     345
     346\item
     347For every rank $r$ greater than or equal to the rank of \lstinline$int$, conversion from \(int_r\)
     348to \(unsigned_r\).
     349
     350\item
     351For every rank $r$ greater than or equal to the rank of \lstinline$int$, where \(int_{r+1}\) exists
     352and can represent all values of \(unsigned_r\), conversion from \(unsigned_r\) to \(int_{r+1}\).
     353
    240354\item
    241355Conversion from \(unsigned_{mr}\) to \lstinline$float$.
     356
    242357\item
    243358Conversion from an enumerated type to its compatible integer type.
    244 \item
    245 Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to \lstinline$long double$.
    246 \item
    247 Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$, and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
     359
     360\item
     361Conversion from \lstinline$float$ to \lstinline$double$, and from \lstinline$double$ to
     362\lstinline$long double$.
     363
     364\item
     365Conversion from \lstinline$float _Complex$ to \lstinline$double _Complex$,
     366and from \lstinline$double _Complex$ to \lstinline$long double _Complex$.
     367
    248368\begin{sloppypar}
    249369\item
    250 Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from \lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the implementation supports imaginary types.
     370Conversion from \lstinline$float _Imaginary$ to \lstinline$double _Imaginary$, and from
     371\lstinline$double _Imaginary$ to \lstinline$long double$ \lstinline$_Imaginary$, if the
     372implementation supports imaginary types.
    251373\end{sloppypar}
    252374\end{itemize}
    253375
    254 If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic conversion.
    255 
    256 \begin{rationale}
    257 Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions.
     376If type \lstinline$T$ can be converted to type \lstinline$U$ by a safe direct arithmetic conversion
     377and type \lstinline$U$ can be converted to type \lstinline$V$ by a safe arithmetic conversion, then
     378the conversion from \lstinline$T$ to type \lstinline$V$ is an \emph{indirect} safe arithmetic
     379conversion.
     380
     381\begin{rationale}
     382Note that {\c11} does not include conversion from \Index{real type}s to \Index{complex type}s in the
     383usual arithmetic conversions, and \CFA does not include them as safe conversions.
    258384\end{rationale}
    259385
     
    267393
    268394If an expression's type is a pointer to a structure or union type that has a member that is an
    269 \Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's type.
    270 The result of the conversion is a pointer to the member.
     395\Index{anonymous structure} or an \Index{anonymous union}, it can be implicitly
     396converted\index{implicit conversion} to a pointer to the anonymous structure's or anonymous union's
     397type. The result of the conversion is a pointer to the member.
    271398
    272399\examples
     
    275402        int x, y;
    276403};
    277 void move_by( struct point * p1, struct point * p2 ) {@\impl{move_by}@
     404void move_by(struct point * p1, struct point * p2) {@\impl{move_by}@
    278405        p1->x += p2.x;
    279406        p1->y += p2.y;
    280407}
     408
    281409struct color_point {
    282410        enum { RED, BLUE, GREEN } color;
    283411        struct point;
    284412} cp1, cp2;
    285 move_to( &cp1, &cp2 );
     413move_to(&cp1, &cp2);
    286414\end{lstlisting}
    287415Thanks to implicit conversion, the two arguments that \lstinline$move_by()$ receives are pointers to
     
    290418
    291419\subsubsection{Specialization}
    292 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}.
    293 Any value that is legal for the inferred parameter may be used, including other inferred parameters.
    294 
    295 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.
    296 The assertion parameter is bound to that object or function.
    297 
    298 The 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.
     420A function or value whose type is polymorphic may be implicitly converted to one whose type is
     421\Index{less polymorphic} by binding values to one or more of its \Index{inferred parameter}. Any
     422value that is legal for the inferred parameter may be used, including other inferred parameters.
     423
     424If, after the inferred parameter binding, an \Index{assertion parameter} has no inferred parameters
     425in its type, then an object or function must be visible at the point of the specialization that has
     426the same identifier as the assertion parameter and has a type that is compatible\index{compatible
     427  type} with or can be specialized to the type of the assertion parameter.  The assertion parameter
     428is bound to that object or function.
     429
     430The type of the specialization is the type of the original with the bound inferred parameters and
     431the bound assertion parameters replaced by their bound values.
    299432
    300433\examples
    301434The type
    302435\begin{lstlisting}
    303 forall( otype T, otype U ) void (*)( T, U );
     436forall( type T, type U ) void (*)( T, U );
    304437\end{lstlisting}
    305438can be specialized to (among other things)
    306439\begin{lstlisting}
    307 forall( otype T ) void (*)( T, T );             // U bound to T
    308 forall( otype T ) void (*)( T, real );  // U bound to real
    309 forall( otype U ) void (*)( real, U );  // T bound to real
     440forall( type T ) void (*)( T, T );              // U bound to T
     441forall( type T ) void (*)( T, real );   // U bound to real
     442forall( type U ) void (*)( real, U );   // T bound to real
    310443void f( real, real );                                   // both bound to real
    311444\end{lstlisting}
     
    313446The type
    314447\begin{lstlisting}
    315 forall( otype T | T ?+?( T, T ) ) T (*)( T );
     448forall( type T | T ?+?( T, T )) T (*)( T );
    316449\end{lstlisting}
    317450can be specialized to (among other things)
    318451\begin{lstlisting}
    319 int (*)( int );         // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int )
     452int (*)( int );                                         // T bound to int, and T ?+?(T, T ) bound to int ?+?( int, int )
    320453\end{lstlisting}
    321454
     
    332465from a pointer to any non-\lstinline$void$ type to a pointer to \lstinline$void$;
    333466\item
    334 from a pointer to any type to a pointer to a more qualified version of the type\index{qualified type};
    335 \item
    336 from a pointer to a structure or union type to a pointer to the type of a member of the structure or union that is an \Index{anonymous structure} or an \Index{anonymous union};
    337 \item
    338 within the scope of an initialized \Index{type declaration}, conversions between a type and its implementation or between a pointer to a type and a pointer to its implementation.
     467from a pointer to any type to a pointer to a more qualified version of the type\index{qualified
     468type};
     469\item
     470from a pointer to a structure or union type to a pointer to the type of a member of the structure or
     471union that is an \Index{anonymous structure} or an \Index{anonymous union};
     472\item
     473within the scope of an initialized \Index{type declaration}, conversions between a type and its
     474implementation or between a pointer to a type and a pointer to its implementation.
    339475\end{itemize}
    340476
    341477Conversions that are not safe conversions are \define{unsafe conversion}s.
    342478\begin{rationale}
    343 As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type.
    344 This is clearly dangerous, and {\CC} does not have this implicit conversion.
    345 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a superset of C as possible, but discourages it by making it unsafe.
     479As in C, there is an implicit conversion from \lstinline$void *$ to any pointer type. This is
     480clearly dangerous, and {\CC} does not have this implicit conversion.
     481\CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a
     482superset of C as possible, but discourages it by making it unsafe.
    346483\end{rationale}
    347484
     
    349486\subsection{Conversion cost}
    350487
    351 The \define{conversion cost} of a safe\index{safe conversion} conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion costs.} is a measure of how desirable or undesirable it is.
    352 It is defined as follows.
     488The \define{conversion cost} of a safe\index{safe conversion}
     489conversion\footnote{Unsafe\index{unsafe conversion} conversions do not have defined conversion
     490costs.} is a measure of how desirable or undesirable it is. It is defined as follows.
    353491\begin{itemize}
    354492\item
     
    359497
    360498\item
    361 The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions needed to make up the conversion.
     499The cost of an indirect safe arithmetic conversion is the smallest number of direct conversions
     500needed to make up the conversion.
    362501\end{itemize}
    363502
     
    367506\begin{itemize}
    368507\item
    369 The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1.
    370 The cost of an implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and then to \lstinline$double$.
    371 
    372 \item
    373 If \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:
    374 \lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$.
    375 Otherwise, \lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
    376 
    377 \item
    378 If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost of \lstinline$unsigned$ to \lstinline$long$ is 1.
    379 Otherwise, the conversion is an unsafe conversion, and its conversion cost is undefined.
     508The cost of an implicit conversion from \lstinline$int$ to \lstinline$long$ is 1. The cost of an
     509implicit conversion from \lstinline$long$ to \lstinline$double$ is 3, because it is defined in terms
     510of conversions from \lstinline$long$ to \lstinline$unsigned long$, then to \lstinline$float$, and
     511then to \lstinline$double$.
     512
     513\item
     514If \lstinline$int$ can represent all the values of \lstinline$unsigned short$, then the cost of an
     515implicit conversion from \lstinline$unsigned short$ to \lstinline$unsigned$ is 2:
     516\lstinline$unsigned short$ to \lstinline$int$ to \lstinline$unsigned$. Otherwise,
     517\lstinline$unsigned short$ is converted directly to \lstinline$unsigned$, and the cost is 1.
     518
     519\item
     520If \lstinline$long$ can represent all the values of \lstinline$unsigned$, then the conversion cost
     521of \lstinline$unsigned$ to \lstinline$long$ is 1. Otherwise, the conversion is an unsafe
     522conversion, and its conversion cost is undefined.
    380523\end{itemize}
    381524
     
    386529        \rhs \lstinline$forall$
    387530        \rhs \lstinline$lvalue$
    388         \rhs \lstinline$trait$
     531        \rhs \lstinline$context$
    389532        \rhs \lstinline$dtype$
    390533        \rhs \lstinline$ftype$
     
    395538\subsection{Identifiers}
    396539
    397 \CFA allows operator \Index{overloading} by associating operators with special function identifiers.
    398 Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them as overloadable identifiers.
    399 Programmers can use these identifiers to declare functions and objects that implement operators and constants for their own types.
     540\CFA allows operator \Index{overloading} by associating operators with special function
     541identifiers. Furthermore, the constants ``\lstinline$0$'' and ``\lstinline$1$'' have special status
     542for many of C's data types (and for many programmer-defined data types as well), so \CFA treats them
     543as overloadable identifiers. Programmers can use these identifiers to declare functions and objects
     544that implement operators and constants for their own types.
    400545
    401546
     
    409554\end{syntax}
    410555
    411 \index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0} and ``\lstinline$1$''\impl{1} are identifiers.
    412 No other tokens defined by the rules for integer constants are considered to be identifiers.
    413 \begin{rationale}
    414 Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C.
    415 All scalar types can be incremented and decremented, which is defined in terms of adding or subtracting 1.
    416 The operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any scalar arguments, and are defined in terms of comparison against 0.
    417 A \nonterm{constant-expression} that evaluates to 0 is effectively compatible with every pointer type.
    418 
    419 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.
    420 However, 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.
    421 Defining special constants for a user-defined type is more efficient than defining a conversion to the type from \lstinline$_Bool$.
    422 
    423 Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers have special status in C.
    424 A facility that let programmers declare specific constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
    425 Some facility for defining the creation of values of programmer-defined types from arbitrary integer tokens would be needed.
    426 The complexity of such a feature doesn't seem worth the gain.
     556\index{constant identifiers}\index{identifiers!for constants} The tokens ``\lstinline$0$''\impl{0}
     557and ``\lstinline$1$''\impl{1} are identifiers. No other tokens defined by the rules for integer
     558constants are considered to be identifiers.
     559\begin{rationale}
     560Why ``\lstinline$0$'' and ``\lstinline$1$''? Those integers have special status in C. All scalar
     561types can be incremented and decremented, which is defined in terms of adding or subtracting 1. The
     562operations ``\lstinline$&&$'', ``\lstinline$||$'', and ``\lstinline$!$'' can be applied to any
     563scalar arguments, and are defined in terms of comparison against 0. A \nonterm{constant-expression}
     564that evaluates to 0 is effectively compatible with every pointer type.
     565
     566In C, the integer constants 0 and 1 suffice because the integer promotion rules can convert them to
     567any arithmetic type, and the rules for pointer expressions treat constant expressions evaluating to
     5680 as a special case. However, user-defined arithmetic types often need the equivalent of a 1 or 0
     569for their functions or operators, polymorphic functions often need 0 and 1 constants of a type
     570matching their polymorphic parameters, and user-defined pointer-like types may need a null value.
     571Defining special constants for a user-defined type is more efficient than defining a conversion to
     572the type from \lstinline$_Bool$.
     573
     574Why \emph{just} ``\lstinline$0$'' and ``\lstinline$1$''? Why not other integers? No other integers
     575have special status in C. A facility that let programmers declare specific
     576constants---``\lstinline$const Rational 12$'', for instance---would not be much of an improvement.
     577Some facility for defining the creation of values of programmer-defined types from arbitrary integer
     578tokens would be needed. The complexity of such a feature doesn't seem worth the gain.
    427579\end{rationale}
    428580
     
    430582\subsubsection{Operator identifiers}
    431583
    432 \index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the programmer-definable operator identifiers and the operations they are associated with.
    433 Functions that are declared with (or pointed at by function pointers that are declared with) these identifiers can be called by expressions that use the operator tokens and syntax, or the operator identifiers and ``function call'' syntax.
    434 The relationships between operators and function calls are discussed in descriptions of the operators.
     584\index{operator identifiers}\index{identifiers!for operators} Table \ref{opids} lists the
     585programmer-definable operator identifiers and the operations they are associated with. Functions
     586that are declared with (or pointed at by function pointers that are declared with) these identifiers
     587can be called by expressions that use the operator tokens and syntax, or the operator identifiers
     588and ``function call'' syntax. The relationships between operators and function calls are discussed
     589in descriptions of the operators.
    435590
    436591\begin{table}[hbt]
     
    489644
    490645\begin{rationale}
    491 Operator identifiers are made up of the characters of the operator token, with question marks added to mark the positions of the arguments of operators.
    492 The question marks serve as mnemonic devices;
    493 programmers can not create new operators by arbitrarily mixing question marks and other non-alphabetic characters.
    494 Note that prefix and postfix versions of the increment and decrement operators are distinguished by the position of the question mark.
    495 \end{rationale}
    496 
    497 \begin{rationale}
    498 The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
    499 \CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
     646Operator identifiers are made up of the characters of the operator token, with question marks added
     647to mark the positions of the arguments of operators. The question marks serve as mnemonic devices;
     648programmers can not create new operators by arbitrarily mixing question marks and other
     649non-alphabetic characters. Note that prefix and postfix versions of the increment and decrement
     650operators are distinguished by the position of the question mark.
     651\end{rationale}
     652
     653\begin{rationale}
     654The use of ``\lstinline$?$'' in identifiers means that some C programs are not \CFA programs.  For
     655instance, the sequence of characters ``\lstinline$(i < 0)?--i:i$'' is legal in a C program, but a
     656\CFA compiler detects a syntax error because it treats ``\lstinline$?--$'' as an identifier, not
     657as the two tokens ``\lstinline$?$'' and ``\lstinline$--$''.
    500658\end{rationale}
    501659
     
    505663\item
    506664The logical operators ``\lstinline$&&$'' and ``\lstinline$||$'', and the conditional operator
    507 ``\lstinline$?:$''.
    508 These operators do not always evaluate their operands, and hence can not be properly defined by functions unless some mechanism like call-by-name is added to the language.
    509 Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$'' for user-defined types is enough to allow them to be used in logical expressions.
    510 
    511 \item
    512 The comma operator\index{comma expression}.
    513 It is a control-flow operator like those above.
     665``\lstinline$?:$''. These operators do not always evaluate their operands, and hence can not be
     666properly defined by functions unless some mechanism like call-by-name is added to the language.
     667Note that the definitions of ``\lstinline$&&$'' and ``\lstinline$||$'' say that they work by
     668checking that their arguments are unequal to 0, so defining ``\lstinline$!=$'' and ``\lstinline$0$''
     669for user-defined types is enough to allow them to be used in logical expressions.
     670
     671\item
     672The comma operator\index{comma expression}. It is a control-flow operator like those above.
    514673Changing its meaning seems pointless and confusing.
    515674
    516675\item
    517 The ``address of'' operator.
    518 It would seem useful to define a unary ``\lstinline$&$'' operator that returns values of some programmer-defined pointer-like type.
    519 The problem lies with the type of the operator.
    520 Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
    521 \lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$.
    522 The expression might be treated as a call to the unary function ``\lstinline$&?$''.
    523 Now what is the type of the function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by value, and there is no way to create a useful pointer-like result from a value.
    524 Hence the parameter must have type \lstinline$T *$.
    525 But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
     676The ``address of'' operator. It would seem useful to define a unary ``\lstinline$&$'' operator that
     677returns values of some programmer-defined pointer-like type. The problem lies with the type of the
     678operator. Consider the expression ``\lstinline$p = &x$'', where \lstinline$x$ is of type
     679\lstinline$T$ and \lstinline$p$ has the programmer-defined type \lstinline$T_ptr$. The expression
     680might be treated as a call to the unary function ``\lstinline$&?$''. Now what is the type of the
     681function's parameter? It can not be \lstinline$T$, because then \lstinline$x$ would be passed by
     682value, and there is no way to create a useful pointer-like result from a value. Hence the parameter
     683must have type \lstinline$T *$. But then the expression must be rewritten as ``\lstinline$p = &?( &x )$''
    526684---which doesn't seem like progress!
    527685
    528 The rule for address-of expressions would have to be something like ``keep applying address-of functions until you get one that takes a pointer argument, then use the built-in operator and stop''.
    529 It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
    530 
    531 \item
    532 The \lstinline$sizeof$ operator.
    533 It is already defined for every object type, and intimately tied into the language's storage allocation model.
    534 Redefining it seems pointless.
    535 
    536 \item
    537 The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''.
    538 These are not really infix operators, since their right ``operand'' is not a value or object.
    539 
    540 \item
    541 Cast operators\index{cast expression}.
    542 Anything that can be done with an explicit cast can be done with a function call.
    543 The difference in syntax is small.
     686The rule for address-of expressions would have to be something like ``keep applying address-of
     687functions until you get one that takes a pointer argument, then use the built-in operator and
     688stop''. It seems simpler to define a conversion function from \lstinline$T *$ to \lstinline$T_ptr$.
     689
     690\item
     691The \lstinline$sizeof$ operator. It is already defined for every object type, and intimately tied
     692into the language's storage allocation model. Redefining it seems pointless.
     693
     694\item
     695The ``member of'' operators ``\lstinline$.$'' and ``\lstinline$->$''. These are not really infix
     696operators, since their right ``operand'' is not a value or object.
     697
     698\item
     699Cast operators\index{cast expression}. Anything that can be done with an explicit cast can be done
     700with a function call. The difference in syntax is small.
    544701\end{itemize}
    545702\end{rationale}
     
    548705\section{Expressions}
    549706
    550 \CFA allows operators and identifiers to be overloaded.
    551 Hence, each expression can have a number of \define{interpretation}s, each of which has a different type.
    552 The interpretations that are potentially executable are called \define{valid interpretation}s.
    553 The set of interpretations depends on the kind of expression and on the interpretations of the subexpressions that it contains.
    554 The rules for determining the valid interpretations of an expression are discussed below for each kind of expression.
    555 Eventually the context of the outermost expression chooses one interpretation of that expression.
    556 
    557 An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or function denoted by every identifier in the expression.
    558 An expression can have some interpretations that are ambiguous and others that are unambiguous.
    559 An expression that is chosen to be executed shall not be ambiguous.
    560 
    561 The \define{best valid interpretations} are the valid interpretations that use the fewest unsafe\index{unsafe conversion} conversions.
    562 Of these, the best are those where the functions and objects involved are the least polymorphic\index{less polymorphic}.
    563 Of these, the best have the lowest total \Index{conversion cost}, including all implicit conversions in the argument expressions.
    564 Of these, the best have the highest total conversion cost for the implicit conversions
    565 (if any) applied to the argument expressions.
    566 If there is no single best valid interpretation, or if the best valid interpretation is ambiguous, then the resulting interpretation is ambiguous\index{ambiguous interpretation}.
    567 
    568 \begin{rationale}
    569 \CFA's rules for selecting the best interpretation are designed to allow overload resolution to mimic C's operator semantics.
    570 In C, the ``usual arithmetic conversions'' are applied to the operands of binary operators if necessary to convert the operands to types with a common real type.
    571 In \CFA, those conversions are ``safe''.
    572 The ``fewest unsafe conversions'' rule ensures that the usual conversions are done, if possible.
    573 The ``lowest total expression cost'' rule chooses the proper common type.
    574 The odd-looking ``highest argument conversion cost'' rule ensures that, when unary expressions must be converted, conversions of function results are preferred to conversion of function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
    575 
    576 The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such functions are presumably more expensive than monomorphic functions and since the more specific function is presumably more appropriate.
    577 It also gives preference to monomorphic values (such as the
     707\CFA allows operators and identifiers to be overloaded. Hence, each expression can have a number
     708of \define{interpretation}s, each of which has a different type. The interpretations that are
     709potentially executable are called \define{valid interpretation}s. The set of interpretations
     710depends on the kind of expression and on the interpretations of the subexpressions that it contains.
     711The rules for determining the valid interpretations of an expression are discussed below for each
     712kind of expression. Eventually the context of the outermost expression chooses one interpretation
     713of that expression.
     714
     715An \define{ambiguous interpretation} is an interpretation which does not specify the exact object or
     716function denoted by every identifier in the expression. An expression can have some interpretations
     717that are ambiguous and others that are unambiguous. An expression that is chosen to be executed
     718shall not be ambiguous.
     719
     720The \define{best valid interpretations} are the valid interpretations that use the fewest
     721unsafe\index{unsafe conversion} conversions. Of these, the best are those where the functions and
     722objects involved are the least polymorphic\index{less polymorphic}. Of these, the best have the
     723lowest total \Index{conversion cost}, including all implicit conversions in the argument
     724expressions. Of these, the best have the highest total conversion cost for the implicit conversions
     725(if any) applied to the argument expressions. If there is no single best valid interpretation, or if
     726the best valid interpretation is ambiguous, then the resulting interpretation is
     727ambiguous\index{ambiguous interpretation}.
     728
     729\begin{rationale}
     730\CFA's rules for selecting the best interpretation are designed to allow overload resolution to
     731mimic C's operator semantics. In C, the ``usual arithmetic conversions'' are applied to the
     732operands of binary operators if necessary to convert the operands to types with a common real type.
     733In \CFA, those conversions are ``safe''. The ``fewest unsafe conversions'' rule ensures that the
     734usual conversions are done, if possible. The ``lowest total expression cost'' rule chooses the
     735proper common type. The odd-looking ``highest argument conversion cost'' rule ensures that, when
     736unary expressions must be converted, conversions of function results are preferred to conversion of
     737function arguments: \lstinline$(double)-i$ will be preferred to \lstinline$-(double)i$.
     738
     739The ``least polymorphic'' rule reduces the number of polymorphic function calls, since such
     740functions are presumably more expensive than monomorphic functions and since the more specific
     741function is presumably more appropriate. It also gives preference to monomorphic values (such as the
    578742\lstinline$int$ \lstinline$0$) over polymorphic values (such as the \Index{null pointer}
    579 \lstinline$0$\use{0}).
    580 However, interpretations that call polymorphic functions are preferred to interpretations that perform unsafe conversions, because those conversions potentially lose accuracy or violate strong typing.
     743\lstinline$0$\use{0}). However, interpretations that call polymorphic functions are preferred to
     744interpretations that perform unsafe conversions, because those conversions potentially lose accuracy
     745or violate strong typing.
    581746
    582747There are two notable differences between \CFA's overload resolution rules and the rules for
    583 {\CC} defined in \cite{C++}.
    584 First, the result type of a function plays a role.
    585 In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.
    586 In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them.
    587 Second, safe conversions are used to choose among interpretations of all sorts of functions;
    588 in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators.
    589 \end{rationale}
    590 
    591 Expressions involving certain operators\index{operator identifiers} are considered to be equivalent to function calls.
    592 A transformation from ``operator'' syntax to ``function call'' syntax is defined by \define{rewrite rules}.
    593 Each operator has a set of predefined functions that overload its identifier.
    594 Overload resolution determines which member of the set is executed in a given expression.
    595 The functions have \Index{internal linkage} and are implicitly declared with \Index{file scope}.
    596 The predefined functions and rewrite rules are discussed below for each of these operators.
    597 \begin{rationale}
    598 Predefined functions and constants have internal linkage because that simplifies optimization in traditional compile-and-link environments.
    599 For instance, ``\lstinline$an_int + an_int$'' is equivalent to ``\lstinline$?+?(an_int, an_int)$''.
    600 If integer addition has not been redefined in the current scope, a compiler can generate code to perform the addition directly.
    601 If predefined functions had external linkage, this optimization would be difficult.
    602 \end{rationale}
    603 
    604 \begin{rationale}
    605 Since each subsection describes the interpretations of an expression in terms of the interpretations of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that uses one bottom-up pass over an expression tree.
    606 Such an algorithm was first described (for Ada) by Baker~\cite{Bak:overload}.
    607 It is extended here to handle polymorphic functions and arithmetic conversions.
    608 The overload resolution rules and the predefined functions have been chosen so that, in programs that do not introduce overloaded declarations, expressions will have the same meaning in C and in \CFA.
    609 \end{rationale}
    610 
    611 \begin{rationale}
    612 Expression syntax is quoted from the {\c11} standard.
    613 The syntax itself defines the precedence and associativity of operators.
    614 The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence.
     748{\CC} defined in \cite{c++}. First, the result type of a function plays a role. In {\CC}, a
     749function call must be completely resolved based on the arguments to the call in most circumstances.
     750In \CFA, a function call may have several interpretations, each with a different result type, and
     751the interpretations of the containing context choose among them. Second, safe conversions are used
     752to choose among interpretations of all sorts of functions; in {\CC}, the ``usual arithmetic
     753conversions'' are a separate set of rules that apply only to the built-in operators.
     754\end{rationale}
     755
     756Expressions involving certain operators\index{operator identifiers} are considered to be equivalent
     757to function calls. A transformation from ``operator'' syntax to ``function call'' syntax is defined
     758by \define{rewrite rules}. Each operator has a set of predefined functions that overload its
     759identifier. Overload resolution determines which member of the set is executed in a given
     760expression. The functions have \Index{internal linkage} and are implicitly declared with \Index{file
     761scope}. The predefined functions and rewrite rules are discussed below for each of these
     762operators.
     763\begin{rationale}
     764Predefined functions and constants have internal linkage because that simplifies optimization in
     765traditional compile-and-link environments. For instance, ``\lstinline$an_int + an_int$'' is
     766equivalent to ``\lstinline$?+?(an_int, an_int)$''. If integer addition has not been redefined in
     767the current scope, a compiler can generate code to perform the addition directly. If predefined
     768functions had external linkage, this optimization would be difficult.
     769\end{rationale}
     770
     771\begin{rationale}
     772Since each subsection describes the interpretations of an expression in terms of the interpretations
     773of its subexpressions, this chapter can be taken as describing an overload resolution algorithm that
     774uses one bottom-up pass over an expression tree. Such an algorithm was first described (for Ada) by
     775Baker~\cite{Bak:overload}. It is extended here to handle polymorphic functions and arithmetic
     776conversions. The overload resolution rules and the predefined functions have been chosen so that, in
     777programs that do not introduce overloaded declarations, expressions will have the same meaning in C
     778and in \CFA.
     779\end{rationale}
     780
     781\begin{rationale}
     782Expression syntax is quoted from the {\c11} standard. The syntax itself defines the precedence and
     783associativity of operators. The sections are arranged in decreasing order of precedence, with all
     784operators in a section having the same precedence.
    615785\end{rationale}
    616786
     
    631801const int 1;@\use{1}@
    632802const int 0;@\use{0}@
    633 forall( dtype DT ) DT * const 0;
    634 forall( ftype FT ) FT * const 0;
     803forall( dtype DT ) DT *const 0;
     804forall( ftype FT ) FT *const 0;
    635805\end{lstlisting}
    636806
    637807\semantics
    638 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier.
    639 
    640 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}.
    641 The predefined integer identifiers ``\lstinline$1$'' and ``\lstinline$0$'' have the integer values 1 and 0, respectively.
    642 The other two predefined ``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when specialized\index{specialization} with a data type or function type respectively, produce a null pointer of that type.
     808The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible}
     809declarations of the identifier.
     810
     811A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type
     812and value defined by {\c11}. The predefined integer identifiers ``\lstinline$1$'' and
     813``\lstinline$0$'' have the integer values 1 and 0, respectively. The other two predefined
     814``\lstinline$0$'' identifiers are bound to polymorphic pointer values that, when
     815specialized\index{specialization} with a data type or function type respectively, produce a null
     816pointer of that type.
    643817
    644818A parenthesised expression has the same interpretations as the contained \nonterm{expression}.
    645819
    646820\examples
    647 The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe conversion from \lstinline$void *$ to \lstinline$const void *$.
    648 In each case, the null pointer conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
     821The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null
     822pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe
     823conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer
     824conversion is better\index{best valid interpretations} than the unsafe conversion of the integer
    649825\lstinline$0$ to a pointer.
    650826
     
    652828Note that the predefined identifiers have addresses.
    653829
    654 \CFA does not have C's concept of ``null pointer constants'', which are not typed values but special strings of tokens.
    655 The C token ``\lstinline$0$'' is an expression of type \lstinline$int$ with the value ``zero'', and it \emph{also} is a null pointer constant.
    656 Similarly,
    657 ``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer, and it also is a null pointer constant.
    658 However, in C, ``\lstinline$(void *)(void *)0$'' is
    659 \emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The semantics of C expressions contain many special cases to deal with subexpressions that are null pointer constants.
    660 
    661 \CFA handles these cases through overload resolution.
    662 The declaration
    663 \begin{lstlisting}
    664 forall( dtype DT ) DT * const 0;
    665 \end{lstlisting} means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any} pointer-to-object type or pointer-to-incomplete type.
    666 The only such value is the null pointer.
    667 Therefore the type \emph{alone} is enough to identify a null pointer.
    668 Where C defines an operator with a special case for the null pointer constant, \CFA defines predefined functions with a polymorphic object parameter.
     830\CFA does not have C's concept of ``null pointer constants'', which are not typed values but
     831special strings of tokens. The C token ``\lstinline$0$'' is an expression of type \lstinline$int$
     832with the value ``zero'', and it \emph{also} is a null pointer constant. Similarly,
     833``\lstinline$(void *)0$ is an expression of type \lstinline$(void *)$ whose value is a null pointer,
     834and it also is a null pointer constant. However, in C, ``\lstinline$(void *)(void *)0$'' is
     835\emph{not} a null pointer constant, even though it is null-valued, a pointer, and constant! The
     836semantics of C expressions contain many special cases to deal with subexpressions that are null
     837pointer constants.
     838
     839\CFA handles these cases through overload resolution. The declaration
     840\begin{lstlisting}
     841forall( dtype DT ) DT *const 0;
     842\end{lstlisting}
     843means that \lstinline$0$ is a polymorphic object, and contains a value that can have \emph{any}
     844pointer-to-object type or pointer-to-incomplete type. The only such value is the null pointer.
     845Therefore the type \emph{alone} is enough to identify a null pointer. Where C defines an operator
     846with a special case for the null pointer constant, \CFA defines predefined functions with a
     847polymorphic object parameter.
    669848\end{rationale}
    670849
     
    672851\subsubsection{Generic selection}
    673852
    674 \constraints The best interpretation of the controlling expression shall be unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the types named in its generic association list.
    675 If a generic selection has no \lstinline$default$ generic association, the best interpretation of its controlling expression shall have type compatible with exactly one of the types named in its generic association list.
     853\constraints The best interpretation of the controlling expression shall be
     854unambiguous\index{ambiguous interpretation}, and shall have type compatible with at most one of the
     855types named in its generic association list. If a generic selection has no \lstinline$default$
     856generic association, the best interpretation of its controlling expression shall have type
     857compatible with exactly one of the types named in its generic association list.
    676858
    677859\semantics
     
    701883\rewriterules
    702884\begin{lstlisting}
    703 a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type@\use{?[?]}@
     885a[b] @\rewrite@ ?[?]( b, a ) // if a has integer type */@\use{?[?]}@
    704886a[b] @\rewrite@ ?[?]( a, b ) // otherwise
    705 a( @\emph{arguments}@ ) @\rewrite@ ?()( a, @\emph{arguments}@ )@\use{?()}@
     887a( ${\em arguments }$ ) @\rewrite@ ?()( a, ${\em arguments} )$@\use{?()}@
    706888a++ @\rewrite@ ?++(&( a ))@\use{?++}@
    707889a-- @\rewrite@ ?--(&( a ))@\use{?--}@
     
    713895\predefined
    714896\begin{lstlisting}
    715 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
    716 forall( otype T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
    717 forall( otype T ) lvalue const T ?[?]( const T *, ptrdiff_t );
    718 forall( otype T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );
    719 forall( otype T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );
    720 forall( otype T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );
    721 forall( otype T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );
    722 forall( otype T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );
    723 forall( otype T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );
    724 forall( otype T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );
    725 forall( otype T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );
    726 forall( otype T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );
    727 forall( otype T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );
    728 forall( otype T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );
    729 forall( otype T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );
    730 forall( otype T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );
     897forall( type T ) lvalue T ?[?]( T *, ptrdiff_t );@\use{ptrdiff_t}@
     898forall( type T ) lvalue _Atomic T ?[?]( _Atomic T *, ptrdiff_t );
     899forall( type T ) lvalue const T ?[?]( const T *, ptrdiff_t );
     900forall( type T ) lvalue restrict T ?[?]( restrict T *, ptrdiff_t );
     901forall( type T ) lvalue volatile T ?[?]( volatile T *, ptrdiff_t );
     902forall( type T ) lvalue _Atomic const T ?[?]( _Atomic const T *, ptrdiff_t );
     903forall( type T ) lvalue _Atomic restrict T ?[?]( _Atomic restrict T *, ptrdiff_t );
     904forall( type T ) lvalue _Atomic volatile T ?[?]( _Atomic volatile T *, ptrdiff_t );
     905forall( type T ) lvalue const restrict T ?[?]( const restrict T *, ptrdiff_t );
     906forall( type T ) lvalue const volatile T ?[?]( const volatile T *, ptrdiff_t );
     907forall( type T ) lvalue restrict volatile T ?[?]( restrict volatile T *, ptrdiff_t );
     908forall( type T ) lvalue _Atomic const restrict T ?[?]( _Atomic const restrict T *, ptrdiff_t );
     909forall( type T ) lvalue _Atomic const volatile T ?[?]( _Atomic const volatile T *, ptrdiff_t );
     910forall( type T ) lvalue _Atomic restrict volatile T ?[?]( _Atomic restrict volatile T *, ptrdiff_t );
     911forall( type T ) lvalue const restrict volatile T ?[?]( const restrict volatile T *, ptrdiff_t );
     912forall( type T ) lvalue _Atomic const restrict volatile T ?[?]( _Atomic const restrict volatile T *, ptrdiff_t );
    731913\end{lstlisting}
    732914\semantics
    733 The interpretations of subscript expressions are the interpretations of the corresponding function call expressions.
     915The interpretations of subscript expressions are the interpretations of the corresponding function
     916call expressions.
    734917\begin{rationale}
    735918C defines subscripting as pointer arithmetic in a way that makes \lstinline$a[i]$ and
    736 \lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the number of overloadings of \lstinline$?[?]$.
    737 
    738 Subscript expressions are rewritten as function calls that pass the first parameter by value.
    739 This is somewhat unfortunate, since array-like types tend to be large.
    740 The alternative is to use the rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''.
    741 However, C semantics forbid this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which does not have an address.
     919\lstinline$i[a]$ equivalent. \CFA provides the equivalence through a rewrite rule to reduce the
     920number of overloadings of \lstinline$?[?]$.
     921
     922Subscript expressions are rewritten as function calls that pass the first parameter by value. This
     923is somewhat unfortunate, since array-like types tend to be large. The alternative is to use the
     924rewrite rule ``\lstinline$a[b]$ \rewrite \lstinline$?[?](&(a), b)$''. However, C semantics forbid
     925this approach: the \lstinline$a$ in ``\lstinline$a[b]$'' can be an arbitrary pointer value, which
     926does not have an address.
    742927
    743928The repetitive form of the predefined identifiers shows up a deficiency\index{deficiencies!pointers
    744  to qualified types} of \CFA's type system.
    745 Type qualifiers are not included in type values, so polymorphic functions that take pointers to arbitrary types often come in one flavor for each possible qualification of the pointed-at type.
     929 to qualified types} of \CFA's type system. Type qualifiers are not included in type values, so
     930polymorphic functions that take pointers to arbitrary types often come in one flavor for each
     931possible qualification of the pointed-at type.
    746932\end{rationale}
    747933
     
    750936
    751937\semantics
    752 A \define{function designator} is an interpretation of an expression that has function type.
    753 The
    754 \nonterm{postfix-expression} in a function call may have some interpretations that are function designators and some that are not.
    755 
    756 For those interpretations of the \nonterm{postfix-expression} that are not function designators, the expression is rewritten and becomes a call of a function named ``\lstinline$?()$''.
    757 The valid interpretations of the rewritten expression are determined in the manner described below.
    758 
    759 Each combination of function designators and argument interpretations is considered.
    760 For those interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function} designators, the combination has a \Index{valid interpretation} if the function designator accepts the number of arguments given, and each argument interpretation matches the corresponding explicit parameter:
     938A \define{function designator} is an interpretation of an expression that has function type. The
     939\nonterm{postfix-expression} in a function call may have some interpretations that are function
     940designators and some that are not.
     941
     942For those interpretations of the \nonterm{postfix-expression} that are not function designators, the
     943expression is rewritten and becomes a call of a function named ``\lstinline$?()$''. The valid
     944interpretations of the rewritten expression are determined in the manner described below.
     945
     946Each combination of function designators and argument interpretations is considered. For those
     947interpretations of the \nonterm{postfix-expression} that are \Index{monomorphic function}
     948designators, the combination has a \Index{valid interpretation} if the function designator accepts
     949the number of arguments given, and each argument interpretation matches the corresponding explicit
     950parameter:
    761951\begin{itemize}
    762 \item if the argument corresponds to a parameter in the function designator's prototype, the argument interpretation must have the same type as the corresponding parameter, or be implicitly convertible to the parameter's type
    763 \item if the function designator's type does not include a prototype or if the argument corresponds to
     952\item
     953if the argument corresponds to a parameter in the function designator's prototype, the argument
     954interpretation must have the same type as the corresponding parameter, or be implicitly convertible
     955to the parameter's type
     956\item
     957if the function designator's type does not include a prototype or if the argument corresponds to
    764958``\lstinline$...$'' in a prototype, a \Index{default argument promotion} is applied to it.
    765959\end{itemize}
     
    767961
    768962For those combinations where the interpretation of the \nonterm{postfix-expression} is a
    769 \Index{polymorphic function} designator and the function designator accepts the number of arguments given, there shall be at least one set of \define{implicit argument}s for the implicit parameters such that
     963\Index{polymorphic function} designator and the function designator accepts the number of arguments
     964given, there shall be at least one set of \define{implicit argument}s for the implicit parameters
     965such that
    770966\begin{itemize}
    771967\item
    772 If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the implicit argument must be an object type;
    773 if it uses \lstinline$dtype$, the implicit argument must be an object type or an incomplete type;
    774 and if it uses \lstinline$ftype$, the implicit argument must be a function type.
    775 
    776 \item if an explicit parameter's type uses any implicit parameters, then the corresponding explicit argument must have a type that is (or can be safely converted\index{safe conversion} to) the type produced by substituting the implicit arguments for the implicit parameters in the explicit parameter type.
    777 
    778 \item the remaining explicit arguments must match the remaining explicit parameters, as described for monomorphic function designators.
    779 
    780 \item for each \Index{assertion parameter} in the function designator's type, there must be an object or function with the same identifier that is visible at the call site and whose type is compatible with or can be specialized to the type of the assertion declaration.
     968If the declaration of the implicit parameter uses \Index{type-class} \lstinline$type$\use{type}, the
     969implicit argument must be an object type; if it uses \lstinline$dtype$, the implicit argument must
     970be an object type or an incomplete type; and if it uses \lstinline$ftype$, the implicit argument
     971must be a function type.
     972
     973\item
     974if an explicit parameter's type uses any implicit parameters, then the corresponding explicit
     975argument must have a type that is (or can be safely converted\index{safe conversion} to) the type
     976produced by substituting the implicit arguments for the implicit parameters in the explicit
     977parameter type.
     978
     979\item
     980the remaining explicit arguments must match the remaining explicit parameters, as described for
     981monomorphic function designators.
     982
     983\item
     984for each \Index{assertion parameter} in the function designator's type, there must be an object or
     985function with the same identifier that is visible at the call site and whose type is compatible with
     986or can be specialized to the type of the assertion declaration.
    781987\end{itemize}
    782 There is a valid interpretation for each such set of implicit parameters.
    783 The type of each valid interpretation is the return type of the function designator with implicit parameter values substituted for the implicit arguments.
    784 
    785 A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or any of the argument interpretations is ambiguous.
    786 
    787 Every valid interpretation whose return type is not compatible with any other valid interpretation's return type is an interpretation of the function call expression.
    788 
    789 Every set of valid interpretations that have mutually compatible\index{compatible type} result types also produces an interpretation of the function call expression.
    790 The type of the interpretation is the \Index{composite type} of the types of the valid interpretations, and the value of the interpretation is that of the \Index{best valid interpretation}.
    791 \begin{rationale}
    792 One 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}.
    793 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$.
     988There is a valid interpretation for each such set of implicit parameters. The type of each valid
     989interpretation is the return type of the function designator with implicit parameter values
     990substituted for the implicit arguments.
     991
     992A valid interpretation is ambiguous\index{ambiguous interpretation} if the function designator or
     993any of the argument interpretations is ambiguous.
     994
     995Every valid interpretation whose return type is not compatible with any other valid interpretation's
     996return type is an interpretation of the function call expression.
     997
     998Every set of valid interpretations that have mutually compatible\index{compatible type} result types
     999also produces an interpretation of the function call expression. The type of the interpretation is
     1000the \Index{composite type} of the types of the valid interpretations, and the value of the
     1001interpretation is that of the \Index{best valid interpretation}.
     1002\begin{rationale}
     1003One desirable property of a polymorphic programming language is \define{generalizability}: the
     1004ability to replace an abstraction with a more general but equivalent abstraction without requiring
     1005changes in any of the uses of the original\cite{Cormack90}. For instance, it should be possible to
     1006replace a function ``\lstinline$int f( int );$'' with ``\lstinline$forall( type T ) T f( T );$''
     1007without affecting any calls of \lstinline$f$.
    7941008
    7951009\CFA\index{deficiencies!generalizability} does not fully possess this property, because
     
    8011015float f;
    8021016double d;
    803 f = g( f, f );          // (1)
    804 f = g( i, f );          // (2) (safe conversion to float)
    805 f = g( d, f );          // (3) (unsafe conversion to float)
    806 \end{lstlisting}
    807 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
     1017f = g( f, f );  // (1)
     1018f = g( i, f );  // (2) (safe conversion to float)
     1019f = g( d, f );  // (3) (unsafe conversion to float)
     1020\end{lstlisting}
     1021If \lstinline$g$ was replaced by ``\lstinline$forall( type T ) T g( T, T );$'', the first and second
     1022calls would be unaffected, but the third would change: \lstinline$f$ would be converted to
    8081023\lstinline$double$, and the result would be a \lstinline$double$.
    8091024
    810 Another example is the function ``\lstinline$void h( int *);$''.
    811 This function can be passed a
    812 \lstinline$void *$ argument, but the generalization ``\lstinline$forall( otype T ) void h( T *);$'' can not.
    813 In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an object type.
    814 If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any} object type, which is undesirable.
     1025Another example is the function ``\lstinline$void h( int *);$''. This function can be passed a
     1026\lstinline$void *$ argument, but the generalization ``\lstinline$forall( type T ) void h( T *);$''
     1027can not. In this case, \lstinline$void$ is not a valid value for \lstinline$T$ because it is not an
     1028object type. If unsafe conversions were allowed, \lstinline$T$ could be inferred to be \emph{any}
     1029object type, which is undesirable.
    8151030\end{rationale}
    8161031
     
    8181033A function called ``\lstinline$?()$'' might be part of a numerical differentiation package.
    8191034\begin{lstlisting}
    820 extern otype Derivative;
     1035extern type Derivative;
    8211036extern double ?()( Derivative, double );
    8221037extern Derivative derivative_of( double (*f)( double ) );
     
    8301045For that interpretation, the function call is treated as ``\lstinline$?()( sin_dx, 12.9 )$''.
    8311046\begin{lstlisting}
    832 int f( long );          // (1)
    833 int f( int, int );      // (2)
     1047int f( long );          // (1) 
     1048int f( int, int );      // (2) 
    8341049int f( int *);          // (3)
     1050
    8351051int i = f( 5 );         // calls (1)
    8361052\end{lstlisting}
    837 Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit \lstinline$int$ to \lstinline$long$ conversion.
    838 The other functions do not, since the second requires two arguments, and since there is no implicit conversion from \lstinline$int$ to \lstinline$int *$ that could be used with the third function.
    839 
    840 \begin{lstlisting}
    841 forall( otype T ) T h( T );
     1053Function (1) provides a valid interpretation of ``\lstinline$f( 5 )$'', using an implicit
     1054\lstinline$int$ to \lstinline$long$ conversion. The other functions do not, since the second
     1055requires two arguments, and since there is no implicit conversion from \lstinline$int$ to
     1056\lstinline$int *$ that could be used with the third function.
     1057
     1058\begin{lstlisting}
     1059forall( type T ) T h( T );
    8421060double d = h( 1.5 );
    8431061\end{lstlisting}
     
    8461064
    8471065\begin{lstlisting}
    848 forall( otype T, otype U ) void g( T, U );      // (4)
    849 forall( otype T ) void g( T, T );                       // (5)
    850 forall( otype T ) void g( T, long );                    // (6)
    851 void g( long, long );                                           // (7)
     1066forall( type T, type U ) void g( T, U );        // (4)
     1067forall( type T ) void g( T, T );                        // (5)
     1068forall( type T ) void g( T, long );                     // (6)
     1069void g( long, long );                                           // (7) 
    8521070double d;
    8531071int i;
    8541072int *p;
    855 g( d, d );                      // calls (5)
    856 g( d, i );                      // calls (6)
    857 g( i, i );                      // calls (7)
     1073
     1074g( d, d );                      // calls (5)
     1075g( d, i );                      // calls (6)
     1076g( i, i );                      // calls (7)
    8581077g( i, p );                      // calls (4)
    8591078\end{lstlisting}
    860 The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is chosen because it is less polymorphic than (4).
    861 
    862 For the second call, (7) is again discarded.
    863 Of the remaining interpretations for (4), (5), and (6) (with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least polymorphic.
    864 
    865 The third call has valid interpretations for all of the functions;
    866 (7) is chosen since it is not polymorphic at all.
    867 
    868 The fourth call has no interpretation for (5), because its arguments must have compatible type. (4) is chosen because it does not involve unsafe conversions.
    869 \begin{lstlisting}
    870 forall( otype T ) T min( T, T );
     1079The first call has valid interpretations for all four versions of \lstinline$g$. (6) and (7) are
     1080discarded because they involve unsafe \lstinline$double$-to-\lstinline$long$ conversions. (5) is
     1081chosen because it is less polymorphic than (4).
     1082
     1083For the second call, (7) is again discarded. Of the remaining interpretations for (4), (5), and (6)
     1084(with \lstinline$i$ converted to \lstinline$long$), (6) is chosen because it is the least
     1085polymorphic.
     1086
     1087The third call has valid interpretations for all of the functions; (7) is chosen since it is not
     1088polymorphic at all.
     1089
     1090The fourth call has no interpretation for (5), because its arguments must have compatible type. (4)
     1091is chosen because it does not involve unsafe conversions.
     1092\begin{lstlisting}
     1093forall( type T ) T min( T, T );
    8711094double max( double, double );
    872 trait min_max( T ) {@\impl{min_max}@
     1095context min_max( T ) {@\impl{min_max}@
    8731096        T min( T, T );
    8741097        T max( T, T );
    8751098}
    876 forall( otype U | min_max( U ) ) void shuffle( U, U );
    877 shuffle( 9, 10 );
    878 \end{lstlisting}
    879 The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
     1099forall( type U | min_max( U ) ) void shuffle( U, U );
     1100shuffle(9, 10);
     1101\end{lstlisting}
     1102The only possibility for \lstinline$U$ is \lstinline$double$, because that is the type used in the
     1103only visible \lstinline$max$ function. 9 and 10 must be converted to \lstinline$double$, and
    8801104\lstinline$min$ must be specialized with \lstinline$T$ bound to \lstinline$double$.
    8811105\begin{lstlisting}
    882 extern void q( int );           // (8)
    883 extern void q( void * );        // (9)
     1106extern void q( int );           // (8) 
     1107extern void q( void * );        // (9) 
    8841108extern void r();
    8851109q( 0 );
    8861110r( 0 );
    8871111\end{lstlisting}
    888 The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9).
    889 The former is chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}.
    890 For the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has \emph{no} declared parameter types.
     1112The \lstinline$int 0$ could be passed to (8), or the \lstinline$(void *)$ \Index{specialization} of
     1113the null pointer\index{null pointer} \lstinline$0$\use{0} could be passed to (9). The former is
     1114chosen because the \lstinline$int$ \lstinline$0$ is \Index{less polymorphic}. For
     1115the same reason, \lstinline$int$ \lstinline$0$ is passed to \lstinline$r()$, even though it has
     1116\emph{no} declared parameter types.
    8911117
    8921118
    8931119\subsubsection{Structure and union members}
    8941120
    895 \semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a member named \lstinline$m$.
    896 If two or more interpretations of \lstinline$s$ have members named
    897 \lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous interpretation} whose type is the composite type of the types of the members.
    898 If an interpretation of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
    899 \lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type.
    900 The expression has no other interpretations.
     1121\semantics In the member selection expression ``\lstinline$s$.\lstinline$m$'', there shall be at
     1122least one interpretation of \lstinline$s$ whose type is a structure type or union type containing a
     1123member named \lstinline$m$. If two or more interpretations of \lstinline$s$ have members named
     1124\lstinline$m$ with mutually compatible types, then the expression has an \Index{ambiguous
     1125interpretation} whose type is the composite type of the types of the members. If an interpretation
     1126of \lstinline$s$ has a member \lstinline$m$ whose type is not compatible with any other
     1127\lstinline$s$'s \lstinline$m$, then the expression has an interpretation with the member's type. The
     1128expression has no other interpretations.
    9011129
    9021130The expression ``\lstinline$p->m$'' has the same interpretations as the expression
     
    9081136\predefined
    9091137\begin{lstlisting}
    910 _Bool ?++( volatile _Bool * ), ?++( _Atomic volatile _Bool * );
    911 char ?++( volatile char * ), ?++( _Atomic volatile char * );
    912 signed char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
    913 unsigned char ?++( volatile signed char * ), ?++( _Atomic volatile signed char * );
    914 short int ?++( volatile short int * ), ?++( _Atomic volatile short int * );
    915 unsigned short int ?++( volatile unsigned short int * ), ?++( _Atomic volatile unsigned short int * );
    916 int ?++( volatile int * ), ?++( _Atomic volatile int * );
    917 unsigned int ?++( volatile unsigned int * ), ?++( _Atomic volatile unsigned int * );
    918 long int ?++( volatile long int * ), ?++( _Atomic volatile long int * );
    919 long unsigned int ?++( volatile long unsigned int * ), ?++( _Atomic volatile long unsigned int * );
    920 long long int ?++( volatile long long int * ), ?++( _Atomic volatile long long int * );
    921 long long unsigned ?++( volatile long long unsigned int * ), ?++( _Atomic volatile long long unsigned int * );
    922 float ?++( volatile float * ), ?++( _Atomic volatile float * );
    923 double ?++( volatile double * ), ?++( _Atomic volatile double * );
    924 long double ?++( volatile long double * ), ?++( _Atomic volatile long double * );
    925 
    926 forall( otype T ) T * ?++( T * restrict volatile * ), * ?++( T * _Atomic restrict volatile * );
    927 forall( otype T ) _Atomic T * ?++( _Atomic T * restrict volatile * ), * ?++( _Atomic T * _Atomic restrict volatile * );
    928 forall( otype T ) const T * ?++( const T * restrict volatile * ), * ?++( const T * _Atomic restrict volatile * );
    929 forall( otype T ) volatile T * ?++( volatile T * restrict volatile * ), * ?++( volatile T * _Atomic restrict volatile * );
    930 forall( otype T ) restrict T * ?++( restrict T * restrict volatile * ), * ?++( restrict T * _Atomic restrict volatile * );
    931 forall( otype T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
     1138_Bool ?++( volatile _Bool * ),
     1139        ?++( _Atomic volatile _Bool * );
     1140char ?++( volatile char * ),
     1141        ?++( _Atomic volatile char * );
     1142signed char ?++( volatile signed char * ),
     1143        ?++( _Atomic volatile signed char * );
     1144unsigned char ?++( volatile signed char * ),
     1145        ?++( _Atomic volatile signed char * );
     1146short int ?++( volatile short int * ),
     1147        ?++( _Atomic volatile short int * );
     1148unsigned short int ?++( volatile unsigned short int * ),
     1149        ?++( _Atomic volatile unsigned short int * );
     1150int ?++( volatile int * ),
     1151        ?++( _Atomic volatile int * );
     1152unsigned int ?++( volatile unsigned int * ),
     1153        ?++( _Atomic volatile unsigned int * );
     1154long int ?++( volatile long int * ),
     1155        ?++( _Atomic volatile long int * );
     1156long unsigned int ?++( volatile long unsigned int * ),
     1157        ?++( _Atomic volatile long unsigned int * );
     1158long long int ?++( volatile long long int * ),
     1159        ?++( _Atomic volatile long long int * );
     1160long long unsigned ?++( volatile long long unsigned int * ),
     1161        ?++( _Atomic volatile long long unsigned int * );
     1162float ?++( volatile float * ),
     1163        ?++( _Atomic volatile float * );
     1164double ?++( volatile double * ),
     1165        ?++( _Atomic volatile double * );
     1166long double ?++( volatile long double * ),
     1167        ?++( _Atomic volatile long double * );
     1168
     1169forall( type T ) T * ?++( T * restrict volatile * ),
     1170        * ?++( T * _Atomic restrict volatile * );
     1171
     1172forall( type T ) _Atomic T * ?++( _Atomic T * restrict volatile * ),
     1173        * ?++( _Atomic T * _Atomic restrict volatile * );
     1174
     1175forall( type T ) const T * ?++( const T * restrict volatile * ),
     1176        * ?++( const T * _Atomic restrict volatile * );
     1177
     1178forall( type T ) volatile T * ?++( volatile T * restrict volatile * ),
     1179        * ?++( volatile T * _Atomic restrict volatile * );
     1180
     1181forall( type T ) restrict T * ?++( restrict T * restrict volatile * ),
     1182        * ?++( restrict T * _Atomic restrict volatile * );
     1183
     1184forall( type T ) _Atomic const T * ?++( _Atomic const T * restrict volatile * ),
    9321185        * ?++( _Atomic const T * _Atomic restrict volatile * );
    933 forall( otype T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
     1186
     1187forall( type T ) _Atomic restrict T * ?++( _Atomic restrict T * restrict volatile * ),
    9341188        * ?++( _Atomic restrict T * _Atomic restrict volatile * );
    935 forall( otype T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
     1189
     1190forall( type T ) _Atomic volatile T * ?++( _Atomic volatile T * restrict volatile * ),
    9361191        * ?++( _Atomic volatile T * _Atomic restrict volatile * );
    937 forall( otype T ) const restrict T * ?++( const restrict T * restrict volatile * ),
     1192
     1193forall( type T ) const restrict T * ?++( const restrict T * restrict volatile * ),
    9381194        * ?++( const restrict T * _Atomic restrict volatile * );
    939 forall( otype T ) const volatile T * ?++( const volatile T * restrict volatile * ),
     1195
     1196forall( type T ) const volatile T * ?++( const volatile T * restrict volatile * ),
    9401197        * ?++( const volatile T * _Atomic restrict volatile * );
    941 forall( otype T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
     1198
     1199forall( type T ) restrict volatile T * ?++( restrict volatile T * restrict volatile * ),
    9421200        * ?++( restrict volatile T * _Atomic restrict volatile * );
    943 forall( otype T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
     1201
     1202forall( type T ) _Atomic const restrict T * ?++( _Atomic const restrict T * restrict volatile * ),
    9441203        * ?++( _Atomic const restrict T * _Atomic restrict volatile * );
    945 forall( otype T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
     1204
     1205forall( type T ) _Atomic const volatile T * ?++( _Atomic const volatile T * restrict volatile * ),
    9461206        * ?++( _Atomic const volatile T * _Atomic restrict volatile * );
    947 forall( otype T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
     1207
     1208forall( type T ) _Atomic restrict volatile T * ?++( _Atomic restrict volatile T * restrict volatile * ),
    9481209        * ?++( _Atomic restrict volatile T * _Atomic restrict volatile * );
    949 forall( otype T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
     1210
     1211forall( type T ) const restrict volatile T * ?++( const restrict volatile T * restrict volatile * ),
    9501212        * ?++( const restrict volatile T * _Atomic restrict volatile * );
    951 forall( otype T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
     1213
     1214forall( type T ) _Atomic const restrict volatile T * ?++( _Atomic const restrict volatile T * restrict volatile * ),
    9521215        * ?++( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    9531216
    954 _Bool ?--( volatile _Bool * ), ?--( _Atomic volatile _Bool * );
    955 char ?--( volatile char * ), ?--( _Atomic volatile char * );
    956 signed char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
    957 unsigned char ?--( volatile signed char * ), ?--( _Atomic volatile signed char * );
    958 short int ?--( volatile short int * ), ?--( _Atomic volatile short int * );
    959 unsigned short int ?--( volatile unsigned short int * ), ?--( _Atomic volatile unsigned short int * );
    960 int ?--( volatile int * ), ?--( _Atomic volatile int * );
    961 unsigned int ?--( volatile unsigned int * ), ?--( _Atomic volatile unsigned int * );
    962 long int ?--( volatile long int * ), ?--( _Atomic volatile long int * );
    963 long unsigned int ?--( volatile long unsigned int * ), ?--( _Atomic volatile long unsigned int * );
    964 long long int ?--( volatile long long int * ), ?--( _Atomic volatile long long int * );
    965 long long unsigned ?--( volatile long long unsigned int * ), ?--( _Atomic volatile long long unsigned int * );
    966 float ?--( volatile float * ), ?--( _Atomic volatile float * );
    967 double ?--( volatile double * ), ?--( _Atomic volatile double * );
    968 long double ?--( volatile long double * ), ?--( _Atomic volatile long double * );
    969 
    970 forall( otype T ) T * ?--( T * restrict volatile * ), * ?--( T * _Atomic restrict volatile * );
    971 forall( otype T ) _Atomic T * ?--( _Atomic T * restrict volatile * ), * ?--( _Atomic T * _Atomic restrict volatile * );
    972 forall( otype T ) const T * ?--( const T * restrict volatile * ), * ?--( const T * _Atomic restrict volatile * );
    973 forall( otype T ) volatile T * ?--( volatile T * restrict volatile * ), * ?--( volatile T * _Atomic restrict volatile * );
    974 forall( otype T ) restrict T * ?--( restrict T * restrict volatile * ), * ?--( restrict T * _Atomic restrict volatile * );
    975 forall( otype T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
     1217_Bool ?--( volatile _Bool * ),
     1218        ?--( _Atomic volatile _Bool * );
     1219char ?--( volatile char * ),
     1220        ?--( _Atomic volatile char * );
     1221signed char ?--( volatile signed char * ),
     1222        ?--( _Atomic volatile signed char * );
     1223unsigned char ?--( volatile signed char * ),
     1224        ?--( _Atomic volatile signed char * );
     1225short int ?--( volatile short int * ),
     1226        ?--( _Atomic volatile short int * );
     1227unsigned short int ?--( volatile unsigned short int * ),
     1228        ?--( _Atomic volatile unsigned short int * );
     1229int ?--( volatile int * ),
     1230        ?--( _Atomic volatile int * );
     1231unsigned int ?--( volatile unsigned int * ),
     1232        ?--( _Atomic volatile unsigned int * );
     1233long int ?--( volatile long int * ),
     1234        ?--( _Atomic volatile long int * );
     1235long unsigned int ?--( volatile long unsigned int * ),
     1236        ?--( _Atomic volatile long unsigned int * );
     1237long long int ?--( volatile long long int * ),
     1238        ?--( _Atomic volatile long long int * );
     1239long long unsigned ?--( volatile long long unsigned int * ),
     1240        ?--( _Atomic volatile long long unsigned int * );
     1241float ?--( volatile float * ),
     1242        ?--( _Atomic volatile float * );
     1243double ?--( volatile double * ),
     1244        ?--( _Atomic volatile double * );
     1245long double ?--( volatile long double * ),
     1246        ?--( _Atomic volatile long double * );
     1247
     1248forall( type T ) T * ?--( T * restrict volatile * ),
     1249        * ?--( T * _Atomic restrict volatile * );
     1250
     1251forall( type T ) _Atomic T * ?--( _Atomic T * restrict volatile * ),
     1252        * ?--( _Atomic T * _Atomic restrict volatile * );
     1253
     1254forall( type T ) const T * ?--( const T * restrict volatile * ),
     1255        * ?--( const T * _Atomic restrict volatile * );
     1256
     1257forall( type T ) volatile T * ?--( volatile T * restrict volatile * ),
     1258        * ?--( volatile T * _Atomic restrict volatile * );
     1259
     1260forall( type T ) restrict T * ?--( restrict T * restrict volatile * ),
     1261        * ?--( restrict T * _Atomic restrict volatile * );
     1262
     1263forall( type T ) _Atomic const T * ?--( _Atomic const T * restrict volatile * ),
    9761264        * ?--( _Atomic const T * _Atomic restrict volatile * );
    977 forall( otype T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
     1265
     1266forall( type T ) _Atomic restrict T * ?--( _Atomic restrict T * restrict volatile * ),
    9781267        * ?--( _Atomic restrict T * _Atomic restrict volatile * );
    979 forall( otype T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
     1268
     1269forall( type T ) _Atomic volatile T * ?--( _Atomic volatile T * restrict volatile * ),
    9801270        * ?--( _Atomic volatile T * _Atomic restrict volatile * );
    981 forall( otype T ) const restrict T * ?--( const restrict T * restrict volatile * ),
     1271
     1272forall( type T ) const restrict T * ?--( const restrict T * restrict volatile * ),
    9821273        * ?--( const restrict T * _Atomic restrict volatile * );
    983 forall( otype T ) const volatile T * ?--( const volatile T * restrict volatile * ),
     1274
     1275forall( type T ) const volatile T * ?--( const volatile T * restrict volatile * ),
    9841276        * ?--( const volatile T * _Atomic restrict volatile * );
    985 forall( otype T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
     1277
     1278forall( type T ) restrict volatile T * ?--( restrict volatile T * restrict volatile * ),
    9861279        * ?--( restrict volatile T * _Atomic restrict volatile * );
    987 forall( otype T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
     1280
     1281forall( type T ) _Atomic const restrict T * ?--( _Atomic const restrict T * restrict volatile * ),
    9881282        * ?--( _Atomic const restrict T * _Atomic restrict volatile * );
    989 forall( otype T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
     1283
     1284forall( type T ) _Atomic const volatile T * ?--( _Atomic const volatile T * restrict volatile * ),
    9901285        * ?--( _Atomic const volatile T * _Atomic restrict volatile * );
    991 forall( otype T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
     1286
     1287forall( type T ) _Atomic restrict volatile T * ?--( _Atomic restrict volatile T * restrict volatile * ),
    9921288        * ?--( _Atomic restrict volatile T * _Atomic restrict volatile * );
    993 forall( otype T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
     1289
     1290forall( type T ) const restrict volatile T * ?--( const restrict volatile T * restrict volatile * ),
    9941291        * ?--( const restrict volatile T * _Atomic restrict volatile * );
    995 forall( otype T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
     1292
     1293forall( type T ) _Atomic const restrict volatile T * ?--( _Atomic const restrict volatile T * restrict volatile * ),
    9961294        * ?--( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    9971295\end{lstlisting}
     
    10101308
    10111309\begin{rationale}
    1012 Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald has pointed out, this forces the modified operand of such expressions to be an lvalue.
    1013 This partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
    1014 \end{rationale}
    1015 
    1016 \begin{rationale}
    1017 In C, a semantic rule requires that pointer operands of increment and decrement be pointers to object types.
    1018 Hence, \lstinline$void *$ objects cannot be incremented.
    1019 In \CFA, the restriction follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the type parameter \lstinline$T$.
     1310Note that ``\lstinline$++$'' and ``\lstinline$--$'' are rewritten as function calls that are given a
     1311pointer to that operand. (This is true of all operators that modify an operand.) As Hamish Macdonald
     1312has pointed out, this forces the modified operand of such expressions to be an lvalue. This
     1313partially enforces the C semantic rule that such operands must be \emph{modifiable} lvalues.
     1314\end{rationale}
     1315
     1316\begin{rationale}
     1317In C, a semantic rule requires that pointer operands of increment and decrement be pointers to
     1318object types. Hence, \lstinline$void *$ objects cannot be incremented. In \CFA, the restriction
     1319follows from the use of a \lstinline$type$ parameter in the predefined function definitions, as
     1320opposed to \lstinline$dtype$, since only object types can be inferred arguments corresponding to the
     1321type parameter \lstinline$T$.
    10201322\end{rationale}
    10211323
    10221324\semantics
    1023 First, each interpretation of the operand of an increment or decrement expression is considered separately.
    1024 For each interpretation that is a bit-field or is declared with the
    1025 \lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the expression has one valid interpretation, with the type of the operand, and the expression is ambiguous if the operand is.
    1026 
    1027 For the remaining interpretations, the expression is rewritten, and the interpretations of the expression are the interpretations of the corresponding function call.
    1028 Finally, all interpretations of the expression produced for the different interpretations of the operand are combined to produce the interpretations of the expression as a whole; where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions.
     1325First, each interpretation of the operand of an increment or decrement expression is considered
     1326separately. For each interpretation that is a bit-field or is declared with the
     1327\lstinline$register$\index{register@{\lstinline$register$}} \index{Itorage-class specifier}, the
     1328expression has one valid interpretation, with the type of the operand, and the expression is
     1329ambiguous if the operand is.
     1330
     1331For the remaining interpretations, the expression is rewritten, and the interpretations of the
     1332expression are the interpretations of the corresponding function call. Finally, all interpretations
     1333of the expression produced for the different interpretations of the operand are combined to produce
     1334the interpretations of the expression as a whole; where interpretations have compatible result
     1335types, the best interpretations are selected in the manner described for function call expressions.
    10291336
    10301337\examples
     
    10391346\lstinline$vs++$ calls the \lstinline$?++$ function with the \lstinline$volatile short *$ parameter.
    10401347\lstinline$s++$ does the same, applying the safe conversion from \lstinline$short int *$ to
    1041 \lstinline$volatile short int *$.
    1042 Note that there is no conversion that adds an \lstinline$_Atomic$ qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid interpretation.
     1348\lstinline$volatile short int *$. Note that there is no conversion that adds an \lstinline$_Atomic$
     1349qualifier, so the \lstinline$_Atomic volatile short int$ overloading does not provide a valid
     1350interpretation.
    10431351\end{sloppypar}
    10441352
    1045 There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$, and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$ has no valid interpretations.
    1046 
    1047 The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the \lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the \lstinline$volatile$ qualifier.
    1048 \begin{lstlisting}
    1049 char * const restrict volatile * restrict volatile pqpc;
    1050 pqpc++
    1051 char * * restrict volatile ppc;
    1052 ppc++;
    1053 \end{lstlisting}
    1054 Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$, the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring \lstinline$T$ to be \lstinline$char *$.
    1055 
    1056 \lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$, and using the safe conversions from \lstinline$T$ to \lstinline$T const$ \lstinline$restrict volatile$.
    1057 
    1058 \begin{rationale}
    1059 Increment and decrement expressions show up a deficiency of \CFA's type system.
    1060 There is no such thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
    1061 Therefore, there is no way to define a function that alters them, and hence no way to define increment and decrement functions for them.
    1062 As a result, the semantics of increment and decrement expressions must treat them specially.
    1063 This holds true for all of the operators that may modify such objects.
    1064 \end{rationale}
    1065 
    1066 \begin{rationale}
    1067 The polymorphic overloadings for pointer increment and decrement can be understood by considering increasingly complex types.
     1353There is no safe conversion from \lstinline$const short int *$ to \lstinline$volatile short int *$,
     1354and no \lstinline$?++$ function that accepts a \lstinline$const *$ parameter, so \lstinline$cs++$
     1355has no valid interpretations.
     1356
     1357The best valid interpretation of \lstinline$as++$ calls the \lstinline$short ?++$ function with the
     1358\lstinline$_Atomic volatile short int *$ parameter, applying a safe conversion to add the
     1359\lstinline$volatile$ qualifier.
     1360
     1361\begin{lstlisting}
     1362char * const restrict volatile * restrict volatile pqpc; pqpc++
     1363char * * restrict volatile ppc; ppc++;
     1364\end{lstlisting}
     1365Since \lstinline$&(pqpc)$ has type \lstinline$char * const restrict volatile * restrict volatile *$,
     1366the best valid interpretation of \lstinline$pqpc++$ calls the polymorphic \lstinline$?++$ function
     1367with the \lstinline$const restrict volatile T * restrict volatile *$ parameter, inferring
     1368\lstinline$T$ to be \lstinline$char *$.
     1369
     1370\begin{sloppypar}
     1371\lstinline$ppc++$ calls the same function, again inferring \lstinline$T$ to be \lstinline$char *$,
     1372and using the safe conversions from \lstinline$T$ to \lstinline$T const restrict volatile$.
     1373\end{sloppypar}
     1374
     1375\begin{rationale}
     1376Increment and decrement expressions show up a deficiency of \CFA's type system. There is no such
     1377thing as a pointer to a register object or bit-field\index{deficiencies!pointers to bit-fields}.
     1378Therefore, there is no way to define a function that alters them, and hence no way to define
     1379increment and decrement functions for them. As a result, the semantics of increment and decrement
     1380expressions must treat them specially. This holds true for all of the operators that may modify
     1381such objects.
     1382\end{rationale}
     1383
     1384\begin{rationale}
     1385The polymorphic overloadings for pointer increment and decrement can be understood by considering
     1386increasingly complex types.
    10681387\begin{enumerate}
    10691388\item
    1070 ``\lstinline$char * p; p++;$''.
    1071 The argument to \lstinline$?++$ has type \lstinline$char * *$, and the result has type \lstinline$char *$.
    1072 The expression would be valid if \lstinline$?++$ were declared by
    1073 \begin{lstlisting}
    1074 forall( otype T ) T * ?++( T * * );
    1075 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$char$.
    1076 
    1077 \item
    1078 ``\lstinline$char *restrict volatile qp; qp++$''.
    1079 The result again has type \lstinline$char *$, but the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the hypothetical function declared in point 1.
    1080 Hence the actual predefined function is
    1081 \begin{lstlisting}
    1082 forall( otype T ) T * ?++( T * restrict volatile * );
    1083 \end{lstlisting} which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
    1084 \lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so constant pointers cannot be incremented.)
    1085 
    1086 \item
    1087 ``\lstinline$char *_Atomic ap; ap++$''.
    1088 The result again has type \lstinline$char *$, but no safe conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable.
    1089 A separate overloading of \lstinline$?++$ is required.
    1090 
    1091 \item
    1092 ``\lstinline$char const volatile * pq; pq++$''.
    1093 Here the result has type
     1389``\lstinline$char * p; p++;$''. The argument to \lstinline$?++$ has type \lstinline$char * *$, and
     1390the result has type \lstinline$char *$. The expression would be valid if \lstinline$?++$ were
     1391declared by
     1392\begin{lstlisting}
     1393forall( type T ) T * ?++( T * * );
     1394\end{lstlisting}
     1395with \lstinline$T$ inferred to be \lstinline$char$.
     1396
     1397\item
     1398``\lstinline$char *restrict volatile qp; qp++$''. The result again has type \lstinline$char *$, but
     1399the argument now has type \lstinline$char *restrict volatile *$, so it cannot be passed to the
     1400hypothetical function declared in point 1. Hence the actual predefined function is
     1401\begin{lstlisting}
     1402forall( type T ) T * ?++( T * restrict volatile * );
     1403\end{lstlisting}
     1404which also accepts a \lstinline$char * *$ argument, because of the safe conversions that add
     1405\lstinline$volatile$ and \lstinline$restrict$ qualifiers. (The parameter is not const-qualified, so
     1406constant pointers cannot be incremented.)
     1407
     1408\item
     1409``\lstinline$char *_Atomic ap; ap++$''. The result again has type \lstinline$char *$, but no safe
     1410conversion adds an \lstinline$_Atomic$ qualifier, so the function in point 2 is not applicable. A
     1411separate overloading of \lstinline$?++$ is required.
     1412
     1413\item
     1414``\lstinline$char const volatile * pq; pq++$''. Here the result has type
    10941415\lstinline$char const volatile *$, so a new overloading is needed:
    10951416\begin{lstlisting}
    1096 forall( otype T ) T const volatile * ?++( T const volatile *restrict volatile * );
    1097 \end{lstlisting}
    1098 One overloading is needed for each combination of qualifiers in the pointed-at type\index{deficiencies!pointers to qualified types}.
     1417forall( type T ) T const volatile * ?++( T const volatile *restrict volatile * );
     1418\end{lstlisting}
     1419One overloading is needed for each combination of qualifiers in the pointed-at
     1420type\index{deficiencies!pointers to qualified types}.
    10991421 
    11001422\item
    1101 ``\lstinline$float *restrict * prp; prp++$''.
    1102 The \lstinline$restrict$ qualifier is handled just like \lstinline$const$ and \lstinline$volatile$ in the previous case:
    1103 \begin{lstlisting}
    1104 forall( otype T ) T restrict * ?++( T restrict *restrict volatile * );
    1105 \end{lstlisting} with \lstinline$T$ inferred to be \lstinline$float *$.
    1106 This 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.
     1423``\lstinline$float *restrict * prp; prp++$''. The \lstinline$restrict$ qualifier is handled just
     1424like \lstinline$const$ and \lstinline$volatile$ in the previous case:
     1425\begin{lstlisting}
     1426forall( type T ) T restrict * ?++( T restrict *restrict volatile * );
     1427\end{lstlisting}
     1428with \lstinline$T$ inferred to be \lstinline$float *$. This looks odd, because {\c11} contains a
     1429constraint that requires restrict-qualified types to be pointer-to-object types, and \lstinline$T$
     1430is not syntactically a pointer type. \CFA loosens the constraint.
    11071431\end{enumerate}
    11081432\end{rationale}
     
    11121436
    11131437\semantics
    1114 A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the compound literal.
     1438A compound literal has one interpretation, with the type given by the \nonterm{type-name} of the
     1439compound literal.
    11151440
    11161441
     
    11301455\rewriterules
    11311456\begin{lstlisting}
    1132 *a      @\rewrite@ *?( a ) @\use{*?}@
    1133 +a      @\rewrite@ +?( a ) @\use{+?}@
    1134 -a      @\rewrite@ -?( a ) @\use{-?}@
    1135 ~a      @\rewrite@ ~?( a ) @\use{~?}@
    1136 !a      @\rewrite@ !?( a ) @\use{"!?}@
    1137 ++a     @\rewrite@ ++?(&( a )) @\use{++?}@
    1138 --a     @\rewrite@ --?(&( a )) @\use{--?}@
     1457*a      @\rewrite@ *?(a) @\use{*?}@
     1458+a      @\rewrite@ +?(a) @\use{+?}@
     1459-a      @\rewrite@ -?(a) @\use{-?}@
     1460~a      @\rewrite@ ~?(a) @\use{~?}@
     1461!a      @\rewrite@ !?(a) @\use{"!?}@
     1462++a     @\rewrite@ ++?(&(a)) @\use{++?}@
     1463--a     @\rewrite@ --?(&(a)) @\use{--?}@
    11391464\end{lstlisting}
    11401465
     
    11441469\predefined
    11451470\begin{lstlisting}
    1146 _Bool ++?( volatile _Bool * ), ++?( _Atomic volatile _Bool * );
    1147 char ++?( volatile char * ), ++?( _Atomic volatile char * );
    1148 signed char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
    1149 unsigned char ++?( volatile signed char * ), ++?( _Atomic volatile signed char * );
    1150 short int ++?( volatile short int * ), ++?( _Atomic volatile short int * );
    1151 unsigned short int ++?( volatile unsigned short int * ), ++?( _Atomic volatile unsigned short int * );
    1152 int ++?( volatile int * ), ++?( _Atomic volatile int * );
    1153 unsigned int ++?( volatile unsigned int * ), ++?( _Atomic volatile unsigned int * );
    1154 long int ++?( volatile long int * ), ++?( _Atomic volatile long int * );
    1155 long unsigned int ++?( volatile long unsigned int * ), ++?( _Atomic volatile long unsigned int * );
    1156 long long int ++?( volatile long long int * ), ++?( _Atomic volatile long long int * );
    1157 long long unsigned ++?( volatile long long unsigned int * ), ++?( _Atomic volatile long long unsigned int * );
    1158 float ++?( volatile float * ), ++?( _Atomic volatile float * );
    1159 double ++?( volatile double * ), ++?( _Atomic volatile double * );
    1160 long double ++?( volatile long double * ), ++?( _Atomic volatile long double * );
    1161 
    1162 forall( otype T ) T * ++?( T * restrict volatile * ), * ++?( T * _Atomic restrict volatile * );
    1163 forall( otype T ) _Atomic T * ++?( _Atomic T * restrict volatile * ), * ++?( _Atomic T * _Atomic restrict volatile * );
    1164 forall( otype T ) const T * ++?( const T * restrict volatile * ), * ++?( const T * _Atomic restrict volatile * );
    1165 forall( otype T ) volatile T * ++?( volatile T * restrict volatile * ), * ++?( volatile T * _Atomic restrict volatile * );
    1166 forall( otype T ) restrict T * ++?( restrict T * restrict volatile * ), * ++?( restrict T * _Atomic restrict volatile * );
    1167 forall( otype T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
     1471_Bool ++?( volatile _Bool * ),
     1472        ++?( _Atomic volatile _Bool * );
     1473char ++?( volatile char * ),
     1474        ++?( _Atomic volatile char * );
     1475signed char ++?( volatile signed char * ),
     1476        ++?( _Atomic volatile signed char * );
     1477unsigned char ++?( volatile signed char * ),
     1478        ++?( _Atomic volatile signed char * );
     1479short int ++?( volatile short int * ),
     1480        ++?( _Atomic volatile short int * );
     1481unsigned short int ++?( volatile unsigned short int * ),
     1482        ++?( _Atomic volatile unsigned short int * );
     1483int ++?( volatile int * ),
     1484        ++?( _Atomic volatile int * );
     1485unsigned int ++?( volatile unsigned int * ),
     1486        ++?( _Atomic volatile unsigned int * );
     1487long int ++?( volatile long int * ),
     1488        ++?( _Atomic volatile long int * );
     1489long unsigned int ++?( volatile long unsigned int * ),
     1490        ++?( _Atomic volatile long unsigned int * );
     1491long long int ++?( volatile long long int * ),
     1492        ++?( _Atomic volatile long long int * );
     1493long long unsigned ++?( volatile long long unsigned int * ),
     1494        ++?( _Atomic volatile long long unsigned int * );
     1495float ++?( volatile float * ),
     1496        ++?( _Atomic volatile float * );
     1497double ++?( volatile double * ),
     1498        ++?( _Atomic volatile double * );
     1499long double ++?( volatile long double * ),
     1500        ++?( _Atomic volatile long double * );
     1501
     1502forall( type T ) T * ++?( T * restrict volatile * ),
     1503        * ++?( T * _Atomic restrict volatile * );
     1504
     1505forall( type T ) _Atomic T * ++?( _Atomic T * restrict volatile * ),
     1506        * ++?( _Atomic T * _Atomic restrict volatile * );
     1507
     1508forall( type T ) const T * ++?( const T * restrict volatile * ),
     1509        * ++?( const T * _Atomic restrict volatile * );
     1510
     1511forall( type T ) volatile T * ++?( volatile T * restrict volatile * ),
     1512        * ++?( volatile T * _Atomic restrict volatile * );
     1513
     1514forall( type T ) restrict T * ++?( restrict T * restrict volatile * ),
     1515        * ++?( restrict T * _Atomic restrict volatile * );
     1516
     1517forall( type T ) _Atomic const T * ++?( _Atomic const T * restrict volatile * ),
    11681518        * ++?( _Atomic const T * _Atomic restrict volatile * );
    1169 forall( otype T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
     1519
     1520forall( type T ) _Atomic volatile T * ++?( _Atomic volatile T * restrict volatile * ),
    11701521        * ++?( _Atomic volatile T * _Atomic restrict volatile * );
    1171 forall( otype T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
     1522
     1523forall( type T ) _Atomic restrict T * ++?( _Atomic restrict T * restrict volatile * ),
    11721524        * ++?( _Atomic restrict T * _Atomic restrict volatile * );
    1173 forall( otype T ) const volatile T * ++?( const volatile T * restrict volatile * ),
     1525
     1526forall( type T ) const volatile T * ++?( const volatile T * restrict volatile * ),
    11741527        * ++?( const volatile T * _Atomic restrict volatile * );
    1175 forall( otype T ) const restrict T * ++?( const restrict T * restrict volatile * ),
     1528
     1529forall( type T ) const restrict T * ++?( const restrict T * restrict volatile * ),
    11761530        * ++?( const restrict T * _Atomic restrict volatile * );
    1177 forall( otype T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
     1531
     1532forall( type T ) restrict volatile T * ++?( restrict volatile T * restrict volatile * ),
    11781533        * ++?( restrict volatile T * _Atomic restrict volatile * );
    1179 forall( otype T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
     1534
     1535forall( type T ) _Atomic const volatile T * ++?( _Atomic const volatile T * restrict volatile * ),
    11801536        * ++?( _Atomic const volatile T * _Atomic restrict volatile * );
    1181 forall( otype T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
     1537
     1538forall( type T ) _Atomic const restrict T * ++?( _Atomic const restrict T * restrict volatile * ),
    11821539        * ++?( _Atomic const restrict T * _Atomic restrict volatile * );
    1183 forall( otype T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
     1540
     1541forall( type T ) _Atomic restrict volatile T * ++?( _Atomic restrict volatile T * restrict volatile * ),
    11841542        * ++?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1185 forall( otype T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
     1543
     1544forall( type T ) const restrict volatile T * ++?( const restrict volatile T * restrict volatile * ),
    11861545        * ++?( const restrict volatile T * _Atomic restrict volatile * );
    1187 forall( otype T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
     1546
     1547forall( type T ) _Atomic const restrict volatile T * ++?( _Atomic const restrict volatile T * restrict volatile * ),
    11881548        * ++?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    11891549
    1190 _Bool --?( volatile _Bool * ), --?( _Atomic volatile _Bool * );
    1191 char --?( volatile char * ), --?( _Atomic volatile char * );
    1192 signed char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
    1193 unsigned char --?( volatile signed char * ), --?( _Atomic volatile signed char * );
    1194 short int --?( volatile short int * ), --?( _Atomic volatile short int * );
    1195 unsigned short int --?( volatile unsigned short int * ), --?( _Atomic volatile unsigned short int * );
    1196 int --?( volatile int * ), --?( _Atomic volatile int * );
    1197 unsigned int --?( volatile unsigned int * ), --?( _Atomic volatile unsigned int * );
    1198 long int --?( volatile long int * ), --?( _Atomic volatile long int * );
    1199 long unsigned int --?( volatile long unsigned int * ), --?( _Atomic volatile long unsigned int * );
    1200 long long int --?( volatile long long int * ), --?( _Atomic volatile long long int * );
    1201 long long unsigned --?( volatile long long unsigned int * ), --?( _Atomic volatile long long unsigned int * );
    1202 float --?( volatile float * ), --?( _Atomic volatile float * );
    1203 double --?( volatile double * ), --?( _Atomic volatile double * );
    1204 long double --?( volatile long double * ), --?( _Atomic volatile long double * );
    1205 
    1206 forall( otype T ) T * --?( T * restrict volatile * ), * --?( T * _Atomic restrict volatile * );
    1207 forall( otype T ) _Atomic T * --?( _Atomic T * restrict volatile * ), * --?( _Atomic T * _Atomic restrict volatile * );
    1208 forall( otype T ) const T * --?( const T * restrict volatile * ), * --?( const T * _Atomic restrict volatile * );
    1209 forall( otype T ) volatile T * --?( volatile T * restrict volatile * ), * --?( volatile T * _Atomic restrict volatile * );
    1210 forall( otype T ) restrict T * --?( restrict T * restrict volatile * ), * --?( restrict T * _Atomic restrict volatile * );
    1211 forall( otype T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
     1550_Bool --?( volatile _Bool * ),
     1551        --?( _Atomic volatile _Bool * );
     1552char --?( volatile char * ),
     1553        --?( _Atomic volatile char * );
     1554signed char --?( volatile signed char * ),
     1555        --?( _Atomic volatile signed char * );
     1556unsigned char --?( volatile signed char * ),
     1557        --?( _Atomic volatile signed char * );
     1558short int --?( volatile short int * ),
     1559        --?( _Atomic volatile short int * );
     1560unsigned short int --?( volatile unsigned short int * ),
     1561        --?( _Atomic volatile unsigned short int * );
     1562int --?( volatile int * ),
     1563        --?( _Atomic volatile int * );
     1564unsigned int --?( volatile unsigned int * ),
     1565        --?( _Atomic volatile unsigned int * );
     1566long int --?( volatile long int * ),
     1567        --?( _Atomic volatile long int * );
     1568long unsigned int --?( volatile long unsigned int * ),
     1569        --?( _Atomic volatile long unsigned int * );
     1570long long int --?( volatile long long int * ),
     1571        --?( _Atomic volatile long long int * );
     1572long long unsigned --?( volatile long long unsigned int * ),
     1573        --?( _Atomic volatile long long unsigned int * );
     1574float --?( volatile float * ),
     1575        --?( _Atomic volatile float * );
     1576double --?( volatile double * ),
     1577        --?( _Atomic volatile double * );
     1578long double --?( volatile long double * ),
     1579        --?( _Atomic volatile long double * );
     1580
     1581forall( type T ) T * --?( T * restrict volatile * ),
     1582        * --?( T * _Atomic restrict volatile * );
     1583
     1584forall( type T ) _Atomic T * --?( _Atomic T * restrict volatile * ),
     1585        * --?( _Atomic T * _Atomic restrict volatile * );
     1586
     1587forall( type T ) const T * --?( const T * restrict volatile * ),
     1588        * --?( const T * _Atomic restrict volatile * );
     1589
     1590forall( type T ) volatile T * --?( volatile T * restrict volatile * ),
     1591        * --?( volatile T * _Atomic restrict volatile * );
     1592
     1593forall( type T ) restrict T * --?( restrict T * restrict volatile * ),
     1594        * --?( restrict T * _Atomic restrict volatile * );
     1595
     1596forall( type T ) _Atomic const T * --?( _Atomic const T * restrict volatile * ),
    12121597        * --?( _Atomic const T * _Atomic restrict volatile * );
    1213 forall( otype T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
     1598
     1599forall( type T ) _Atomic volatile T * --?( _Atomic volatile T * restrict volatile * ),
    12141600        * --?( _Atomic volatile T * _Atomic restrict volatile * );
    1215 forall( otype T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
     1601
     1602forall( type T ) _Atomic restrict T * --?( _Atomic restrict T * restrict volatile * ),
    12161603        * --?( _Atomic restrict T * _Atomic restrict volatile * );
    1217 forall( otype T ) const volatile T * --?( const volatile T * restrict volatile * ),
     1604
     1605forall( type T ) const volatile T * --?( const volatile T * restrict volatile * ),
    12181606        * --?( const volatile T * _Atomic restrict volatile * );
    1219 forall( otype T ) const restrict T * --?( const restrict T * restrict volatile * ),
     1607
     1608forall( type T ) const restrict T * --?( const restrict T * restrict volatile * ),
    12201609        * --?( const restrict T * _Atomic restrict volatile * );
    1221 forall( otype T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
     1610
     1611forall( type T ) restrict volatile T * --?( restrict volatile T * restrict volatile * ),
    12221612        * --?( restrict volatile T * _Atomic restrict volatile * );
    1223 forall( otype T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
     1613
     1614forall( type T ) _Atomic const volatile T * --?( _Atomic const volatile T * restrict volatile * ),
    12241615        * --?( _Atomic const volatile T * _Atomic restrict volatile * );
    1225 forall( otype T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
     1616
     1617forall( type T ) _Atomic const restrict T * --?( _Atomic const restrict T * restrict volatile * ),
    12261618        * --?( _Atomic const restrict T * _Atomic restrict volatile * );
    1227 forall( otype T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
     1619
     1620forall( type T ) _Atomic restrict volatile T * --?( _Atomic restrict volatile T * restrict volatile * ),
    12281621        * --?( _Atomic restrict volatile T * _Atomic restrict volatile * );
    1229 forall( otype T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
     1622
     1623forall( type T ) const restrict volatile T * --?( const restrict volatile T * restrict volatile * ),
    12301624        * --?( const restrict volatile T * _Atomic restrict volatile * );
    1231 forall( otype T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
     1625
     1626forall( type T ) _Atomic const restrict volatile T * --?( _Atomic const restrict volatile T * restrict volatile * ),
    12321627        * --?( _Atomic const restrict volatile T * _Atomic restrict volatile * );
    12331628\end{lstlisting}
     
    12501645
    12511646\semantics
    1252 The interpretations of prefix increment and decrement expressions are determined in the same way as the interpretations of postfix increment and decrement expressions.
     1647The interpretations of prefix increment and decrement expressions are
     1648determined in the same way as the interpretations of postfix increment and
     1649decrement expressions.
    12531650
    12541651
     
    12571654\predefined
    12581655\begin{lstlisting}
    1259 forall( otype T ) lvalue T *?( T * );
    1260 forall( otype T ) _Atomic lvalue T *?( _Atomic T * );
    1261 forall( otype T ) const lvalue T *?( const T * );
    1262 forall( otype T ) volatile lvalue T *?( volatile T * );
    1263 forall( otype T ) restrict lvalue T *?( restrict T * );
    1264 forall( otype T ) _Atomic const lvalue T *?( _Atomic const T * );
    1265 forall( otype T ) _Atomic volatile lvalue T *?( _Atomic volatile T * );
    1266 forall( otype T ) _Atomic restrict lvalue T *?( _Atomic restrict T * );
    1267 forall( otype T ) const volatile lvalue T *?( const volatile T * );
    1268 forall( otype T ) const restrict lvalue T *?( const restrict T * );
    1269 forall( otype T ) restrict volatile lvalue T *?( restrict volatile T * );
    1270 forall( otype T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * );
    1271 forall( otype T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * );
    1272 forall( otype T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * );
    1273 forall( otype T ) const restrict volatile lvalue T *?( const restrict volatile T * );
    1274 forall( otype T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
     1656forall( type T ) lvalue T *?( T * );
     1657forall( type T ) _Atomic lvalue T *?( _Atomic T * );
     1658forall( type T ) const lvalue T *?( const T * );
     1659forall( type T ) volatile lvalue T *?( volatile T * );
     1660forall( type T ) restrict lvalue T *?( restrict T * );
     1661forall( type T ) _Atomic const lvalue T *?( _Atomic const T * );
     1662forall( type T ) _Atomic volatile lvalue T *?( _Atomic volatile T * );
     1663forall( type T ) _Atomic restrict lvalue T *?( _Atomic restrict T * );
     1664forall( type T ) const volatile lvalue T *?( const volatile T * );
     1665forall( type T ) const restrict lvalue T *?( const restrict T * );
     1666forall( type T ) restrict volatile lvalue T *?( restrict volatile T * );
     1667forall( type T ) _Atomic const volatile lvalue T *?( _Atomic const volatile T * );
     1668forall( type T ) _Atomic const restrict lvalue T *?( _Atomic const restrict T * );
     1669forall( type T ) _Atomic restrict volatile lvalue T *?( _Atomic restrict volatile T * );
     1670forall( type T ) const restrict volatile lvalue T *?( const restrict volatile T * );
     1671forall( type T ) _Atomic const restrict volatile lvalue T *?( _Atomic const restrict volatile T * );
     1672
    12751673forall( ftype FT ) FT *?( FT * );
    12761674\end{lstlisting}
     
    12841682\lstinline$T$ is the type of the operand.
    12851683
    1286 The interpretations of an indirection expression are the interpretations of the corresponding function call.
     1684The interpretations of an indirection expression are the interpretations of the corresponding
     1685function call.
    12871686
    12881687
     
    12911690\predefined
    12921691\begin{lstlisting}
    1293 int     +?( int ), -?( int ), ~?( int );
    1294 unsigned int +?( unsigned int ), -?( unsigned int ), ~?( unsigned int );
    1295 long int +?( long int ), -?( long int ), ~?( long int );
    1296 long unsigned int +?( long unsigned int ), -?( long unsigned int ), ~?( long unsigned int );
    1297 long long int +?( long long int ), -?( long long int ), ~?( long long int );
    1298 long long unsigned int +?( long long unsigned int ), -?( long long unsigned int ), ~?( long long unsigned int );
    1299 float +?( float ), -?( float );
    1300 double +?( double ), -?( double );
    1301 long double +?( long double ), -?( long double );
    1302 _Complex float +?( _Complex float ), -?( _Complex float );
    1303 _Complex double +?( _Complex double ), -?( _Complex double );
    1304 _Complex long double +?( _Complex long double ), -?( _Complex long double );
    1305 int !?( int ), !?( unsigned int ), !?( long ), !?( long unsigned int ),
    1306         !?( long long int ), !?( long long unsigned int ),
    1307         !?( float ), !?( double ), !?( long double ),
    1308         !?( _Complex float ), !?( _Complex double ), !?( _Complex long double );
     1692int
     1693        +?( int ),
     1694        -?( int ),
     1695        ~?( int );
     1696unsigned int
     1697        +?( unsigned int ),
     1698        -?( unsigned int ),
     1699         ~?( unsigned int );
     1700long int
     1701        +?( long int ),
     1702        -?( long int ),
     1703        ~?( long int );
     1704long unsigned int
     1705        +?( long unsigned int ),
     1706        -?( long unsigned int ),
     1707        ~?( long unsigned int );
     1708long long int
     1709        +?( long long int ),
     1710        -?( long long int ),
     1711        ~?( long long int );
     1712long long unsigned int
     1713        +?( long long unsigned int ),
     1714        -?( long long unsigned int ),
     1715        ~?( long long unsigned int );
     1716float
     1717        +?( float ),
     1718        -?( float );
     1719double
     1720        +?( double ),
     1721        -?( double );
     1722long double
     1723        +?( long double ),
     1724        -?( long double );
     1725_Complex float
     1726        +?( _Complex float ),
     1727        -?( _Complex float );
     1728_Complex double
     1729        +?( _Complex double ),
     1730        -?( _Complex double );
     1731_Complex long double
     1732        +?( _Complex long double ),
     1733        -?( _Complex long double );
     1734
     1735int !?( int ),
     1736        !?( unsigned int ),
     1737        !?( long ),
     1738        !?( long unsigned int ),
     1739        !?( long long int ),
     1740        !?( long long unsigned int ),
     1741        !?( float ),
     1742        !?( double ),
     1743        !?( long double ),
     1744        !?( _Complex float ),
     1745        !?( _Complex double ),
     1746        !?( _Complex long double );
     1747
    13091748forall( dtype DT ) int !?( const restrict volatile DT * );
    13101749forall( dtype DT ) int !?( _Atomic const restrict volatile DT * );
    13111750forall( ftype FT ) int !?( FT * );
    13121751\end{lstlisting}
    1313 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1752For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     1753rank of \lstinline$int$ there exist
    13141754% Don't use predefined: keep this out of prelude.cf.
    13151755\begin{lstlisting}
     
    13191759
    13201760\semantics
    1321 The interpretations of a unary arithmetic expression are the interpretations of the corresponding function call.
     1761The interpretations of a unary arithmetic expression are the interpretations of the corresponding
     1762function call.
    13221763
    13231764\examples
     
    13251766long int li;
    13261767void eat_double( double );@\use{eat_double}@
    1327 eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
     1768
     1769eat_double(-li ); // @\rewrite@ eat_double( -?( li ) );
    13281770\end{lstlisting}
    13291771The valid interpretations of ``\lstinline$-li$'' (assuming no extended integer types exist) are
    13301772\begin{center}
    1331 \begin{tabular}{llc} interpretation & result type & expression conversion cost \\
     1773\begin{tabular}{llc}
     1774interpretation & result type & expression conversion cost \\
    13321775\hline
    13331776\lstinline$-?( (int)li )$                                       & \lstinline$int$                                       & (unsafe) \\
     
    13451788\end{tabular}
    13461789\end{center}
    1347 The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument conversion and the cost of the entire expression, are
     1790The valid interpretations of the \lstinline$eat_double$ call, with the cost of the argument
     1791conversion and the cost of the entire expression, are
    13481792\begin{center}
    1349 \begin{tabular}{lcc} interpretation & argument cost & expression cost \\
     1793\begin{tabular}{lcc}
     1794interpretation & argument cost & expression cost \\
    13501795\hline
    13511796\lstinline$eat_double( (double)-?( (int)li) )$                                  & 7                     & (unsafe) \\
     
    13631808\end{tabular}
    13641809\end{center}
    1365 Each has result type \lstinline$void$, so the best must be selected.
    1366 The interpretations involving unsafe conversions are discarded.
    1367 The remainder have equal expression conversion costs, so the
     1810Each has result type \lstinline$void$, so the best must be selected. The interpretations involving
     1811unsafe conversions are discarded. The remainder have equal expression conversion costs, so the
    13681812``highest argument conversion cost'' rule is invoked, and the chosen interpretation is
    13691813\lstinline$eat_double( (double)-?(li) )$.
     
    13761820\lstinline$dtype$, or \lstinline$ftype$.
    13771821
    1378 When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one interpretation, of type \lstinline$size_t$.
     1822When the \lstinline$sizeof$\use{sizeof} operator is applied to an expression, the expression shall
     1823have exactly one \Index{interpretation}\index{ambiguous interpretation}, which shall
     1824be unambiguous. \semantics A \lstinline$sizeof$ or \lstinline$_Alignof$ expression has one
     1825interpretation, of type \lstinline$size_t$.
    13791826
    13801827When \lstinline$sizeof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    1381 \nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand.
    1382 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
     1828\nonterm{type-parameter}, it yields the size in bytes of the type that implements the operand. When
     1829the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the
     1830expression is not a constant expression.
    13831831
    13841832When \lstinline$_Alignof$ is applied to an identifier declared by a \nonterm{type-declaration} or a
    1385 \nonterm{type-parameter}, it yields the alignment requirement of the type that implements the operand.
    1386 When the operand is an opaque type or an inferred type parameter\index{inferred parameter}, the expression is not a constant expression.
    1387 \begin{rationale}
    1388 \begin{lstlisting}
    1389 otype Pair = struct { int first, second; };
     1833\nonterm{type-parameter}, it yields the alignment requirement of the type that implements the
     1834operand. When the operand is an opaque type or an inferred type parameter\index{inferred
     1835parameter}, the expression is not a constant expression.
     1836\begin{rationale}
     1837\begin{lstlisting}
     1838type Pair = struct { int first, second; };
    13901839size_t p_size = sizeof(Pair);           // constant expression
    1391 extern otype Rational;@\use{Rational}@
     1840
     1841extern type Rational;@\use{Rational}@
    13921842size_t c_size = sizeof(Rational);       // non-constant expression
     1843
    13931844forall(type T) T f(T p1, T p2) {
    13941845        size_t t_size = sizeof(T);              // non-constant expression
     
    13961847}
    13971848\end{lstlisting}
    1398 ``\lstinline$sizeof Rational$'', although not statically known, is fixed.
    1399 Within \lstinline$f()$,
     1849``\lstinline$sizeof Rational$'', although not statically known, is fixed. Within \lstinline$f()$,
    14001850``\lstinline$sizeof(T)$'' is fixed for each call of \lstinline$f()$, but may vary from call to call.
    14011851\end{rationale}
     
    14171867
    14181868In a \Index{cast expression} ``\lstinline$($\nonterm{type-name}\lstinline$)e$'', if
    1419 \nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is the only interpretation of the cast expression;
    1420 otherwise, \lstinline$e$ shall have some interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast expression is the cast of the interpretation that can be converted at the lowest cost.
    1421 The cast expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
    1422 
    1423 \begin{rationale}
    1424 Casts can be used to eliminate ambiguity in expressions by selecting interpretations of subexpressions, and to specialize polymorphic functions and values.
     1869\nonterm{type-name} is the type of an interpretation of \lstinline$e$, then that interpretation is
     1870the only interpretation of the cast expression; otherwise, \lstinline$e$ shall have some
     1871interpretation that can be converted to \nonterm{type-name}, and the interpretation of the cast
     1872expression is the cast of the interpretation that can be converted at the lowest cost. The cast
     1873expression's interpretation is ambiguous\index{ambiguous interpretation} if more than one
     1874interpretation can be converted at the lowest cost or if the selected interpretation is ambiguous.
     1875
     1876\begin{rationale}
     1877Casts can be used to eliminate ambiguity in expressions by selecting interpretations of
     1878subexpressions, and to specialize polymorphic functions and values.
    14251879\end{rationale}
    14261880
     
    14451899\predefined
    14461900\begin{lstlisting}
    1447 int?*?( int, int ), ?/?( int, int ), ?%?( int, int );
    1448 unsigned int?*?( unsigned int, unsigned int ), ?/?( unsigned int, unsigned int ), ?%?( unsigned int, unsigned int );
    1449 long int?*?( long int, long int ), ?/?( long, long ), ?%?( long, long );
     1901int?*?( int, int ),
     1902        ?/?( int, int ),
     1903        ?%?( int, int );
     1904unsigned int?*?( unsigned int, unsigned int ),
     1905        ?/?( unsigned int, unsigned int ),
     1906        ?%?( unsigned int, unsigned int );
     1907long int?*?( long int, long int ),
     1908        ?/?( long, long ),
     1909        ?%?( long, long );
    14501910long unsigned int?*?( long unsigned int, long unsigned int ),
    1451         ?/?( long unsigned int, long unsigned int ), ?%?( long unsigned int, long unsigned int );
    1452 long long int?*?( long long int, long long int ), ?/?( long long int, long long int ),
     1911        ?/?( long unsigned int, long unsigned int ),
     1912        ?%?( long unsigned int, long unsigned int );
     1913long long int?*?( long long int, long long int ),
     1914        ?/?( long long int, long long int ),
    14531915        ?%?( long long int, long long int );
    14541916long long unsigned int ?*?( long long unsigned int, long long unsigned int ),
    1455         ?/?( long long unsigned int, long long unsigned int ), ?%?( long long unsigned int, long long unsigned int );
    1456 float?*?( float, float ), ?/?( float, float );
    1457 double?*?( double, double ), ?/?( double, double );
    1458 long double?*?( long double, long double ), ?/?( long double, long double );
    1459 _Complex float?*?( float, _Complex float ), ?/?( float, _Complex float ),
    1460         ?*?( _Complex float, float ), ?/?( _Complex float, float ),
    1461         ?*?( _Complex float, _Complex float ), ?/?( _Complex float, _Complex float );
    1462 _Complex double?*?( double, _Complex double ), ?/?( double, _Complex double ),
    1463         ?*?( _Complex double, double ), ?/?( _Complex double, double ),
    1464         ?*?( _Complex double, _Complex double ), ?/?( _Complex double, _Complex double );
    1465 _Complex long double?*?( long double, _Complex long double ), ?/?( long double, _Complex long double ),
    1466         ?*?( _Complex long double, long double ), ?/?( _Complex long double, long double ),
    1467         ?*?( _Complex long double, _Complex long double ), ?/?( _Complex long double, _Complex long double );
    1468 \end{lstlisting}
    1469 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     1917        ?/?( long long unsigned int, long long unsigned int ),
     1918        ?%?( long long unsigned int, long long unsigned int );
     1919float?*?( float, float ),
     1920        ?/?( float, float );
     1921double?*?( double, double ),
     1922        ?/?( double, double );
     1923long double?*?( long double, long double ),
     1924        ?/?( long double, long double );
     1925_Complex float?*?( float, _Complex float ),
     1926        ?/?( float, _Complex float ),
     1927        ?*?( _Complex float, float ),
     1928        ?/?( _Complex float, float ),
     1929        ?*?( _Complex float, _Complex float ),
     1930        ?/?( _Complex float, _Complex float );
     1931_Complex double?*?( double, _Complex double ),
     1932        ?/?( double, _Complex double ),
     1933        ?*?( _Complex double, double ),
     1934        ?/?( _Complex double, double ),
     1935        ?*?( _Complex double, _Complex double ),
     1936        ?/?( _Complex double, _Complex double );
     1937_Complex long double?*?( long double, _Complex long double ),
     1938        ?/?( long double, _Complex long double ),
     1939        ?*?( _Complex long double, long double ),
     1940        ?/?( _Complex long double, long double ),
     1941        ?*?( _Complex long double, _Complex long double ),
     1942        ?/?( _Complex long double, _Complex long double );
     1943\end{lstlisting}
     1944For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     1945rank of \lstinline$int$ there exist
    14701946% Don't use predefined: keep this out of prelude.cf.
    14711947\begin{lstlisting}
     
    14751951\begin{rationale}
    14761952{\c11} does not include conversions from the \Index{real type}s to \Index{complex type}s in the
    1477 \Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
     1953\Index{usual arithmetic conversion}s.  Instead it specifies conversion of the result of binary
     1954operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.
    14781955\end{rationale}
    14791956
    14801957\semantics
    1481 The interpretations of multiplicative expressions are the interpretations of the corresponding function call.
     1958The interpretations of multiplicative expressions are the interpretations of the corresponding
     1959function call.
    14821960
    14831961\examples
     
    14881966eat_double( li % i );
    14891967\end{lstlisting}
    1490 ``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''.
    1491 The valid interpretations of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and the cost of converting the result to \lstinline$double$ (assuming no extended integer types are present ) are
     1968``\lstinline$li % i$'' is rewritten as ``\lstinline$?%?(li, i )$''. The valid interpretations
     1969of \lstinline$?%?(li, i )$, the cost\index{conversion cost} of converting their arguments, and
     1970the cost of converting the result to \lstinline$double$ (assuming no extended integer types are
     1971present ) are
    14921972\begin{center}
    1493 \begin{tabular}{lcc} interpretation & argument cost & result cost \\
     1973\begin{tabular}{lcc}
     1974interpretation & argument cost & result cost \\
    14941975\hline
    14951976\lstinline$ ?%?( (int)li, i )$                                                                          & (unsafe)      & 6     \\
    14961977\lstinline$ ?%?( (unsigned)li,(unsigned)i )$                                            & (unsafe)      & 5     \\
    1497 \lstinline$ ?%?( li, (long)i )$                                                                         & 1                     & 4     \\
     1978\lstinline$ ?%?(li,(long)i )$                                                                           & 1                     & 4     \\
    14981979\lstinline$ ?%?( (long unsigned)li,(long unsigned)i )$                          & 3                     & 3     \\
    14991980\lstinline$ ?%?( (long long)li,(long long)i )$                                          & 5                     & 2     \\
     
    15021983\end{center}
    15031984The best interpretation of \lstinline$eat_double( li, i )$ is
    1504 \lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the lowest total cost.
    1505 
    1506 \begin{rationale}
    1507 {\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
     1985\lstinline$eat_double( (double)?%?(li, (long)i ))$, which has no unsafe conversions and the
     1986lowest total cost.
     1987
     1988\begin{rationale}
     1989{\c11} defines most arithmetic operations to apply an \Index{integer promotion} to any argument that
     1990belongs to a type that has an \Index{integer conversion rank} less than that of \lstinline$int$.If
    15081991\lstinline$s$ is a \lstinline$short int$, ``\lstinline$s *s$'' does not have type \lstinline$short int$;
    1509 it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches that pattern;
    1510 it does not predefine ``\lstinline$short ?*?( short, short )$''.
    1511 
    1512 These ``missing'' operators limit polymorphism.
    1513 Consider
    1514 \begin{lstlisting}
    1515 forall( otype T | T ?*?( T, T ) ) T square( T );
     1992it is treated as ``\lstinline$( (int)s ) * ( (int)s )$'', and has type \lstinline$int$. \CFA matches
     1993that pattern; it does not predefine ``\lstinline$short ?*?( short, short )$''.
     1994
     1995These ``missing'' operators limit polymorphism. Consider
     1996\begin{lstlisting}
     1997forall( type T | T ?*?( T, T ) ) T square( T );
    15161998short s;
    15171999square( s );
     
    15192001Since \CFA does not define a multiplication operator for \lstinline$short int$,
    15202002\lstinline$square( s )$ is treated as \lstinline$square( (int)s )$, and the result has type
    1521 \lstinline$int$.
    1522 This is mildly surprising, but it follows the {\c11} operator pattern.
     2003\lstinline$int$. This is mildly surprising, but it follows the {\c11} operator pattern.
    15232004
    15242005A more troubling example is
    15252006\begin{lstlisting}
    1526 forall( otype T | ?*?( T, T ) ) T product( T[], int n );
     2007forall( type T | ?*?( T, T ) ) T product( T[], int n );
    15272008short sa[5];
    15282009product( sa, 5);
    15292010\end{lstlisting}
    15302011This has no valid interpretations, because \CFA has no conversion from ``array of
    1531 \lstinline$short int$'' to ``array of \lstinline$int$''.
    1532 The alternatives in such situations include
     2012\lstinline$short int$'' to ``array of \lstinline$int$''. The alternatives in such situations
     2013include
    15332014\begin{itemize}
    15342015\item
     
    15392020\lstinline$product$.
    15402021\item
    1541 Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to the operator's argument type.
     2022Defining \lstinline$product$ to take as an argument a conversion function from the ``small'' type to
     2023the operator's argument type.
    15422024\end{itemize}
    15432025\end{rationale}
     
    15612043\predefined
    15622044\begin{lstlisting}
    1563 int?+?( int, int ), ?-?( int, int );
    1564 unsigned int?+?( unsigned int, unsigned int ), ?-?( unsigned int, unsigned int );
    1565 long int?+?( long int, long int ), ?-?( long int, long int );
    1566 long unsigned int?+?( long unsigned int, long unsigned int ), ?-?( long unsigned int, long unsigned int );
    1567 long long int?+?( long long int, long long int ), ?-?( long long int, long long int );
     2045int?+?( int, int ),
     2046        ?-?( int, int );
     2047unsigned int?+?( unsigned int, unsigned int ),
     2048        ?-?( unsigned int, unsigned int );
     2049long int?+?( long int, long int ),
     2050        ?-?( long int, long int );
     2051long unsigned int?+?( long unsigned int, long unsigned int ),
     2052        ?-?( long unsigned int, long unsigned int );
     2053long long int?+?( long long int, long long int ),
     2054        ?-?( long long int, long long int );
    15682055long long unsigned int ?+?( long long unsigned int, long long unsigned int ),
    15692056        ?-?( long long unsigned int, long long unsigned int );
    1570 float?+?( float, float ), ?-?( float, float );
    1571 double?+?( double, double ), ?-?( double, double );
    1572 long double?+?( long double, long double ), ?-?( long double, long double );
    1573 _Complex float?+?( _Complex float, float ), ?-?( _Complex float, float ),
    1574         ?+?( float, _Complex float ), ?-?( float, _Complex float ),
    1575         ?+?( _Complex float, _Complex float ), ?-?( _Complex float, _Complex float );
    1576 _Complex double?+?( _Complex double, double ), ?-?( _Complex double, double ),
    1577         ?+?( double, _Complex double ), ?-?( double, _Complex double ),
    1578         ?+?( _Complex double, _Complex double ), ?-?( _Complex double, _Complex double );
    1579 _Complex long double?+?( _Complex long double, long double ), ?-?( _Complex long double, long double ),
    1580         ?+?( long double, _Complex long double ), ?-?( long double, _Complex long double ),
    1581         ?+?( _Complex long double, _Complex long double ), ?-?( _Complex long double, _Complex long double );
    1582 
    1583 forall( otype T ) T * ?+?( T *, ptrdiff_t ), * ?+?( ptrdiff_t, T * ), * ?-?( T *, ptrdiff_t );
    1584 forall( otype T ) _Atomic T * ?+?( _Atomic T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic T * ),
     2057float?+?( float, float ),
     2058        ?-?( float, float );
     2059double?+?( double, double ),
     2060        ?-?( double, double );
     2061long double?+?( long double, long double ),
     2062        ?-?( long double, long double );
     2063_Complex float?+?( _Complex float, float ),
     2064        ?-?( _Complex float, float ),
     2065        ?+?( float, _Complex float ),
     2066        ?-?( float, _Complex float ),
     2067        ?+?( _Complex float, _Complex float ),
     2068        ?-?( _Complex float, _Complex float );
     2069_Complex double?+?( _Complex double, double ),
     2070        ?-?( _Complex double, double ),
     2071        ?+?( double, _Complex double ),
     2072        ?-?( double, _Complex double ),
     2073        ?+?( _Complex double, _Complex double ),
     2074        ?-?( _Complex double, _Complex double );
     2075_Complex long double?+?( _Complex long double, long double ),
     2076        ?-?( _Complex long double, long double ),
     2077        ?+?( long double, _Complex long double ),
     2078        ?-?( long double, _Complex long double ),
     2079        ?+?( _Complex long double, _Complex long double ),
     2080        ?-?( _Complex long double, _Complex long double );
     2081
     2082forall( type T ) T
     2083        * ?+?( T *, ptrdiff_t ),
     2084        * ?+?( ptrdiff_t, T * ),
     2085        * ?-?( T *, ptrdiff_t );
     2086
     2087forall( type T ) _Atomic T
     2088        * ?+?( _Atomic T *, ptrdiff_t ),
     2089        * ?+?( ptrdiff_t, _Atomic T * ),
    15852090        * ?-?( _Atomic T *, ptrdiff_t );
    1586 forall( otype T ) const T * ?+?( const T *, ptrdiff_t ), * ?+?( ptrdiff_t, const T * ),
     2091
     2092forall( type T ) const T
     2093        * ?+?( const T *, ptrdiff_t ),
     2094        * ?+?( ptrdiff_t, const T * ),
    15872095        * ?-?( const T *, ptrdiff_t );
    1588 forall( otype T ) restrict T * ?+?( restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict T * ),
     2096
     2097forall( type T ) restrict T
     2098        * ?+?( restrict T *, ptrdiff_t ),
     2099        * ?+?( ptrdiff_t, restrict T * ),
    15892100        * ?-?( restrict T *, ptrdiff_t );
    1590 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, volatile T * ),
     2101
     2102forall( type T ) volatile T
     2103        * ?+?( volatile T *, ptrdiff_t ),
     2104        * ?+?( ptrdiff_t, volatile T * ),
    15912105        * ?-?( volatile T *, ptrdiff_t );
    1592 forall( otype T ) _Atomic const T * ?+?( _Atomic const T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic const T * ),
     2106
     2107forall( type T ) _Atomic const T
     2108        * ?+?( _Atomic const T *, ptrdiff_t ),
     2109        * ?+?( ptrdiff_t, _Atomic const T * ),
    15932110        * ?-?( _Atomic const T *, ptrdiff_t );
    1594 forall( otype T ) _Atomic restrict T * ?+?( _Atomic restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic restrict T * ),
     2111
     2112forall( type T ) _Atomic restrict T
     2113        * ?+?( _Atomic restrict T *, ptrdiff_t ),
     2114        * ?+?( ptrdiff_t, _Atomic restrict T * ),
    15952115        * ?-?( _Atomic restrict T *, ptrdiff_t );
    1596 forall( otype T ) _Atomic volatile T * ?+?( _Atomic volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, _Atomic volatile T * ),
     2116
     2117forall( type T ) _Atomic volatile T
     2118        * ?+?( _Atomic volatile T *, ptrdiff_t ),
     2119        * ?+?( ptrdiff_t, _Atomic volatile T * ),
    15972120        * ?-?( _Atomic volatile T *, ptrdiff_t );
    1598 forall( otype T ) const restrict T * ?+?( const restrict T *, ptrdiff_t ), * ?+?( ptrdiff_t, const restrict T * ),
     2121
     2122forall( type T ) const restrict T
     2123        * ?+?( const restrict T *, ptrdiff_t ),
     2124        * ?+?( ptrdiff_t, const restrict T * ),
    15992125        * ?-?( const restrict T *, ptrdiff_t );
    1600 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, const volatile T * ),
     2126
     2127forall( type T ) const volatile T
     2128        * ?+?( const volatile T *, ptrdiff_t ),
     2129        * ?+?( ptrdiff_t, const volatile T * ),
    16012130        * ?-?( const volatile T *, ptrdiff_t );
    1602 forall( otype T ) restrict volatile T * ?+?( restrict volatile T *, ptrdiff_t ), * ?+?( ptrdiff_t, restrict volatile T * ),
     2131
     2132forall( type T ) restrict volatile T
     2133        * ?+?( restrict volatile T *, ptrdiff_t ),
     2134        * ?+?( ptrdiff_t, restrict volatile T * ),
    16032135        * ?-?( restrict volatile T *, ptrdiff_t );
    1604 forall( otype T ) _Atomic const restrict T * ?+?( _Atomic const restrict T *, ptrdiff_t ),
     2136
     2137forall( type T ) _Atomic const restrict T
     2138        * ?+?( _Atomic const restrict T *, ptrdiff_t ),
    16052139        * ?+?( ptrdiff_t, _Atomic const restrict T * ),
    16062140        * ?-?( _Atomic const restrict T *, ptrdiff_t );
    1607 forall( otype T ) ptrdiff_t
     2141
     2142forall( type T ) ptrdiff_t
    16082143        * ?-?( const restrict volatile T *, const restrict volatile T * ),
    16092144        * ?-?( _Atomic const restrict volatile T *, _Atomic const restrict volatile T * );
    16102145\end{lstlisting}
    1611 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     2146For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     2147rank of \lstinline$int$ there exist
    16122148% Don't use predefined: keep this out of prelude.cf.
    16132149\begin{lstlisting}
     
    16162152
    16172153\semantics
    1618 The interpretations of additive expressions are the interpretations of the corresponding function calls.
    1619 
    1620 \begin{rationale}
    1621 \lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that is synonymous with a signed integral type that is large enough to hold the difference between two pointers.
    1622 It seems reasonable to use it for pointer addition as well. (This is technically a difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
    1623 The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an unsigned type.
     2154The interpretations of additive expressions are the interpretations of the corresponding function
     2155calls.
     2156
     2157\begin{rationale}
     2158\lstinline$ptrdiff_t$ is an implementation-defined identifier defined in \lstinline$<stddef.h>$ that
     2159is synonymous with a signed integral type that is large enough to hold the difference between two
     2160pointers. It seems reasonable to use it for pointer addition as well. (This is technically a
     2161difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral}
     2162argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition.
     2163The {\c11} standard uses \lstinline$size_t$ in several cases where a library function takes an
     2164argument that is used as a subscript, but \lstinline$size_t$ is unsuitable here because it is an
     2165unsigned type.
    16242166\end{rationale}
    16252167
     
    16422184\predefined
    16432185\begin{lstlisting}
    1644 int ?<<?( int, int ), ?>>?( int, int );
    1645 unsigned int ?<<?( unsigned int, int ), ?>>?( unsigned int, int );
    1646 long int ?<<?( long int, int ), ?>>?( long int, int );
    1647 long unsigned int ?<<?( long unsigned int, int ), ?>>?( long unsigned int, int );
    1648 long long int ?<<?( long long int, int ), ?>>?( long long int, int );
    1649 long long unsigned int ?<<?( long long unsigned int, int ), ?>>?( long long unsigned int, int);
    1650 \end{lstlisting}
    1651 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     2186int ?<<?( int, int ),
     2187         ?>>?( int, int );
     2188unsigned int ?<<?( unsigned int, int ),
     2189         ?>>?( unsigned int, int );
     2190long int ?<<?( long int, int ),
     2191         ?>>?( long int, int );
     2192long unsigned int ?<<?( long unsigned int, int ),
     2193         ?>>?( long unsigned int, int );
     2194long long int ?<<?( long long int, int ),
     2195         ?>>?( long long int, int );
     2196long long unsigned int ?<<?( long long unsigned int, int ),
     2197         ?>>?( long long unsigned int, int);
     2198\end{lstlisting}
     2199For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     2200rank of \lstinline$int$ there exist
    16522201% Don't use predefined: keep this out of prelude.cf.
    16532202\begin{lstlisting}
     
    16562205
    16572206\begin{rationale}
    1658 The bitwise shift operators break the usual pattern: they do not convert both operands to a common type.
    1659 The right operand only undergoes \Index{integer promotion}.
     2207The bitwise shift operators break the usual pattern: they do not convert both operands to a common
     2208type. The right operand only undergoes \Index{integer promotion}.
    16602209\end{rationale}
    16612210
    16622211\semantics
    1663 The interpretations of a bitwise shift expression are the interpretations of the corresponding function calls.
     2212The interpretations of a bitwise shift expression are the interpretations of the corresponding
     2213function calls.
    16642214
    16652215
     
    16852235\predefined
    16862236\begin{lstlisting}
    1687 int ?<?( int, int ), ?<=?( int, int ),
    1688         ?>?( int, int ), ?>=?( int, int );
    1689 int ?<?( unsigned int, unsigned int ), ?<=?( unsigned int, unsigned int ),
    1690         ?>?( unsigned int, unsigned int ), ?>=?( unsigned int, unsigned int );
    1691 int ?<?( long int, long int ), ?<=?( long int, long int ),
    1692         ?>?( long int, long int ), ?>=?( long int, long int );
    1693 int ?<?( long unsigned int, long unsigned ), ?<=?( long unsigned int, long unsigned ),
    1694         ?>?( long unsigned int, long unsigned ), ?>=?( long unsigned int, long unsigned );
    1695 int ?<?( long long int, long long int ), ?<=?( long long int, long long int ),
    1696         ?>?( long long int, long long int ), ?>=?( long long int, long long int );
    1697 int ?<?( long long unsigned int, long long unsigned ), ?<=?( long long unsigned int, long long unsigned ),
    1698         ?>?( long long unsigned int, long long unsigned ), ?>=?( long long unsigned int, long long unsigned );
    1699 int ?<?( float, float ), ?<=?( float, float ),
    1700         ?>?( float, float ), ?>=?( float, float );
    1701 int ?<?( double, double ), ?<=?( double, double ),
    1702         ?>?( double, double ), ?>=?( double, double );
    1703 int ?<?( long double, long double ), ?<=?( long double, long double ),
    1704         ?>?( long double, long double ), ?>=?( long double, long double );
    1705 forall( dtype DT ) int ?<?( const restrict volatile DT *, const restrict volatile DT * ),
     2237int ?<?( int, int ),
     2238        ?<=?( int, int ),
     2239        ?>?( int, int ),
     2240        ?>=?( int, int );
     2241int ?<?( unsigned int, unsigned int ),
     2242        ?<=?( unsigned int, unsigned int ),
     2243        ?>?( unsigned int, unsigned int ),
     2244        ?>=?( unsigned int, unsigned int );
     2245int ?<?( long int, long int ),
     2246        ?<=?( long int, long int ),
     2247        ?>?( long int, long int ),
     2248        ?>=?( long int, long int );
     2249int ?<?( long unsigned int, long unsigned ),
     2250        ?<=?( long unsigned int, long unsigned ),
     2251        ?>?( long unsigned int, long unsigned ),
     2252        ?>=?( long unsigned int, long unsigned );
     2253int ?<?( long long int, long long int ),
     2254        ?<=?( long long int, long long int ),
     2255        ?>?( long long int, long long int ),
     2256        ?>=?( long long int, long long int );
     2257int ?<?( long long unsigned int, long long unsigned ),
     2258        ?<=?( long long unsigned int, long long unsigned ),
     2259        ?>?( long long unsigned int, long long unsigned ),
     2260        ?>=?( long long unsigned int, long long unsigned );
     2261int ?<?( float, float ),
     2262        ?<=?( float, float ),
     2263        ?>?( float, float ),
     2264        ?>=?( float, float );
     2265int ?<?( double, double ),
     2266        ?<=?( double, double ),
     2267        ?>?( double, double ),
     2268        ?>=?( double, double );
     2269int ?<?( long double, long double ),
     2270        ?<=?( long double, long double ),
     2271        ?>?( long double, long double ),
     2272        ?>=?( long double, long double );
     2273
     2274forall( dtype DT ) int
     2275        ?<?( const restrict volatile DT *, const restrict volatile DT * ),
    17062276        ?<?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * ),
    17072277        ?<=?( const restrict volatile DT *, const restrict volatile DT * ),
     
    17122282        ?>=?( _Atomic const restrict volatile DT *, _Atomic const restrict volatile DT * );
    17132283\end{lstlisting}
    1714 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     2284For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     2285rank of \lstinline$int$ there exist
    17152286% Don't use predefined: keep this out of prelude.cf.
    17162287\begin{lstlisting}
     
    17222293
    17232294\semantics
    1724 The interpretations of a relational expression are the interpretations of the corresponding function call.
     2295The interpretations of a relational expression are the interpretations of the corresponding function
     2296call.
    17252297
    17262298
     
    17422314\predefined
    17432315\begin{lstlisting}
    1744 int ?==?( int, int ), ?!=?( int, int ),
    1745         ?==?( unsigned int, unsigned int ), ?!=?( unsigned int, unsigned int ),
    1746         ?==?( long int, long int ), ?!=?( long int, long int ),
    1747         ?==?( long unsigned int, long unsigned int ), ?!=?( long unsigned int, long unsigned int ),
    1748         ?==?( long long int, long long int ), ?!=?( long long int, long long int ),
    1749         ?==?( long long unsigned int, long long unsigned int ), ?!=?( long long unsigned int, long long unsigned int ),
    1750         ?==?( float, float ), ?!=?( float, float ),
    1751         ?==?( _Complex float, float ), ?!=?( _Complex float, float ),
    1752         ?==?( float, _Complex float ), ?!=?( float, _Complex float ),
    1753         ?==?( _Complex float, _Complex float ), ?!=?( _Complex float, _Complex float ),
    1754         ?==?( double, double ), ?!=?( double, double ),
    1755         ?==?( _Complex double, double ), ?!=?( _Complex double, double ),
    1756         ?==?( double, _Complex double ), ?!=?( double, _Complex double ),
    1757         ?==?( _Complex double, _Complex double ), ?!=?( _Complex double, _Complex double ),
    1758         ?==?( long double, long double ), ?!=?( long double, long double ),
    1759         ?==?( _Complex long double, long double ), ?!=?( _Complex long double, long double ),
    1760         ?==?( long double, _Complex long double ), ?!=?( long double, _Complex long double ),
    1761         ?==?( _Complex long double, _Complex long double ), ?!=?( _Complex long double, _Complex long double );
     2316int ?==?( int, int ),
     2317        ?!=?( int, int ),
     2318        ?==?( unsigned int, unsigned int ),
     2319        ?!=?( unsigned int, unsigned int ),
     2320        ?==?( long int, long int ),
     2321        ?!=?( long int, long int ),
     2322        ?==?( long unsigned int, long unsigned int ),
     2323        ?!=?( long unsigned int, long unsigned int ),
     2324        ?==?( long long int, long long int ),
     2325        ?!=?( long long int, long long int ),
     2326        ?==?( long long unsigned int, long long unsigned int ),
     2327        ?!=?( long long unsigned int, long long unsigned int ),
     2328        ?==?( float, float ),
     2329        ?!=?( float, float ),
     2330        ?==?( _Complex float, float ),
     2331        ?!=?( _Complex float, float ),
     2332        ?==?( float, _Complex float ),
     2333        ?!=?( float, _Complex float ),
     2334        ?==?( _Complex float, _Complex float ),
     2335        ?!=?( _Complex float, _Complex float ),
     2336        ?==?( double, double ),
     2337        ?!=?( double, double ),
     2338        ?==?( _Complex double, double ),
     2339        ?!=?( _Complex double, double ),
     2340        ?==?( double, _Complex double ),
     2341        ?!=?( double, _Complex double ),
     2342        ?==?( _Complex double, _Complex double ),
     2343        ?!=?( _Complex double, _Complex double ),
     2344        ?==?( long double, long double ),
     2345        ?!=?( long double, long double ),
     2346        ?==?( _Complex long double, long double ),
     2347        ?!=?( _Complex long double, long double ),
     2348        ?==?( long double, _Complex long double ),
     2349        ?!=?( long double, _Complex long double ),
     2350        ?==?( _Complex long double, _Complex long double ),
     2351        ?!=?( _Complex long double, _Complex long double );
     2352
    17622353forall( dtype DT ) int
    17632354        ?==?( const restrict volatile DT *, const restrict volatile DT * ),
     
    17842375        ?==?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * ),
    17852376        ?!=?( forall( dtype DT2) const DT2*, _Atomic const restrict volatile DT * );
     2377
    17862378forall( ftype FT ) int
    1787         ?==?( FT *, FT * ), ?!=?( FT *, FT * ),
    1788         ?==?( FT *, forall( ftype FT2) FT2 * ), ?!=?( FT *, forall( ftype FT2) FT2 * ),
    1789         ?==?( forall( ftype FT2) FT2*, FT * ), ?!=?( forall( ftype FT2) FT2*, FT * ),
    1790         ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ), ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
    1791 \end{lstlisting}
    1792 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     2379        ?==?( FT *, FT * ),
     2380        ?!=?( FT *, FT * ),
     2381        ?==?( FT *, forall( ftype FT2) FT2 * ),
     2382        ?!=?( FT *, forall( ftype FT2) FT2 * ),
     2383        ?==?( forall( ftype FT2) FT2*, FT * ),
     2384        ?!=?( forall( ftype FT2) FT2*, FT * ),
     2385        ?==?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * ),
     2386        ?!=?( forall( ftype FT2) FT2*, forall( ftype FT3) FT3 * );
     2387\end{lstlisting}
     2388For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     2389rank of \lstinline$int$ there exist
    17932390% Don't use predefined: keep this out of prelude.cf.
    17942391\begin{lstlisting}
     
    17982395
    17992396\begin{rationale}
    1800 The polymorphic equality operations come in three styles: comparisons between pointers of compatible types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and between the \Index{null pointer} constant and pointers to any type.
    1801 In the last case, a special constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA type system.
     2397The polymorphic equality operations come in three styles: comparisons between pointers of compatible
     2398types, between pointers to \lstinline$void$ and pointers to object types or incomplete types, and
     2399between the \Index{null pointer} constant and pointers to any type. In the last case, a special
     2400constraint rule for null pointer constant operands has been replaced by a consequence of the \CFA
     2401type system.
    18022402\end{rationale}
    18032403
    18042404\semantics
    1805 The interpretations of an equality expression are the interpretations of the corresponding function call.
     2405The interpretations of an equality expression are the interpretations of the corresponding function
     2406call.
    18062407
    18072408\begin{sloppypar}
    1808 The result of an equality comparison between two pointers to predefined functions or predefined values is implementation-defined.
     2409The result of an equality comparison between two pointers to predefined functions or predefined
     2410values is implementation-defined.
    18092411\end{sloppypar}
    18102412\begin{rationale}
    1811 The implementation-defined status of equality comparisons allows implementations to use one library routine to implement many predefined functions.
    1812 These optimization are particularly important when the predefined functions are polymorphic, as is the case for most pointer operations
     2413The implementation-defined status of equality comparisons allows implementations to use one library
     2414routine to implement many predefined functions. These optimization are particularly important when
     2415the predefined functions are polymorphic, as is the case for most pointer operations
    18132416\end{rationale}
    18142417
     
    18362439long long unsigned int ?&?( long long unsigned int, long long unsigned int );
    18372440\end{lstlisting}
    1838 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     2441For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     2442rank of \lstinline$int$ there exist
    18392443% Don't use predefined: keep this out of prelude.cf.
    18402444\begin{lstlisting}
     
    18432447
    18442448\semantics
    1845 The interpretations of a bitwise AND expression are the interpretations of the corresponding function call.
     2449The interpretations of a bitwise AND expression are the interpretations of the corresponding
     2450function call.
    18462451
    18472452
     
    18682473long long unsigned int ?^?( long long unsigned int, long long unsigned int );
    18692474\end{lstlisting}
    1870 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     2475For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     2476rank of \lstinline$int$ there exist
    18712477% Don't use predefined: keep this out of prelude.cf.
    18722478\begin{lstlisting}
     
    18752481
    18762482\semantics
    1877 The interpretations of a bitwise exclusive OR expression are the interpretations of the corresponding function call.
     2483The interpretations of a bitwise exclusive OR expression are the interpretations of the
     2484corresponding function call.
    18782485
    18792486
     
    19002507long long unsigned int ?|?( long long unsigned int, long long unsigned int );
    19012508\end{lstlisting}
    1902 For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the rank of \lstinline$int$ there exist
     2509For every extended integer type \lstinline$X$ with \Index{integer conversion rank} greater than the
     2510rank of \lstinline$int$ there exist
    19032511% Don't use predefined: keep this out of prelude.cf.
    19042512\begin{lstlisting}
     
    19072515
    19082516\semantics
    1909 The interpretations of a bitwise inclusive OR expression are the interpretations of the corresponding function call.
     2517The interpretations of a bitwise inclusive OR expression are the interpretations of the
     2518corresponding function call.
    19102519
    19112520
     
    19192528
    19202529\semantics The operands of the expression ``\lstinline$a && b$'' are treated as
    1921 ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be unambiguous.
    1922 The expression has only one interpretation, which is of type \lstinline$int$.
    1923 \begin{rationale}
    1924 When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has not been redefined for those types, the compiler can optimize away the function calls.
     2530``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b)!=0)$'', which shall both be
     2531unambiguous. The expression has only one interpretation, which is of type \lstinline$int$.
     2532\begin{rationale}
     2533When the operands of a logical expression are values of built-in types, and ``\lstinline$!=$'' has
     2534not been redefined for those types, the compiler can optimize away the function calls.
    19252535
    19262536A common C idiom omits comparisons to \lstinline$0$ in the controlling expressions of loops and
    1927 \lstinline$if$ statements.
    1928 For instance, the loop below iterates as long as \lstinline$rp$ points at a \lstinline$Rational$ value that is non-zero.
    1929 
    1930 \begin{lstlisting}
    1931 extern otype Rational;@\use{Rational}@
     2537\lstinline$if$ statements. For instance, the loop below iterates as long as \lstinline$rp$ points
     2538at a \lstinline$Rational$ value that is non-zero.
     2539
     2540\begin{lstlisting}
     2541extern type Rational;@\use{Rational}@
    19322542extern const Rational 0;@\use{0}@
    19332543extern int ?!=?( Rational, Rational );
    19342544Rational *rp;
     2545
    19352546while ( rp && *rp ) { ... }
    19362547\end{lstlisting}
    1937 The logical expression calls the \lstinline$Rational$ inequality operator, passing it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result.
    1938 In contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$ conversion to \lstinline$*rp$ in the equivalent situation.
    1939 The conversion to \lstinline$int$ would produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was not written with this situation in mind.
     2548The logical expression calls the \lstinline$Rational$ inequality operator, passing
     2549it \lstinline$*rp$ and the \lstinline$Rational 0$, and getting a 1 or 0 as a result. In
     2550contrast, {\CC} would apply a programmer-defined \lstinline$Rational$-to-\lstinline$int$
     2551conversion to \lstinline$*rp$ in the equivalent situation. The conversion to \lstinline$int$ would
     2552produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was
     2553not written with this situation in mind.
    19402554\end{rationale}
    19412555
     
    19512565\semantics
    19522566
    1953 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$'' and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous.
    1954 The expression has only one interpretation, which is of type \lstinline$int$.
     2567The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$''
     2568and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one
     2569interpretation, which is of type \lstinline$int$.
    19552570
    19562571
     
    19652580
    19662581\semantics
    1967 In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and third operands both have an interpretation with \lstinline$void$ type, then the expression has an interpretation with type \lstinline$void$, equivalent to
     2582In the conditional expression\use{?:} ``\lstinline$a?b:c$'', if the second and
     2583third operands both have an interpretation with \lstinline$void$ type, then the expression has an
     2584interpretation with type \lstinline$void$, equivalent to
    19682585\begin{lstlisting}
    19692586( int)(( a)!=0) ? ( void)( b) : ( void)( c)
    19702587\end{lstlisting}
    19712588
    1972 If 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
    1973 \begin{lstlisting}
    1974 forall( otype T ) T cond( int, T, T );
    1975 forall( dtype D ) void * cond( int, D *, void * ), * cond( int, void *, D * );
    1976 forall( dtype D ) _atomic void * cond(
    1977         int, _Atomic D *, _Atomic void * ), * cond( int, _Atomic void *, _Atomic D * );
    1978 forall( dtype D ) const void * cond(
    1979         int, const D *, const void * ), * cond( int, const void *, const D * );
    1980 forall( dtype D ) restrict void * cond(
    1981         int, restrict D *, restrict void * ), * cond( int, restrict void *, restrict D * );
    1982 forall( dtype D ) volatile void * cond(
    1983         int, volatile D *, volatile void * ), * cond( int, volatile void *, volatile D * );
    1984 forall( dtype D ) _Atomic const void * cond(
    1985         int, _Atomic const D *, _Atomic const void * ), * cond( int, _Atomic const void *, _Atomic const D * );
    1986 forall( dtype D ) _Atomic restrict void * cond(
    1987         int, _Atomic restrict D *, _Atomic restrict void * ), * cond( int, _Atomic restrict void *, _Atomic restrict D * );
    1988 forall( dtype D ) _Atomic volatile void * cond(
    1989         int, _Atomic volatile D *, _Atomic volatile void * ), * cond( int, _Atomic volatile void *, _Atomic volatile D * );
    1990 forall( dtype D ) const restrict void * cond(
    1991         int, const restrict D *, const restrict void * ), * cond( int, const restrict void *, const restrict D * );
    1992 forall( dtype D ) const volatile void * cond(
    1993         int, const volatile D *, const volatile void * ), * cond( int, const volatile void *, const volatile D * );
    1994 forall( dtype D ) restrict volatile void * cond(
    1995         int, restrict volatile D *, restrict volatile void * ), * cond( int, restrict volatile void *, restrict volatile D * );
    1996 forall( dtype D ) _Atomic const restrict void * cond(
    1997         int, _Atomic const restrict D *, _Atomic const restrict void * ),
     2589If the second and third operands both have interpretations with non-\lstinline$void$ types, the
     2590expression is treated as if it were the call ``\lstinline$cond((a)!=0, b, c)$'',
     2591with \lstinline$cond$ declared as
     2592\begin{lstlisting}
     2593forall( type T ) T cond( int, T, T );
     2594 
     2595forall( dtype D ) void
     2596        * cond( int, D *, void * ),
     2597        * cond( int, void *, D * );
     2598       
     2599forall( dtype D ) _atomic void
     2600        * cond( int, _Atomic D *, _Atomic void * ),
     2601        * cond( int, _Atomic void *, _Atomic D * );
     2602
     2603forall( dtype D ) const void
     2604        * cond( int, const D *, const void * ),
     2605        * cond( int, const void *, const D * );
     2606
     2607forall( dtype D ) restrict void
     2608        * cond( int, restrict D *, restrict void * ),
     2609        * cond( int, restrict void *, restrict D * );
     2610
     2611forall( dtype D ) volatile void
     2612        * cond( int, volatile D *, volatile void * ),
     2613        * cond( int, volatile void *, volatile D * );
     2614
     2615forall( dtype D ) _Atomic const void
     2616        * cond( int, _Atomic const D *, _Atomic const void * ),
     2617        * cond( int, _Atomic const void *, _Atomic const D * );
     2618
     2619forall( dtype D ) _Atomic restrict void
     2620        * cond( int, _Atomic restrict D *, _Atomic restrict void * ),
     2621        * cond( int, _Atomic restrict void *, _Atomic restrict D * );
     2622
     2623forall( dtype D ) _Atomic volatile void
     2624        * cond( int, _Atomic volatile D *, _Atomic volatile void * ),
     2625        * cond( int, _Atomic volatile void *, _Atomic volatile D * );
     2626
     2627forall( dtype D ) const restrict void
     2628        * cond( int, const restrict D *, const restrict void * ),
     2629        * cond( int, const restrict void *, const restrict D * );
     2630
     2631forall( dtype D ) const volatile void
     2632        * cond( int, const volatile D *, const volatile void * ),
     2633        * cond( int, const volatile void *, const volatile D * );
     2634
     2635forall( dtype D ) restrict volatile void
     2636        * cond( int, restrict volatile D *, restrict volatile void * ),
     2637        * cond( int, restrict volatile void *, restrict volatile D * );
     2638
     2639forall( dtype D ) _Atomic const restrict void
     2640        * cond( int, _Atomic const restrict D *, _Atomic const restrict void * ),
    19982641        * cond( int, _Atomic const restrict void *, _Atomic const restrict D * );
    1999 forall( dtype D ) _Atomic const volatile void * cond(
    2000         int, _Atomic const volatile D *, _Atomic const volatile void * ),
     2642
     2643forall( dtype D ) _Atomic const volatile void
     2644        * cond( int, _Atomic const volatile D *, _Atomic const volatile void * ),
    20012645        * cond( int, _Atomic const volatile void *, _Atomic const volatile D * );
    2002 forall( dtype D ) _Atomic restrict volatile void * cond(
    2003         int, _Atomic restrict volatile D *, _Atomic restrict volatile void * ),
    2004         * cond( int, _Atomic restrict volatile void *, _Atomic restrict volatile D * );
    2005 forall( dtype D ) const restrict volatile void * cond(
    2006         int, const restrict volatile D *, const restrict volatile void * ),
    2007         * cond( int, const restrict volatile void *, const restrict volatile D * );
    2008 forall( dtype D ) _Atomic const restrict volatile void * cond(
    2009         int, _Atomic const restrict volatile D *, _Atomic const restrict volatile void * ),
    2010         * cond( int, _Atomic const restrict volatile void *, _Atomic const restrict volatile D * );
    2011 \end{lstlisting}
    2012 
    2013 \begin{rationale}
    2014 The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and third operands have arithmetic type, and to combine the qualifiers of the second and third operands if they are pointers.
     2646
     2647forall( dtype D ) _Atomic restrict volatile void
     2648        * cond( int, _Atomic restrict volatile D *,
     2649         _Atomic restrict volatile void * ),
     2650        * cond( int, _Atomic restrict volatile void *,
     2651         _Atomic restrict volatile D * );
     2652
     2653forall( dtype D ) const restrict volatile void
     2654        * cond( int, const restrict volatile D *,
     2655         const restrict volatile void * ),
     2656        * cond( int, const restrict volatile void *,
     2657         const restrict volatile D * );
     2658
     2659forall( dtype D ) _Atomic const restrict volatile void
     2660        * cond( int, _Atomic const restrict volatile D *,
     2661         _Atomic const restrict volatile void * ),
     2662        * cond( int, _Atomic const restrict volatile void *,
     2663         _Atomic const restrict volatile D * );
     2664\end{lstlisting}
     2665
     2666\begin{rationale}
     2667The object of the above is to apply the \Index{usual arithmetic conversion}s when the second and
     2668third operands have arithmetic type, and to combine the qualifiers of the second and third operands
     2669if they are pointers.
    20152670\end{rationale}
    20162671
     
    20302685rand() ? cip : vip;
    20312686\end{lstlisting}
    2032 The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
     2687The expression has type \lstinline$const volatile int *$, with safe conversions applied to the second
     2688and third operands to add \lstinline$volatile$ and \lstinline$const$ qualifiers, respectively.
    20332689
    20342690\begin{lstlisting}
     
    20522708
    20532709\rewriterules
    2054 Let ``\(\leftarrow\)'' be any of the assignment operators.
    2055 Then
     2710Let ``\(\leftarrow\)'' be any of the assignment operators. Then
    20562711\use{?=?}\use{?*=?}\use{?/=?}\use{?%=?}\use{?+=?}\use{?-=?}
    20572712\use{?>>=?}\use{?&=?}\use{?^=?}\use{?"|=?}%use{?<<=?}
     
    20612716
    20622717\semantics
    2063 Each interpretation of the left operand of an assignment expression is considered separately.
    2064 For each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class specifier, the expression has one valid interpretation, with the type of the left operand.
    2065 The right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
    2066 For the remaining interpretations, the expression is rewritten, and the interpretations of the assignment expression are the interpretations of the corresponding function call.
    2067 Finally, all interpretations of the expression produced for the different interpretations of the left operand are combined to produce the interpretations of the expression as a whole;
    2068 where interpretations have compatible result types, the best interpretations are selected in the manner described for function call expressions.
     2718Each interpretation of the left operand of an assignment expression is considered separately. For
     2719each interpretation that is a bit-field or is declared with the \lstinline$register$ storage class
     2720specifier, the expression has one valid interpretation, with the type of the left operand. The
     2721right operand is cast to that type, and the assignment expression is ambiguous if either operand is.
     2722For the remaining interpretations, the expression is rewritten, and the interpretations of the
     2723assignment expression are the interpretations of the corresponding function call. Finally, all
     2724interpretations of the expression produced for the different interpretations of the left operand are
     2725combined to produce the interpretations of the expression as a whole; where interpretations have
     2726compatible result types, the best interpretations are selected in the manner described for function
     2727call expressions.
    20692728
    20702729
     
    21312790        ?=?( volatile _Complex long double *, _Complex long double ),
    21322791        ?=?( _Atomic volatile _Complex long double *, _Atomic _Complex long double );
     2792
    21332793forall( ftype FT ) FT
    21342794        * ?=?( FT * volatile *, FT * ),
    21352795        * ?=?( FT * volatile *, forall( ftype F ) F * );
     2796
    21362797forall( ftype FT ) FT const
    21372798        * ?=?( FT const * volatile *, FT const * ),
    21382799        * ?=?( FT const * volatile *, forall( ftype F ) F * );
     2800
    21392801forall( ftype FT ) FT volatile
    21402802        * ?=?( FT volatile * volatile *, FT * ),
    21412803        * ?=?( FT volatile * volatile *, forall( ftype F ) F * );
     2804
    21422805forall( ftype FT ) FT const
    21432806        * ?=?( FT const volatile * volatile *, FT const * ),
    21442807        * ?=?( FT const volatile * volatile *, forall( ftype F ) F * );
     2808
    21452809forall( dtype DT ) DT
    21462810        * ?=?( DT * restrict volatile *, DT * ),
     
    21502814        * ?=?( DT * _Atomic restrict volatile *, void * ),
    21512815        * ?=?( DT * _Atomic restrict volatile *, forall( dtype D ) D * );
     2816
    21522817forall( dtype DT ) DT _Atomic
    21532818        * ?=?( _Atomic DT * restrict volatile *, DT _Atomic * ),
     
    21572822        * ?=?( _Atomic DT * _Atomic restrict volatile *, void * ),
    21582823        * ?=?( _Atomic DT * _Atomic restrict volatile *, forall( dtype D ) D * );
     2824
    21592825forall( dtype DT ) DT const
    21602826        * ?=?( DT const * restrict volatile *, DT const * ),
     
    21642830        * ?=?( DT const * _Atomic restrict volatile *, void const * ),
    21652831        * ?=?( DT const * _Atomic restrict volatile *, forall( dtype D ) D * );
     2832
    21662833forall( dtype DT ) DT restrict
    21672834        * ?=?( restrict DT * restrict volatile *, DT restrict * ),
     
    21712838        * ?=?( restrict DT * _Atomic restrict volatile *, void * ),
    21722839        * ?=?( restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
     2840
    21732841forall( dtype DT ) DT volatile
    21742842        * ?=?( DT volatile * restrict volatile *, DT volatile * ),
     
    21782846        * ?=?( DT volatile * _Atomic restrict volatile *, void volatile * ),
    21792847        * ?=?( DT volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
     2848
    21802849forall( dtype DT ) DT _Atomic const
    21812850        * ?=?( DT _Atomic const * restrict volatile *, DT _Atomic const * ),
     
    21852854        * ?=?( DT _Atomic const * _Atomic restrict volatile *, void const * ),
    21862855        * ?=?( DT _Atomic const * _Atomic restrict volatile *, forall( dtype D ) D * );
     2856
    21872857forall( dtype DT ) DT _Atomic restrict
    21882858        * ?=?( _Atomic restrict DT * restrict volatile *, DT _Atomic restrict * ),
     
    21922862        * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, void * ),
    21932863        * ?=?( _Atomic restrict DT * _Atomic restrict volatile *, forall( dtype D ) D * );
     2864
    21942865forall( dtype DT ) DT _Atomic volatile
    21952866        * ?=?( DT _Atomic volatile * restrict volatile *, DT _Atomic volatile * ),
     
    21992870        * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, void volatile * ),
    22002871        * ?=?( DT _Atomic volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
     2872
    22012873forall( dtype DT ) DT const restrict
    22022874        * ?=?( DT const restrict * restrict volatile *, DT const restrict * ),
     
    22062878        * ?=?( DT const restrict * _Atomic restrict volatile *, void const * ),
    22072879        * ?=?( DT const restrict * _Atomic restrict volatile *, forall( dtype D ) D * );
     2880
    22082881forall( dtype DT ) DT const volatile
    22092882        * ?=?( DT const volatile * restrict volatile *, DT const volatile * ),
     
    22132886        * ?=?( DT const volatile * _Atomic restrict volatile *, void const volatile * ),
    22142887        * ?=?( DT const volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
     2888
    22152889forall( dtype DT ) DT restrict volatile
    22162890        * ?=?( DT restrict volatile * restrict volatile *, DT restrict volatile * ),
     
    22202894        * ?=?( DT restrict volatile * _Atomic restrict volatile *, void volatile * ),
    22212895        * ?=?( DT restrict volatile * _Atomic restrict volatile *, forall( dtype D ) D * );
     2896
    22222897forall( dtype DT ) DT _Atomic const restrict
    22232898        * ?=?( DT _Atomic const restrict * restrict volatile *,
     
    22332908        * ?=?( DT _Atomic const restrict * _Atomic restrict volatile *,
    22342909         forall( dtype D ) D * );
     2910
    22352911forall( dtype DT ) DT _Atomic const volatile
    22362912        * ?=?( DT _Atomic const volatile * restrict volatile *,
     
    22462922        * ?=?( DT _Atomic const volatile * _Atomic restrict volatile *,
    22472923         forall( dtype D ) D * );
     2924
    22482925forall( dtype DT ) DT _Atomic restrict volatile
    22492926        * ?=?( DT _Atomic restrict volatile * restrict volatile *,
     
    22592936        * ?=?( DT _Atomic restrict volatile * _Atomic restrict volatile *,
    22602937         forall( dtype D ) D * );
     2938
    22612939forall( dtype DT ) DT const restrict volatile
    22622940        * ?=?( DT const restrict volatile * restrict volatile *,
     
    22722950        * ?=?( DT const restrict volatile * _Atomic restrict volatile *,
    22732951         forall( dtype D ) D * );
     2952
    22742953forall( dtype DT ) DT _Atomic const restrict volatile
    22752954        * ?=?( DT _Atomic const restrict volatile * restrict volatile *,
     
    22852964        * ?=?( DT _Atomic const restrict volatile * _Atomic restrict volatile *,
    22862965         forall( dtype D ) D * );
     2966
    22872967forall( dtype DT ) void
    22882968        * ?=?( void * restrict volatile *, DT * );
     2969
    22892970forall( dtype DT ) void const
    22902971        * ?=?( void const * restrict volatile *, DT const * );
     2972
    22912973forall( dtype DT ) void volatile
    22922974        * ?=?( void volatile * restrict volatile *, DT volatile * );
     2975
    22932976forall( dtype DT ) void const volatile
    22942977        * ?=?( void const volatile * restrict volatile *, DT const volatile * );
    22952978\end{lstlisting}
    22962979\begin{rationale}
    2297 The pattern of overloadings for simple assignment resembles that of pointer increment and decrement, except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter, instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete type.
     2980The pattern of overloadings for simple assignment resembles that of pointer increment and decrement,
     2981except that the polymorphic pointer assignment functions declare a \lstinline$dtype$ parameter,
     2982instead of a \lstinline$type$ parameter, because the left operand may be a pointer to an incomplete
     2983type.
    22982984\end{rationale}
    22992985
     
    23203006
    23213007\semantics
    2322 The structure assignment functions provide member-wise assignment;
    2323 each non-array member and each element of each array member of the right argument is assigned to the corresponding member or element of the left argument using the assignment function defined for its type.
    2324 All other assignment functions have the same effect as the corresponding C assignment expression.
    2325 \begin{rationale}
    2326 Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
     3008The structure assignment functions provide member-wise assignment; each non-array member and each
     3009element of each array member of the right argument is assigned to the corresponding member or
     3010element of the left argument using the assignment function defined for its type. All other
     3011assignment functions have the same effect as the corresponding C assignment expression.
     3012\begin{rationale}
     3013Note that, by default, union assignment\index{deficiencies!union assignment} uses C semantics---that
     3014is, bitwise copy---even if some of the union members have programmer-defined assignment functions.
    23273015\end{rationale}
    23283016
     
    23323020\predefined
    23333021\begin{lstlisting}
    2334 forall( otype T ) T
     3022forall( type T ) T
    23353023        * ?+=?( T * restrict volatile *, ptrdiff_t ),
    23363024        * ?-=?( T * restrict volatile *, ptrdiff_t ),
    23373025        * ?+=?( T * _Atomic restrict volatile *, ptrdiff_t ),
    23383026        * ?-=?( T * _Atomic restrict volatile *, ptrdiff_t );
    2339 forall( otype T ) T _Atomic
     3027
     3028forall( type T ) T _Atomic
    23403029        * ?+=?( T _Atomic * restrict volatile *, ptrdiff_t ),
    23413030        * ?-=?( T _Atomic * restrict volatile *, ptrdiff_t ),
    23423031        * ?+=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t ),
    23433032        * ?-=?( T _Atomic * _Atomic restrict volatile *, ptrdiff_t );
    2344 forall( otype T ) T const
     3033
     3034forall( type T ) T const
    23453035        * ?+=?( T const * restrict volatile *, ptrdiff_t ),
    23463036        * ?-=?( T const * restrict volatile *, ptrdiff_t ),
    23473037        * ?+=?( T const * _Atomic restrict volatile *, ptrdiff_t ),
    23483038        * ?-=?( T const * _Atomic restrict volatile *, ptrdiff_t );
    2349 forall( otype T ) T restrict
     3039
     3040forall( type T ) T restrict
    23503041        * ?+=?( T restrict * restrict volatile *, ptrdiff_t ),
    23513042        * ?-=?( T restrict * restrict volatile *, ptrdiff_t ),
    23523043        * ?+=?( T restrict * _Atomic restrict volatile *, ptrdiff_t ),
    23533044        * ?-=?( T restrict * _Atomic restrict volatile *, ptrdiff_t );
    2354 forall( otype T ) T volatile
     3045
     3046forall( type T ) T volatile
    23553047        * ?+=?( T volatile * restrict volatile *, ptrdiff_t ),
    23563048        * ?-=?( T volatile * restrict volatile *, ptrdiff_t ),
    23573049        * ?+=?( T volatile * _Atomic restrict volatile *, ptrdiff_t ),
    23583050        * ?-=?( T volatile * _Atomic restrict volatile *, ptrdiff_t );
    2359 forall( otype T ) T _Atomic const
     3051
     3052forall( type T ) T _Atomic const
    23603053        * ?+=?( T _Atomic const restrict volatile *, ptrdiff_t ),
    23613054        * ?-=?( T _Atomic const restrict volatile *, ptrdiff_t ),
    23623055        * ?+=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t ),
    23633056        * ?-=?( T _Atomic const _Atomic restrict volatile *, ptrdiff_t );
    2364 forall( otype T ) T _Atomic restrict
     3057
     3058forall( type T ) T _Atomic restrict
    23653059        * ?+=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
    23663060        * ?-=?( T _Atomic restrict * restrict volatile *, ptrdiff_t ),
    23673061        * ?+=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t ),
    23683062        * ?-=?( T _Atomic restrict * _Atomic restrict volatile *, ptrdiff_t );
    2369 forall( otype T ) T _Atomic volatile
     3063
     3064forall( type T ) T _Atomic volatile
    23703065        * ?+=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
    23713066        * ?-=?( T _Atomic volatile * restrict volatile *, ptrdiff_t ),
    23723067        * ?+=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t ),
    23733068        * ?-=?( T _Atomic volatile * _Atomic restrict volatile *, ptrdiff_t );
    2374 forall( otype T ) T const restrict
     3069
     3070forall( type T ) T const restrict
    23753071        * ?+=?( T const restrict * restrict volatile *, ptrdiff_t ),
    23763072        * ?-=?( T const restrict * restrict volatile *, ptrdiff_t ),
    23773073        * ?+=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    23783074        * ?-=?( T const restrict * _Atomic restrict volatile *, ptrdiff_t );
    2379 forall( otype T ) T const volatile
     3075
     3076forall( type T ) T const volatile
    23803077        * ?+=?( T const volatile * restrict volatile *, ptrdiff_t ),
    23813078        * ?-=?( T const volatile * restrict volatile *, ptrdiff_t ),
    23823079        * ?+=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    23833080        * ?-=?( T const volatile * _Atomic restrict volatile *, ptrdiff_t );
    2384 forall( otype T ) T restrict volatile
     3081
     3082forall( type T ) T restrict volatile
    23853083        * ?+=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
    23863084        * ?-=?( T restrict volatile * restrict volatile *, ptrdiff_t ),
    23873085        * ?+=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    23883086        * ?-=?( T restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    2389 forall( otype T ) T _Atomic const restrict
     3087
     3088forall( type T ) T _Atomic const restrict
    23903089        * ?+=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
    23913090        * ?-=?( T _Atomic const restrict * restrict volatile *, ptrdiff_t ),
    23923091        * ?+=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t ),
    23933092        * ?-=?( T _Atomic const restrict * _Atomic restrict volatile *, ptrdiff_t );
    2394 forall( otype T ) T _Atomic const volatile
     3093
     3094forall( type T ) T _Atomic const volatile
    23953095        * ?+=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
    23963096        * ?-=?( T _Atomic const volatile * restrict volatile *, ptrdiff_t ),
    23973097        * ?+=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t ),
    23983098        * ?-=?( T _Atomic const volatile * _Atomic restrict volatile *, ptrdiff_t );
    2399 forall( otype T ) T _Atomic restrict volatile
     3099
     3100forall( type T ) T _Atomic restrict volatile
    24003101        * ?+=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
    24013102        * ?-=?( T _Atomic restrict volatile * restrict volatile *, ptrdiff_t ),
    24023103        * ?+=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    24033104        * ?-=?( T _Atomic restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    2404 forall( otype T ) T const restrict volatile
     3105
     3106forall( type T ) T const restrict volatile
    24053107        * ?+=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
    24063108        * ?-=?( T const restrict volatile * restrict volatile *, ptrdiff_t ),
    24073109        * ?+=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t ),
    24083110        * ?-=?( T const restrict volatile * _Atomic restrict volatile *, ptrdiff_t );
    2409 forall( otype T ) T _Atomic const restrict volatile
     3111
     3112forall( type T ) T _Atomic const restrict volatile
    24103113        * ?+=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
    24113114        * ?-=?( T _Atomic const restrict volatile * restrict volatile *, ptrdiff_t ),
     
    26183321\semantics
    26193322In the comma expression ``\lstinline$a, b$'', the first operand is interpreted as
    2620 ``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}.
    2621 The interpretations of the expression are the interpretations of the second operand.
     3323``\lstinline$( void )(a)$'', which shall be unambiguous\index{ambiguous interpretation}. The
     3324interpretations of the expression are the interpretations of the second operand.
    26223325
    26233326
     
    26343337
    26353338\constraints
    2636 If an identifier has \Index{no linkage}, there shall be no more than one declaration of the identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the same name space, except that:
     3339If an identifier has \Index{no linkage}, there shall be no more than one declaration of the
     3340identifier ( in a declarator or type specifier ) with compatible types in the same scope and in the
     3341same name space, except that:
    26373342\begin{itemize}
    2638 \item a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type;
    2639 \item tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
     3343\item
     3344a typedef name may be redefined to denote the same type as it currently does, provided that type is
     3345not a variably modified type;
     3346\item
     3347tags may be redeclared as specified in section 6.7.2.3 of the {\c11} standard.
    26403348\end{itemize}
    26413349\begin{rationale}
    2642 This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow overloading.
    2643 \end{rationale}
    2644 
    2645 An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list.
    2646 \begin{rationale}
    2647 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters.
    2648 This avoids an ambiguity between old-style function declarations and new-style function prototypes:
     3350This constraint adds the phrase ``with compatible types'' to the {\c11} constraint, to allow
     3351overloading.
     3352\end{rationale}
     3353
     3354An identifier declared by a type declaration shall not be redeclared as a parameter in a function
     3355definition whose declarator includes an identifier list.
     3356\begin{rationale}
     3357This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters. This
     3358avoids an ambiguity between old-style function declarations and new-style function prototypes:
    26493359\begin{lstlisting}
    26503360void f( Complex,        // ... 3000 characters ...
    26513361void g( Complex,        // ... 3000 characters ...
    2652 int Complex;
    2653 { ... }
    2654 \end{lstlisting}
    2655 Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the second.
     3362int Complex; { ... }
     3363\end{lstlisting}
     3364Without the rule, \lstinline$Complex$ would be a type in the first case, and a parameter name in the
     3365second.
    26563366\end{rationale}
    26573367
     
    26723382
    26733383\semantics
    2674 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union specifiers with tags.
     3384\CFA extends the {\c11} definition of \define{anonymous structure} to include structure
     3385specifiers with tags, and extends the {\c11} definition of \define{anonymous union} to include union
     3386specifiers with tags.
    26753387\begin{rationale}
    26763388This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}.
     
    26893401cp.x = 0;
    26903402cp.color = RED;
     3403
    26913404struct literal {@\impl{literal}@
    26923405        enum { NUMBER, STRING } tag;
    26933406        union {
    2694                 double n;
    2695                 char *s;
     3407         double n;
     3408         char *s;
    26963409        };
    26973410};
     
    27153428\begin{comment}
    27163429\constraints
    2717 If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier} declares a structure or union tag, the types of the members of the structure or union shall not use any of the type identifiers declared by the \nonterm{type-parameter-list}.
    2718 \begin{rationale}
    2719 This 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.
    2720 \begin{lstlisting}
    2721 forall( otype T ) struct Pair { T a, b;
    2722 } mkPair( T, T ); // illegal
    2723 \end{lstlisting}
    2724 If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the members' type be?
     3430If the \nonterm{declaration-specifiers} of a declaration that contains a \nonterm{forall-specifier}
     3431declares a structure or union tag, the types of the members of the structure or union shall not use
     3432any of the type identifiers declared by the \nonterm{type-parameter-list}.
     3433\begin{rationale}
     3434This sort of declaration is illegal because the scope of the type identifiers ends at the end of the
     3435declaration, but the scope of the structure tag does not.
     3436\begin{lstlisting}
     3437forall( type T ) struct Pair { T a, b; } mkPair( T, T ); // illegal
     3438\end{lstlisting}
     3439If an instance of \lstinline$struct Pair$ was declared later in the current scope, what would the
     3440members' type be?
    27253441\end{rationale}
    27263442\end{comment}
    27273443
    27283444\semantics
    2729 The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type identifiers, function and object identifiers with \Index{no linkage}.
     3445The \nonterm{type-parameter-list}s and assertions of the \nonterm{forall-specifier}s declare type
     3446identifiers, function and object identifiers with \Index{no linkage}.
    27303447
    27313448If, in the declaration ``\lstinline$T D$'', \lstinline$T$ contains \nonterm{forall-specifier}s and
     
    27333450\begin{lstlisting}
    27343451D( @\normalsize\nonterm{parameter-type-list}@ )
    2735 \end{lstlisting} then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred parameter} of the function declarator if and only if it is not an inferred parameter of a function declarator in \lstinline$D$, and it is used in the type of a parameter in the following
     3452\end{lstlisting}
     3453then a type identifier declared by one of the \nonterm{forall-specifier}s is an \define{inferred
     3454parameter} of the function declarator if and only if it is not an inferred parameter of a function
     3455declarator in \lstinline$D$, and it is used in the type of a parameter in the following
    27363456\nonterm{type-parameter-list} or it and an inferred parameter are used as arguments of a
    2737 \Index{specification} in one of the \nonterm{forall-specifier}s.
    2738 The identifiers declared by assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s of that function declarator.
     3457\Index{specification} in one of the \nonterm{forall-specifier}s. The identifiers declared by
     3458assertions that use an inferred parameter of a function declarator are \Index{assertion parameter}s
     3459of that function declarator.
    27393460
    27403461\begin{comment}
    27413462\begin{rationale}
    2742 Since every inferred parameter is used by some parameter, inference can be understood as a single bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
     3463Since every inferred parameter is used by some parameter, inference can be understood as a single
     3464bottom-up pass over the expression tree, that only needs to apply local reasoning at each node.
    27433465
    27443466If this restriction were lifted, it would be possible to write
    27453467\begin{lstlisting}
    2746 forall( otype T ) T * alloc( void );@\use{alloc}@ int *p = alloc();
     3468forall( type T ) T * alloc( void );@\use{alloc}@
     3469int *p = alloc();
    27473470\end{lstlisting}
    27483471Here \lstinline$alloc()$ would receive \lstinline$int$ as an inferred argument, and return an
    2749 \lstinline$int *$.
    2750 In general, if a call to \lstinline$alloc()$ is a subexpression of an expression involving polymorphic functions and overloaded identifiers, there could be considerable distance between the call and the subexpression that causes \lstinline$T$ to be bound.
     3472\lstinline$int *$. In general, if a call to \lstinline$alloc()$ is a subexpression of an expression
     3473involving polymorphic functions and overloaded identifiers, there could be considerable distance
     3474between the call and the subexpression that causes \lstinline$T$ to be bound.
    27513475
    27523476With the current restriction, \lstinline$alloc()$ must be given an argument that determines
    27533477\lstinline$T$:
    27543478\begin{lstlisting}
    2755 forall( otype T ) T * alloc( T initial_value );@\use{alloc}@
     3479forall( type T ) T * alloc( T initial_value );@\use{alloc}@
    27563480\end{lstlisting}
    27573481\end{rationale}
    27583482\end{comment}
    27593483
    2760 If a function declarator is part of a function definition, its inferred parameters and assertion parameters have \Index{block scope};
    2761 otherwise, identifiers declared by assertions have a
     3484If a function declarator is part of a function definition, its inferred parameters and assertion
     3485parameters have \Index{block scope}; otherwise, identifiers declared by assertions have a
    27623486\define{declaration scope}, which terminates at the end of the \nonterm{declaration}.
    27633487
    27643488A function type that has at least one inferred parameter is a \define{polymorphic function} type.
    2765 Function types with no inferred parameters are \define{monomorphic function} types.
    2766 One function type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the same number of inferred parameters and fewer of its explicit parameters have types that depend on an inferred parameter.
    2767 
    2768 The names of inferred parameters and the order of identifiers in forall specifiers are not relevant to polymorphic function type compatibility.
    2769 Let $f$ and $g$ be two polymorphic function types with the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$ and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s.
    2770 Let $f'$ be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$.
    2771 Then $f$ and $g$ are
    2772 \Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same identifier and compatible type, and vice versa.
     3489Function types with no inferred parameters are \define{monomorphic function} types. One function
     3490type is \define{less polymorphic} than another if it has fewer inferred parameters, or if it has the
     3491same number of inferred parameters and fewer of its explicit parameters have types that depend on an
     3492inferred parameter.
     3493
     3494The names of inferred parameters and the order of identifiers in forall specifiers are not relevant
     3495to polymorphic function type compatibility. Let $f$ and $g$ be two polymorphic function types with
     3496the same number of inferred parameters, and let $f_i$ and $g_i$ be the inferred parameters of $f$
     3497and $g$ in their order of occurance in the function types' \nonterm{parameter-type-list}s. Let $f'$
     3498be $f$ with every occurrence of $f_i$ replaced by $g_i$, for all $i$. Then $f$ and $g$ are
     3499\Index{compatible type}s if $f'$'s and $g$'s return types and parameter lists are compatible, and if
     3500for every assertion parameter of $f'$ there is an assertion parameter in $g$ with the same
     3501identifier and compatible type, and vice versa.
    27733502
    27743503\examples
     
    27763505\begin{lstlisting}
    27773506int fi( int );
    2778 forall( otype T ) T fT( T );
     3507forall( type T ) T fT( T );
    27793508\end{lstlisting}
    27803509\lstinline$fi()$ takes an \lstinline$int$ and returns an \lstinline$int$. \lstinline$fT()$ takes a
     
    27823511\begin{lstlisting}
    27833512int (*pfi )( int ) = fi;
    2784 forall( otype T ) T (*pfT )( T ) = fT;
    2785 \end{lstlisting}
    2786 \lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not polymorphic, but the function it points at is.
     3513forall( type T ) T (*pfT )( T ) = fT;
     3514\end{lstlisting}
     3515\lstinline$pfi$ and \lstinline$pfT$ are pointers to functions. \lstinline$pfT$ is not
     3516polymorphic, but the function it points at is.
    27873517\begin{lstlisting}
    27883518int (*fvpfi( void ))( int ) {
    27893519        return pfi;
    27903520}
    2791 forall( otype T ) T (*fvpfT( void ))( T ) {
     3521forall( type T ) T (*fvpfT( void ))( T ) {
    27923522        return pfT;
    27933523}
    27943524\end{lstlisting}
    2795 \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.
    2796 \begin{lstlisting}
    2797 forall( otype T ) int ( *fTpfi( T ) )( int );
    2798 forall( otype T ) T ( *fTpfT( T ) )( T );
    2799 forall( otype T, otype U ) U ( *fTpfU( T ) )( U );
    2800 \end{lstlisting}
    2801 \lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function taking an integer and returning an integer.
    2802 It could return \lstinline$pfi$. \lstinline$fTpfT()$ is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
    2803 \lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$.
    2804 For instance, in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
     3525\lstinline$fvpfi()$ and \lstinline$fvpfT()$ are functions taking no arguments and returning pointers
     3526to functions. \lstinline$fvpfT()$ is monomorphic, but the function that its return value points
     3527at is polymorphic.
     3528\begin{lstlisting}
     3529forall( type T ) int ( *fTpfi( T ) )( int );
     3530forall( type T ) T ( *fTpfT( T ) )( T );
     3531forall( type T, type U ) U ( *fTpfU( T ) )( U );
     3532\end{lstlisting}
     3533\lstinline$fTpfi()$ is a polymorphic function that returns a pointer to a monomorphic function
     3534taking an integer and returning an integer. It could return \lstinline$pfi$. \lstinline$fTpfT()$
     3535is subtle: it is a polymorphic function returning a \emph{monomorphic} function taking and returning
     3536\lstinline$T$, where \lstinline$T$ is an inferred parameter of \lstinline$fTpfT()$. For instance,
     3537in the expression ``\lstinline$fTpfT(17)$'', \lstinline$T$ is inferred to be \lstinline$int$, and
     3538the returned value would have type \lstinline$int ( * )( int )$. ``\lstinline$fTpfT(17)(13)$'' and
    28053539``\lstinline$fTpfT("yes")("no")$'' are legal, but ``\lstinline$fTpfT(17)("no")$'' is illegal.
    2806 \lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
     3540\lstinline$fTpfU()$ is polymorphic ( in type \lstinline$T$), and returns a pointer to a function that
     3541is polymorphic ( in type \lstinline$U$). ``\lstinline$f5(17)("no")$'' is a legal expression of type
    28073542\lstinline$char *$.
    28083543\begin{lstlisting}
    2809 forall( otype T, otype U, otype V ) U * f( T *, U, V * const );
    2810 forall( otype U, otype V, otype W ) U * g( V *, U, W * const );
    2811 \end{lstlisting}
    2812 The functions \lstinline$f()$ and \lstinline$g()$ have compatible types.
    2813 Let \(f\) and \(g\) be their types;
    2814 then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
    2815 = \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$.
    2816 Replacing every \(f_i\) by \(g_i\) in \(f\) gives
    2817 \begin{lstlisting}
    2818 forall( otype V, otype U, otype W ) U * f( V *, U, W * const );
    2819 \end{lstlisting} which has a return type and parameter list that is compatible with \(g\).
    2820 \begin{rationale}
    2821 The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave room for inferred parameters of ordinary types in case parameterized types get added one day.
     3544forall( type T, type U, type V ) U * f( T *, U, V * const );
     3545forall( type U, type V, type W ) U * g( V *, U, W * const );
     3546\end{lstlisting}
     3547The functions \lstinline$f()$ and \lstinline$g()$ have compatible types. Let \(f\) and \(g\) be
     3548their types; then \(f_1\) = \lstinline$T$, \(f_2\) = \lstinline$U$, \(f_3\) = \lstinline$V$, \(g_1\)
     3549= \lstinline$V$, \(g_2\) = \lstinline$U$, and \(g_3\) = \lstinline$W$. Replacing every \(f_i\)
     3550by \(g_i\) in \(f\) gives
     3551\begin{lstlisting}
     3552forall( type V, type U, type W ) U * f( V *, U, W * const );
     3553\end{lstlisting}
     3554which has a return type and parameter list that is compatible with \(g\).
     3555\begin{rationale}
     3556The word ``\lstinline$type$'' in a forall specifier is redundant at the moment, but I want to leave
     3557room for inferred parameters of ordinary types in case parameterized types get added one day.
    28223558
    28233559Even without parameterized types, I might try to allow
    28243560\begin{lstlisting}
    28253561forall( int n ) int sum( int vector[n] );
    2826 \end{lstlisting} but C currently rewrites array parameters as pointer parameters, so the effects of such a change require more thought.
    2827 \end{rationale}
    2828 
    2829 \begin{rationale}
    2830 A polymorphic declaration must do two things: it must introduce type parameters, and it must apply assertions to those types.
    2831 Adding this to existing C declaration syntax and semantics was delicate, and not entirely successful.
    2832 
    2833 C depends on declaration-before-use, so a forall specifier must introduce type names before they can be used in the declaration specifiers.
    2834 This could be done by making the forall specifier part of the declaration specifiers, or by making it a new introductory clause of declarations.
    2835 
    2836 Assertions are also part of polymorphic function types, because it must be clear which functions have access to the assertion parameters declared by the assertions.
    2837 All attempts to put assertions inside an introductory clause produced complex semantics and confusing code.
    2838 Building them into the declaration specifiers could be done by placing them in the function's parameter list, or in a forall specifier that is a declaration specifier.
    2839 Assertions are also used with type parameters of specifications, and by type declarations.
    2840 For consistency's sake it seems best to attach assertions to the type declarations in forall specifiers, which means that forall specifiers must be declaration specifiers.
     3562\end{lstlisting}
     3563but C currently rewrites array parameters as pointer parameters, so the effects of such a change
     3564require more thought.
     3565\end{rationale}
     3566
     3567\begin{rationale}
     3568A polymorphic declaration must do two things: it must introduce type parameters, and it must apply
     3569assertions to those types. Adding this to existing C declaration syntax and semantics was delicate,
     3570and not entirely successful.
     3571
     3572C depends on declaration-before-use, so a forall specifier must introduce type names before they can
     3573be used in the declaration specifiers. This could be done by making the forall specifier part of
     3574the declaration specifiers, or by making it a new introductory clause of declarations.
     3575
     3576Assertions are also part of polymorphic function types, because it must be clear which functions
     3577have access to the assertion parameters declared by the assertions. All attempts to put assertions
     3578inside an introductory clause produced complex semantics and confusing code. Building them into the
     3579declaration specifiers could be done by placing them in the function's parameter list, or in a
     3580forall specifier that is a declaration specifier. Assertions are also used with type parameters of
     3581specifications, and by type declarations. For consistency's sake it seems best to attach assertions
     3582to the type declarations in forall specifiers, which means that forall specifiers must be
     3583declaration specifiers.
    28413584\end{rationale}
    28423585%HERE
     
    28523595
    28533596\constraints
    2854 \lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and pointer types whose referenced type is an object type shall not be restrict-qualified.
     3597\lstinline$restrict$\index{register@{\lstinline$restrict$}} Types other than type parameters and
     3598pointer types whose referenced type is an object type shall not be restrict-qualified.
    28553599
    28563600\semantics
    2857 An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not establish any special semantics in that case.
    2858 
    2859 \begin{rationale}
    2860 \CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be passed to polymorphic functions.
    2861 \end{rationale}
    2862 
    2863 \lstinline$lvalue$ may be used to qualify the return type of a function type.
    2864 Let \lstinline$T$ be an unqualified version of a type;
    2865 then the result of calling a function with return type
     3601An object's type may be a restrict-qualified type parameter. \lstinline$restrict$ does not
     3602establish any special semantics in that case.
     3603
     3604\begin{rationale}
     3605\CFA loosens the constraint on the restrict qualifier so that restrict-qualified pointers may be
     3606passed to polymorphic functions.
     3607\end{rationale}
     3608
     3609\lstinline$lvalue$ may be used to qualify the return type of a function type. Let \lstinline$T$ be
     3610an unqualified version of a type; then the result of calling a function with return type
    28663611\lstinline$lvalue T$ is a \Index{modifiable lvalue} of type \lstinline$T$.
    2867 \lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to indicate that the function result is a constant or volatile lvalue.
    2868 \begin{rationale}
    2869 The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the return type of a function if the \lstinline$lvalue$ qualifier is also used.
    2870 \end{rationale}
    2871 
    2872 An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue;
    2873 the result of the expression is an lvalue.
    2874 
    2875 \begin{rationale}
    2876 \lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to object of type \lstinline$T$) type.
    2877 Reference types have four uses in {\CC}.
     3612\lstinline$const$\use{const} and \lstinline$volatile$\use{volatile} qualifiers may also be added to
     3613indicate that the function result is a constant or volatile lvalue.
     3614\begin{rationale}
     3615The \lstinline$const$ and \lstinline$volatile$ qualifiers can only be sensibly used to qualify the
     3616return type of a function if the \lstinline$lvalue$ qualifier is also used.
     3617\end{rationale}
     3618
     3619An {lvalue}-qualified type may be used in a \Index{cast expression} if the operand is an lvalue; the
     3620result of the expression is an lvalue.
     3621
     3622\begin{rationale}
     3623\lstinline$lvalue$ provides some of the functionality of {\CC}'s ``\lstinline$T&$'' ( reference to
     3624object of type \lstinline$T$) type. Reference types have four uses in {\CC}.
    28783625\begin{itemize}
    28793626\item
     
    28823629
    28833630\item
    2884 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting some of the functionality of the Pascal \lstinline$with$ statement.
    2885 The following {\CC} code gives an example.
     3631A reference can be used to define an alias for a complicated lvalue expression, as a way of getting
     3632some of the functionality of the Pascal \lstinline$with$ statement. The following {\CC} code gives
     3633an example.
    28863634\begin{lstlisting}
    28873635{
     
    28933641
    28943642\item
    2895 A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument.
    2896 This is most useful for user-defined assignment operators.
    2897 In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and the two expressions
     3643A reference parameter can be used to allow a function to modify an argument without forcing the
     3644caller to pass the address of the argument. This is most useful for user-defined assignment
     3645operators. In {\CC}, plain assignment is done by a function called ``\lstinline$operator=$'', and
     3646the two expressions
    28983647\begin{lstlisting}
    28993648a = b;
    29003649operator=( a, b );
    2901 \end{lstlisting} are equivalent.
    2902 If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''.
    2903 It cannot have type
     3650\end{lstlisting}
     3651are equivalent. If \lstinline$a$ and \lstinline$b$ are of type \lstinline$T$, then the first
     3652parameter of \lstinline$operator=$ must have type ``\lstinline$T&$''. It cannot have type
    29043653\lstinline$T$, because then assignment couldn't alter the variable, and it can't have type
    29053654``\lstinline$T *$'', because the assignment would have to be written ``\lstinline$&a = b;$''.
    29063655
    2907 In the case of user-defined operators, this could just as well be handled by using pointer types and by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
    2908 ``\lstinline$operator=(&( a), b )$''.
    2909 Reference parameters of ``normal'' functions are Bad Things, because they remove a useful property of C function calls: an argument can only be modified by a function if it is preceded by ``\lstinline$&$''.
     3656In the case of user-defined operators, this could just as well be handled by using pointer types and
     3657by changing the rewrite rules so that ``\lstinline$a = b;$'' is equivalent to
     3658``\lstinline$operator=(&( a), b )$''. Reference parameters of ``normal'' functions are Bad Things,
     3659because they remove a useful property of C function calls: an argument can only be modified by a
     3660function if it is preceded by ``\lstinline$&$''.
    29103661
    29113662\item
     
    29173668void fiddle( const Thing & );
    29183669\end{lstlisting}
    2919 If the second form is used, then constructors and destructors are not invoked to create a temporary variable at the call site ( and it is bad style for the caller to make any assumptions about such things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by aliases.
    2920 The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too large or their constructors or destructors are too expensive.
    2921 An implementation may switch between them without causing trouble for well-behaved clients.
    2922 This leaves the implementor to define ``too large'' and ``too expensive''.
     3670If the second form is used, then constructors and destructors are not invoked to create a temporary
     3671variable at the call site ( and it is bad style for the caller to make any assumptions about such
     3672things), and within \lstinline$fiddle$ the parameter is subject to the usual problems caused by
     3673aliases. The reference form might be chosen for efficiency's sake if \lstinline$Thing$s are too
     3674large or their constructors or destructors are too expensive. An implementation may switch between
     3675them without causing trouble for well-behaved clients. This leaves the implementor to define ``too
     3676large'' and ``too expensive''.
    29233677
    29243678I propose to push this job onto the compiler by allowing it to implement
    29253679\begin{lstlisting}
    29263680void fiddle( const volatile Thing );
    2927 \end{lstlisting} with call-by-reference.
    2928 Since it knows all about the size of \lstinline$Thing$s and the parameter passing mechanism, it should be able to come up with a better definition of ``too large'', and may be able to make a good guess at ``too expensive''.
     3681\end{lstlisting}
     3682with call-by-reference. Since it knows all about the size of \lstinline$Thing$s and the parameter
     3683passing mechanism, it should be able to come up with a better definition of ``too large'', and may
     3684be able to make a good guess at ``too expensive''.
    29293685\end{itemize}
    29303686
    2931 In summary, since references are only really necessary for returning lvalues, I'll only provide lvalue functions.
     3687In summary, since references are only really necessary for returning lvalues, I'll only provide
     3688lvalue functions.
    29323689\end{rationale}
    29333690
     
    29363693\subsection{Initialization}
    29373694
    2938 An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the object being initialized.
    2939 An expression used in an \nonterm{initializer-list} is treated as being cast to the type of the aggregate member that it initializes.
    2940 In either case the cast must have a single unambiguous \Index{interpretation}.
     3695An expression that is used as an \nonterm{initializer} is treated as being cast to the type of the
     3696object being initialized. An expression used in an \nonterm{initializer-list} is treated as being
     3697cast to the type of the aggregate member that it initializes. In either case the cast must have a
     3698single unambiguous \Index{interpretation}.
    29413699
    29423700
     
    29593717\end{syntax}
    29603718\begin{rationale}
    2961 The declarations allowed in a specification are much the same as those allowed in a structure, except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
     3719The declarations allowed in a specification are much the same as those allowed in a structure,
     3720except that bit fields are not allowed, and \Index{incomplete type}s and function types are allowed.
    29623721\end{rationale}
    29633722
    29643723\semantics
    2965 A \define{specification definition} defines a name for a \define{specification}: a parameterized collection of object and function declarations.
     3724A \define{specification definition} defines a name for a \define{specification}: a parameterized
     3725collection of object and function declarations.
    29663726
    29673727The declarations in a specification consist of the declarations in the
    29683728\nonterm{spec-declaration-list} and declarations produced by any assertions in the
    2969 \nonterm{spec-parameter-list}.
    2970 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the composite type constructed from the two types.
     3729\nonterm{spec-parameter-list}. If the collection contains two declarations that declare the same
     3730identifier and have compatible types, they are combined into one declaration with the composite type
     3731constructed from the two types.
    29713732
    29723733
     
    29863747
    29873748\constraints
    2988 The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name of a specification.
    2989 The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}.
    2990 If the
    2991 \nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type name of an \Index{object type};
    2992 if it uses \lstinline$dtype$, the argument shall be the type name of an object type or an \Index{incomplete type};
    2993 and if it uses \lstinline$ftype$, the argument shall be the type name of a \Index{function type}.
     3749The \nonterm{identifier} in an assertion that is not a \nonterm{spec-declaration} shall be the name
     3750of a specification. The \nonterm{type-name-list} shall contain one \nonterm{type-name} argument for
     3751each \nonterm{type-parameter} in that specification's \nonterm{spec-parameter-list}. If the
     3752\nonterm{type-parameter} uses type-class \lstinline$type$\use{type}, the argument shall be the type
     3753name of an \Index{object type}; if it uses \lstinline$dtype$, the argument shall be the type name of
     3754an object type or an \Index{incomplete type}; and if it uses \lstinline$ftype$, the argument shall
     3755be the type name of a \Index{function type}.
    29943756
    29953757\semantics
     
    29973759\define{assertion parameters}.
    29983760
    2999 The assertion parameters produced by an assertion that applies the name of a specification to type arguments are found by taking the declarations specified in the specification and treating each of the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
    3000 
    3001 The collection of assertion parameters produced by the \nonterm{assertion-list} are found by combining the declarations produced by each assertion.
    3002 If the collection contains two declarations that declare the same identifier and have compatible types, they are combined into one declaration with the \Index{composite type} constructed from the two types.
     3761The assertion parameters produced by an assertion that applies the name of a specification to type
     3762arguments are found by taking the declarations specified in the specification and treating each of
     3763the specification's parameters as a synonym for the corresponding \nonterm{type-name} argument.
     3764
     3765The collection of assertion parameters produced by the \nonterm{assertion-list} are found by
     3766combining the declarations produced by each assertion. If the collection contains two declarations
     3767that declare the same identifier and have compatible types, they are combined into one declaration
     3768with the \Index{composite type} constructed from the two types.
    30033769
    30043770\examples
    30053771\begin{lstlisting}
    3006 forall( otype T | T ?*?( T, T ))@\use{?*?}@
     3772forall( type T | T ?*?( T, T ))@\use{?*?}@
    30073773T square( T val ) {@\impl{square}@
    30083774        return val + val;
    30093775}
    3010 trait summable( otype T ) {@\impl{summable}@
     3776
     3777context summable( type T ) {@\impl{summable}@
    30113778        T ?+=?( T *, T );@\use{?+=?}@
    30123779        const T 0;@\use{0}@
    30133780};
    3014 trait list_of( otype List, otype Element ) {@\impl{list_of}@
     3781context list_of( type List, type Element ) {@\impl{list_of}@
    30153782        Element car( List );
    30163783        List cdr( List );
     
    30193786        int is_nil( List );
    30203787};
    3021 trait sum_list( otype List, otype Element | summable( Element ) | list_of( List, Element ) ) {};
    3022 \end{lstlisting}
    3023 \lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added up.
    3024 The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion parameters
     3788context sum_list( type List, type Element | summable( Element ) | list_of( List, Element ) ) {};
     3789\end{lstlisting}
     3790\lstinline$sum_list$ contains seven declarations, which describe a list whose elements can be added
     3791up. The assertion ``\lstinline$|sum_list( i_list, int )$''\use{sum_list} produces the assertion
     3792parameters
    30253793\begin{lstlisting}
    30263794int ?+=?( int *, int );
     
    30573825
    30583826\constraints
    3059 If a type declaration has block scope, and the declared identifier has external or internal linkage, the declaration shall have no initializer for the identifier.
     3827If a type declaration has block scope, and the declared identifier has external or internal linkage,
     3828the declaration shall have no initializer for the identifier.
    30603829
    30613830\semantics
    3062 A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type name} for a type incompatible with all other types.
    3063 
    3064 An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}.
    3065 Identifiers declared with type-class \lstinline$type$\use{type} are \Index{object type}s;
    3066 those declared with type-class
    3067 \lstinline$dtype$\use{dtype} are \Index{incomplete type}s;
    3068 and those declared with type-class
    3069 \lstinline$ftype$\use{ftype} are \Index{function type}s.
    3070 The identifier has \Index{block scope} that terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains the \nonterm{type-parameter}.
    3071 
    3072 A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after the end of the initializer.
    3073 The type in the initializer is called the \define{implementation
    3074   type}.
    3075 Within the scope of the declaration, \Index{implicit conversion}s can be performed between the defined type and the implementation type, and between pointers to the defined type and pointers to the implementation type.
    3076 
    3077 A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}.
    3078 If a
    3079 \Index{translation unit} or \Index{block} contains one or more such declarations for an identifier, it must contain exactly one definition of the identifier ( but not in an enclosed block, which would define a new type known only within that block).
     3831A \nonterm{type-parameter} or a \nonterm{type-declarator} declares an identifier to be a \Index{type
     3832name} for a type incompatible with all other types.
     3833
     3834An identifier declared by a \nonterm{type-parameter} has \Index{no linkage}. Identifiers declared
     3835with type-class \lstinline$type$\use{type} are \Index{object type}s; those declared with type-class
     3836\lstinline$dtype$\use{dtype} are \Index{incomplete type}s; and those declared with type-class
     3837\lstinline$ftype$\use{ftype} are \Index{function type}s. The identifier has \Index{block scope} that
     3838terminates at the end of the \nonterm{spec-declaration-list} or polymorphic function that contains
     3839the \nonterm{type-parameter}.
     3840
     3841A \nonterm{type-declarator} with an \Index{initializer} is a \define{type definition}.  The declared
     3842identifier is an \Index{incomplete type} within the initializer, and an \Index{object type} after
     3843the end of the initializer. The type in the initializer is called the \define{implementation
     3844  type}. Within the scope of the declaration, \Index{implicit conversion}s can be performed between
     3845the defined type and the implementation type, and between pointers to the defined type and pointers
     3846to the implementation type.
     3847
     3848A type declaration without an \Index{initializer} and without a \Index{storage-class specifier} or
     3849with storage-class specifier \lstinline$static$\use{static} defines an \Index{incomplete type}. If a
     3850\Index{translation unit} or \Index{block} contains one or more such declarations for an identifier,
     3851it must contain exactly one definition of the identifier ( but not in an enclosed block, which would
     3852define a new type known only within that block).
    30803853\begin{rationale}
    30813854Incomplete type declarations allow compact mutually-recursive types.
    30823855\begin{lstlisting}
    3083 otype t1; // incomplete type declaration
    3084 otype t2 = struct { t1 * p; ... };
    3085 otype t1 = struct { t2 * p; ... };
    3086 \end{lstlisting}
    3087 Without them, mutual recursion could be handled by declaring mutually recursive structures, then initializing the types to those structures.
     3856type t1; // Incomplete type declaration.
     3857type t2 = struct { t1 * p; ... };
     3858type t1 = struct { t2 * p; ... };
     3859\end{lstlisting}
     3860Without them, mutual recursion could be handled by declaring mutually recursive structures, then
     3861initializing the types to those structures.
    30883862\begin{lstlisting}
    30893863struct s1;
    3090 otype t2 = struct s2 { struct s1 * p; ... };
    3091 otype t1 = struct s1 { struct s2 * p; ... };
    3092 \end{lstlisting}
    3093 This introduces extra names, and may force the programmer to cast between the types and their implementations.
     3864type t2 = struct s2 { struct s1 * p; ... };
     3865type t1 = struct s1 { struct s2 * p; ... };
     3866\end{lstlisting}
     3867This introduces extra names, and may force the programmer to cast between the types and their
     3868implementations.
    30943869\end{rationale}
    30953870
    30963871A type declaration without an initializer and with \Index{storage-class specifier}
    3097 \lstinline$extern$\use{extern} is an \define{opaque type declaration}.
    3098 Opaque types are
    3099 \Index{object type}s.
    3100 An opaque type is not a \nonterm{constant-expression};
    3101 neither is a structure or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
    3102 \Index{object type} is a \nonterm{constant-expression}.
    3103 Objects with static storage duration shall be declared with a type that is a \nonterm{constant-expression}.
    3104 \begin{rationale}
    3105 Type declarations can declare identifiers with external linkage, whereas typedef declarations declare identifiers that only exist within a translation unit.
    3106 These opaque types can be used in declarations, but the implementation of the type is not visible.
    3107 
    3108 Static objects can not have opaque types because space for them would have to be allocated at program start-up.
    3109 This is a deficiency\index{deficiencies!static opaque objects}, but I don't want to deal with ``module initialization'' code just now.
    3110 \end{rationale}
    3111 
    3112 An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a value of \Index{type-class} \lstinline$dtype$.
    3113 An object type\index{object types} which is not a qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$.
    3114 A
     3872\lstinline$extern$\use{extern} is an \define{opaque type declaration}. Opaque types are
     3873\Index{object type}s. An opaque type is not a \nonterm{constant-expression}; neither is a structure
     3874or union that has a member whose type is not a \nonterm{constant-expression}.  Every other
     3875\Index{object type} is a \nonterm{constant-expression}. Objects with static storage duration shall
     3876be declared with a type that is a \nonterm{constant-expression}.
     3877\begin{rationale}
     3878Type declarations can declare identifiers with external linkage, whereas typedef declarations
     3879declare identifiers that only exist within a translation unit. These opaque types can be used in
     3880declarations, but the implementation of the type is not visible.
     3881
     3882Static objects can not have opaque types because space for them would have to be allocated at
     3883program start-up. This is a deficiency\index{deficiencies!static opaque objects}, but I don't want
     3884to deal with ``module initialization'' code just now.
     3885\end{rationale}
     3886
     3887An \Index{incomplete type} which is not a qualified version\index{qualified type} of a type is a
     3888value of \Index{type-class} \lstinline$dtype$. An object type\index{object types} which is not a
     3889qualified version of a type is a value of type-classes \lstinline$type$ and \lstinline$dtype$. A
    31153890\Index{function type} is a value of type-class \lstinline$ftype$.
    31163891\begin{rationale}
    3117 Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which omits the identifier being declared.
    3118 
    3119 Object types are precisely the types that can be instantiated.
    3120 Type qualifiers are not included in type values because the compiler needs the information they provide at compile time to detect illegal statements or to produce efficient machine instructions.
    3121 For instance, the code that a compiler must generate to manipulate an object that has volatile-qualified type may be different from the code to manipulate an ordinary object.
    3122 
    3123 Type qualifiers are a weak point of C's type system.
    3124 Consider the standard library function
    3125 \lstinline$strchr()$ which, given a string and a character, returns a pointer to the first occurrence of the character in the string.
     3892Syntactically, a type value is a \nonterm{type-name}, which is a declaration for an object which
     3893omits the identifier being declared.
     3894
     3895Object types are precisely the types that can be instantiated. Type qualifiers are not included in
     3896type values because the compiler needs the information they provide at compile time to detect
     3897illegal statements or to produce efficient machine instructions. For instance, the code that a
     3898compiler must generate to manipulate an object that has volatile-qualified type may be different
     3899from the code to manipulate an ordinary object.
     3900
     3901Type qualifiers are a weak point of C's type system. Consider the standard library function
     3902\lstinline$strchr()$ which, given a string and a character, returns a pointer to the first
     3903occurrence of the character in the string.
    31263904\begin{lstlisting}
    31273905char *strchr( const char *s, int c ) {@\impl{strchr}@
    31283906        char real_c = c; // done because c was declared as int.
    31293907        for ( ; *s != real_c; s++ )
    3130                 if ( *s == '\0' ) return NULL;
     3908         if ( *s == '\0' ) return NULL;
    31313909        return ( char * )s;
    31323910}
    31333911\end{lstlisting}
    3134 The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be used to search a constant string, but the return type must be \lstinline$char *$, because the result might be used to modify a non-constant string.
    3135 Hence the body must perform a cast, and ( even worse)
    3136 \lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings.
    3137 What is needed is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has exactly the same qualifiers.
    3138 Polymorphic functions do not provide a fix for this deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of type values.
    3139 Instead, overloading can be used to define \lstinline$strchr()$ for each combination of qualifiers.
    3140 \end{rationale}
    3141 
    3142 \begin{rationale}
    3143 Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a type declaration, or as the type of a structure or union member.
    3144 This prevents the declaration of types that contain each other.
    3145 \begin{lstlisting}
    3146 otype t1;
    3147 otype t2 = t1; // illegal: incomplete type t1
    3148 otype t1 = t2;
    3149 \end{lstlisting}
    3150 
    3151 The initializer in a file-scope declaration must be a constant expression.
    3152 This means type declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
     3912The parameter \lstinline$s$ must be \lstinline$const char *$, because \lstinline$strchr()$ might be
     3913used to search a constant string, but the return type must be \lstinline$char *$, because the result
     3914might be used to modify a non-constant string. Hence the body must perform a cast, and ( even worse)
     3915\lstinline$strchr()$ provides a type-safe way to attempt to modify constant strings. What is needed
     3916is some way to say that \lstinline$s$'s type might contain qualifiers, and the result type has
     3917exactly the same qualifiers. Polymorphic functions do not provide a fix for this
     3918deficiency\index{deficiencies!pointers to qualified types}, because type qualifiers are not part of
     3919type values. Instead, overloading can be used to define \lstinline$strchr()$ for each combination
     3920of qualifiers.
     3921\end{rationale}
     3922
     3923\begin{rationale}
     3924Since \Index{incomplete type}s are not type values, they can not be used as the initializer in a
     3925type declaration, or as the type of a structure or union member. This prevents the declaration of
     3926types that contain each other.
     3927\begin{lstlisting}
     3928type t1;
     3929type t2 = t1; // illegal: incomplete type t1.
     3930type t1 = t2;
     3931\end{lstlisting}
     3932
     3933The initializer in a file-scope declaration must be a constant expression. This means type
     3934declarations can not build on opaque types, which is a deficiency\index{deficiencies!nesting opaque
    31533935 types}.
    31543936\begin{lstlisting}
    3155 extern otype Huge; // extended-precision integer type
    3156 otype Rational = struct {
     3937extern type Huge; // extended-precision integer type.
     3938type Rational = struct {
    31573939        Huge numerator, denominator;    // illegal
    31583940};
     
    31623944\end{lstlisting}
    31633945Without this restriction, \CFA might require ``module initialization'' code ( since
    3164 \lstinline$Rational$ has external linkage, it must be created before any other translation unit instantiates it), and would force an ordering on the initialization of the translation unit that defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
    3165 
    3166 A benefit of the restriction is that it prevents the declaration in separate translation units of types that contain each other, which would be hard to prevent otherwise.
     3946\lstinline$Rational$ has external linkage, it must be created before any other translation unit
     3947instantiates it), and would force an ordering on the initialization of the translation unit that
     3948defines \lstinline$Huge$ and the translation that declares \lstinline$Rational$.
     3949
     3950A benefit of the restriction is that it prevents the declaration in separate translation units of
     3951types that contain each other, which would be hard to prevent otherwise.
    31673952\begin{lstlisting}
    31683953//  File a.c:
     
    31773962\begin{rationale}
    31783963Since a \nonterm{type-declaration} is a \nonterm{declaration} and not a
    3179 \nonterm{struct-declaration}, type declarations can not be structure members.
    3180 The form of
     3964\nonterm{struct-declaration}, type declarations can not be structure members. The form of
    31813965\nonterm{type-declaration} forbids arrays of, pointers to, and functions returning \lstinline$type$.
    3182 Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued expressions.
    3183 It also side-steps the problem of type-valued expressions producing different values in different declarations.
    3184 
    3185 Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit type parameters.
    3186 This may be too restrictive, but it attempts to make compilation simpler.
    3187 Recall that when traditional C scanners read in an identifier, they look it up in the symbol table to determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token depending on what they find.
    3188 A type parameter would add a type name to the current scope.
    3189 The scope manipulations involved in parsing the declaration of a function that takes function pointer parameters and returns a function pointer may just be too complicated.
    3190 
    3191 Explicit type parameters don't seem to be very useful, anyway, because their scope would not include the return type of the function.
    3192 Consider the following attempt to define a type-safe memory allocation function.
     3966Hence the syntax of \nonterm{type-specifier} does not have to be extended to allow type-valued
     3967expressions. It also side-steps the problem of type-valued expressions producing different values
     3968in different declarations.
     3969
     3970Since a type declaration is not a \nonterm{parameter-declaration}, functions can not have explicit
     3971type parameters. This may be too restrictive, but it attempts to make compilation simpler. Recall
     3972that when traditional C scanners read in an identifier, they look it up in the symbol table to
     3973determine whether or not it is a typedef name, and return a ``type'' or ``identifier'' token
     3974depending on what they find. A type parameter would add a type name to the current scope. The
     3975scope manipulations involved in parsing the declaration of a function that takes function pointer
     3976parameters and returns a function pointer may just be too complicated.
     3977
     3978Explicit type parameters don't seem to be very useful, anyway, because their scope would not include
     3979the return type of the function. Consider the following attempt to define a type-safe memory
     3980allocation function.
    31933981\begin{lstlisting}
    31943982#include <stdlib.h>
    3195 T * new( otype T ) { return ( T * )malloc( sizeof( T) ); };
    3196 @\ldots@ int * ip = new( int );
    3197 \end{lstlisting}
    3198 This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the meaning of \lstinline$T$ in the scope that contains \lstinline$new$;
    3199 it could be undefined, or a type name, or a function or variable name.
    3200 Nothing good can result from such a situation.
     3983T * new( type T ) { return ( T * )malloc( sizeof( T) ); };
     3984@\ldots@
     3985int * ip = new( int );
     3986\end{lstlisting}
     3987This looks sensible, but \CFA's declaration-before-use rules mean that ``\lstinline$T$'' in the
     3988function body refers to the parameter, but the ``\lstinline$T$'' in the return type refers to the
     3989meaning of \lstinline$T$ in the scope that contains \lstinline$new$; it could be undefined, or a
     3990type name, or a function or variable name. Nothing good can result from such a situation.
    32013991\end{rationale}
    32023992
     
    32043994Since type declarations create new types, instances of types are always passed by value.
    32053995\begin{lstlisting}
    3206 otype A1 = int[2];
     3996type A1 = int[2];
    32073997void f1( A1 a ) { a[0] = 0; };
    3208 otypedef int A2[2];
     3998typedef int A2[2];
    32093999void f2( A2 a ) { a[0] = 0; };
    32104000A1 v1;
     
    32134003f2( v2 );
    32144004\end{lstlisting}
    3215 \lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies \lstinline$v2[0]$.
     4005\lstinline$V1$ is passed by value, so \lstinline$f1()$'s assignment to \lstinline$a[0]$ does not
     4006modify v1.  \lstinline$V2$ is converted to a pointer, so \lstinline$f2()$ modifies
     4007\lstinline$v2[0]$.
    32164008
    32174009A translation unit containing the declarations
    32184010\begin{lstlisting}
    3219 extern type Complex;@\use{Complex}@ // opaque type declaration
     4011extern type Complex;@\use{Complex}@ // opaque type declaration.
    32204012extern float abs( Complex );@\use{abs}@
    3221 \end{lstlisting} can contain declarations of complex numbers, which can be passed to \lstinline$abs$.
    3222 Some other translation unit must implement \lstinline$Complex$ and \lstinline$abs$.
    3223 That unit might contain the declarations
    3224 \begin{lstlisting}
    3225 otype Complex = struct { float re, im; };@\impl{Complex}@
     4013\end{lstlisting}
     4014can contain declarations of complex numbers, which can be passed to \lstinline$abs$. Some other
     4015translation unit must implement \lstinline$Complex$ and \lstinline$abs$. That unit might contain
     4016the declarations
     4017\begin{lstlisting}
     4018type Complex = struct { float re, im; };@\impl{Complex}@
    32264019Complex cplx_i = { 0.0, 1.0 };@\impl{cplx_i}@
    32274020float abs( Complex c ) {@\impl{abs( Complex )}@
     
    32294022}
    32304023\end{lstlisting}
    3231 Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can be retrieved.
    3232 
    3233 \begin{lstlisting}
    3234 otype Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight.
     4024Note that \lstinline$c$ is implicitly converted to a \lstinline$struct$ so that its components can
     4025be retrieved.
     4026
     4027\begin{lstlisting}
     4028type Time_of_day = int;@\impl{Time_of_day}@ // seconds since midnight.
    32354029Time_of_day ?+?( Time_of_day t1, int seconds ) {@\impl{?+?}@
    32364030        return (( int)t1 + seconds ) % 86400;
     
    32404034
    32414035\begin{rationale}
    3242 Within the scope of a type definition, an instance of the type can be viewed as having that type or as having the implementation type.
    3243 In the \lstinline$Time_of_day$ example, the difference is important.
    3244 Different languages have treated the distinction between the abstraction and the implementation in different ways.
     4036Within the scope of a type definition, an instance of the type can be viewed as having that type or
     4037as having the implementation type. In the \lstinline$Time_of_day$ example, the difference is
     4038important. Different languages have treated the distinction between the abstraction and the
     4039implementation in different ways.
    32454040\begin{itemize}
    32464041\item
    3247 Inside a Clu cluster \cite{CLU}, the declaration of an instance states which view applies.
    3248 Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
    3249 \item
    3250 The Simula class \cite{SIMULA87} is essentially a record type.
    3251 Since the only operations on a record are member selection and assignment, which can not be overloaded, there is never any ambiguity as to whether the abstraction or the implementation view is being used.
    3252 In {\CC}
    3253 \cite{C++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
    3254 A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used.
    3255 \item
    3256 An Ada derived type definition \cite{Ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type.
    3257 The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type.
    3258 Literals and aggregates of the old type are also cloned.
     4042Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies. Two
     4043primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
     4044\item
     4045The Simula class \cite{Simula87} is essentially a record type. Since the only operations on a
     4046record are member selection and assignment, which can not be overloaded, there is never any
     4047ambiguity as to whether the abstraction or the implementation view is being used. In {\CC}
     4048\cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be
     4049overloaded. A ``scope resolution'' operator can be used inside the class to specify whether the
     4050abstract or implementation version of the operation should be used.
     4051\item
     4052An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly
     4053declares derived subprograms that correspond to the existing subprograms that use the old type as a
     4054parameter type or result type. The derived subprograms are clones of the existing subprograms with
     4055the old type replaced by the derived type. Literals and aggregates of the old type are also cloned.
    32594056In other words, the abstract view provides exactly the same operations as the implementation view.
    32604057This allows the abstract view to be used in all cases.
    32614058
    3262 The derived subprograms can be replaced by programmer-specified subprograms.
    3263 This is an exception to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope.
    3264 In this case, explicit conversions between the derived type and the old type can be used.
     4059The derived subprograms can be replaced by programmer-specified subprograms. This is an exception
     4060to the normal scope rules, which forbid duplicate definitions of a subprogram in a scope. In this
     4061case, explicit conversions between the derived type and the old type can be used.
    32654062\end{itemize}
    3266 \CFA's rules are like Clu's, except that implicit conversions and conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$.
     4063\CFA's rules are like Clu's, except that implicit conversions and
     4064conversion costs allow it to do away with most uses of \lstinline$up$ and \lstinline$down$.
    32674065\end{rationale}
    32684066
     
    32724070A declaration\index{type declaration} of a type identifier \lstinline$T$ with type-class
    32734071\lstinline$type$ implicitly declares a \define{default assignment} function
    3274 \lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
    3275 \begin{rationale}
    3276 Assignment is central to C's imperative programming style, and every existing C object type has assignment defined for it ( except for array types, which are treated as pointer types for purposes of assignment).
    3277 Without this rule, nearly every inferred type parameter would need an accompanying assignment assertion parameter.
    3278 If a type parameter should not have an assignment operation,
    3279 \lstinline$dtype$ should be used.
    3280 If a type should not have assignment defined, the user can define an assignment function that causes a run-time error, or provide an external declaration but no definition and thus cause a link-time error.
    3281 \end{rationale}
    3282 
    3283 A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment function.
    3284 A definition\index{type definition} of a type identifier \lstinline$T$ with implementation type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
    3285 \define{default object}s as declared by the assertion declarations.
    3286 The default objects and functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$.
    3287 Their values are determined as follows:
     4072\lstinline$T ?=?( T *, T )$\use{?=?}, with the same \Index{scope} and \Index{linkage} as the
     4073identifier \lstinline$T$.
     4074\begin{rationale}
     4075Assignment is central to C's imperative programming style, and every existing C object type has
     4076assignment defined for it ( except for array types, which are treated as pointer types for purposes
     4077of assignment). Without this rule, nearly every inferred type parameter would need an accompanying
     4078assignment assertion parameter. If a type parameter should not have an assignment operation,
     4079\lstinline$dtype$ should be used. If a type should not have assignment defined, the user can define
     4080an assignment function that causes a run-time error, or provide an external declaration but no
     4081definition and thus cause a link-time error.
     4082\end{rationale}
     4083
     4084A definition\index{type definition} of a type identifier \lstinline$T$ with \Index{implementation
     4085type} \lstinline$I$ and type-class \lstinline$type$ implicitly defines a default assignment
     4086function. A definition\index{type definition} of a type identifier \lstinline$T$ with implementation
     4087type \lstinline$I$ and an assertion list implicitly defines \define{default function}s and
     4088\define{default object}s as declared by the assertion declarations. The default objects and
     4089functions have the same \Index{scope} and \Index{linkage} as the identifier \lstinline$T$. Their
     4090values are determined as follows:
    32884091\begin{itemize}
    32894092\item
    3290 If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default object, then the default object is initialized with that object.
    3291 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default object.
     4093If at the definition of \lstinline$T$ there is visible a declaration of an object with the same name
     4094as the default object, and if the type of that object with all occurrence of \lstinline$I$ replaced
     4095by \lstinline$T$ is compatible with the type of the default object, then the default object is
     4096initialized with that object. Otherwise the scope of the declaration of \lstinline$T$ must contain
     4097a definition of the default object.
    32924098
    32934099\item
    3294 If at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and if the type of that function with all occurrence of \lstinline$I$ replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the converted result.
    3295 
    3296 Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that at the definition of \lstinline$T$ there is visible a declaration of a function with the same name as the default function, and the type of that function with all occurrences of the anonymous member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the default function, then the default function calls that function after converting its arguments and returns the result.
    3297 
    3298 Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default function.
     4100If at the definition of \lstinline$T$ there is visible a declaration of a function with the same
     4101name as the default function, and if the type of that function with all occurrence of \lstinline$I$
     4102replaced by \lstinline$T$ is compatible with the type of the default function, then the default
     4103function calls that function after converting its arguments and returns the converted result.
     4104
     4105Otherwise, if \lstinline$I$ contains exactly one anonymous member\index{anonymous member} such that
     4106at the definition of \lstinline$T$ there is visible a declaration of a function with the same name
     4107as the default function, and the type of that function with all occurrences of the anonymous
     4108member's type in its parameter list replaced by \lstinline$T$ is compatible with the type of the
     4109default function, then the default function calls that function after converting its arguments and
     4110returns the result.
     4111
     4112Otherwise the scope of the declaration of \lstinline$T$ must contain a definition of the default
     4113function.
    32994114\end{itemize}
    33004115\begin{rationale}
    3301 Note that a pointer to a default function will not compare as equal to a pointer to the inherited function.
    3302 \end{rationale}
    3303 
    3304 A function or object with the same type and name as a default function or object that is declared within the scope of the definition of \lstinline$T$ replaces the default function or object.
     4116Note that a pointer to a default function will not compare as equal to a pointer to the inherited
     4117function.
     4118\end{rationale}
     4119
     4120A function or object with the same type and name as a default function or object that is declared
     4121within the scope of the definition of \lstinline$T$ replaces the default function or object.
    33054122
    33064123\examples
    33074124\begin{lstlisting}
    3308 trait s( otype T ) {
     4125context s( type T ) {
    33094126        T a, b;
    3310 } struct impl { int left, right; } a = { 0, 0 };
    3311 otype Pair | s( Pair ) = struct impl;
     4127}
     4128struct impl { int left, right; } a = { 0, 0 };
     4129type Pair | s( Pair ) = struct impl;
    33124130Pair b = { 1, 1 };
    33134131\end{lstlisting}
    33144132The definition of \lstinline$Pair$ implicitly defines two objects \lstinline$a$ and \lstinline$b$.
    3315 \lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$.
    3316 The definition of
    3317 \lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value from.
    3318 \begin{lstlisting}
    3319 trait ss( otype T ) {
     4133\lstinline$Pair a$ inherits its value from the \lstinline$struct impl a$. The definition of
     4134\lstinline$Pair b$ is compulsory because there is no \lstinline$struct impl b$ to construct a value
     4135from.
     4136\begin{lstlisting}
     4137context ss( type T ) {
    33204138        T clone( T );
    33214139        void munge( T * );
    33224140}
    3323 otype Whatsit | ss( Whatsit );@\use{Whatsit}@
    3324 otype Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
     4141type Whatsit | ss( Whatsit );@\use{Whatsit}@
     4142type Doodad | ss( Doodad ) = struct doodad {@\use{Doodad}@
    33254143        Whatsit; // anonymous member
    33264144        int extra;
     
    33344152void munge( Doodad * );
    33354153\end{lstlisting}
    3336 The assignment function inherits \lstinline$struct doodad$'s assignment function because the types match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
     4154The assignment function inherits \lstinline$struct doodad$'s assignment function because the types
     4155match when \lstinline$struct doodad$ is replaced by \lstinline$Doodad$ throughout.
    33374156\lstinline$munge()$ inherits \lstinline$Whatsit$'s \lstinline$munge()$ because the types match when
    3338 \lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$ does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
    3339 \lstinline$Doodad$'s \lstinline$clone()$'s type.
    3340 Hence the definition of
     4157\lstinline$Whatsit$ is replaced by \lstinline$Doodad$ in the parameter list. \lstinline$clone()$
     4158does \emph{not} inherit \lstinline$Whatsit$'s \lstinline$clone()$: replacement in the parameter
     4159list yields ``\lstinline$Whatsit clone( Doodad )$'', which is not compatible with
     4160\lstinline$Doodad$'s \lstinline$clone()$'s type. Hence the definition of
    33414161``\lstinline$Doodad clone( Doodad )$'' is necessary.
    33424162
    33434163Default functions and objects are subject to the normal scope rules.
    33444164\begin{lstlisting}
    3345 otype T = @\ldots@;
     4165type T = @\ldots@;
    33464166T a_T = @\ldots@;               // Default assignment used.
    33474167T ?=?( T *, T );
     
    33534173
    33544174\begin{rationale}
    3355 The \emph{class} construct of object-oriented programming languages performs three independent functions.
    3356 It \emph{encapsulates} a data structure;
    3357 it defines a \emph{subtype} relationship, whereby instances of one class may be used in contexts that require instances of another;
    3358 and it allows one class to \emph{inherit} the implementation of another.
    3359 
    3360 In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided by specifications and assertions.
    3361 Inheritance is provided by default functions and objects.
     4175The \emph{class} construct of object-oriented programming languages performs three independent
     4176functions. It \emph{encapsulates} a data structure; it defines a \emph{subtype} relationship, whereby
     4177instances of one class may be used in contexts that require instances of another; and it allows one
     4178class to \emph{inherit} the implementation of another.
     4179
     4180In \CFA, encapsulation is provided by opaque types and the scope rules, and subtyping is provided
     4181by specifications and assertions. Inheritance is provided by default functions and objects.
    33624182\end{rationale}
    33634183
     
    33704190\end{syntax}
    33714191
    3372 Many statements contain expressions, which may have more than one interpretation.
    3373 The following sections describe how the \CFA translator selects an interpretation.
    3374 In all cases the result of the selection shall be a single unambiguous \Index{interpretation}.
     4192Many statements contain expressions, which may have more than one interpretation. The following
     4193sections describe how the \CFA translator selects an interpretation. In all cases the result of the
     4194selection shall be a single unambiguous \Index{interpretation}.
    33754195
    33764196
     
    34194239switch ( E ) ...
    34204240choose ( E ) ...
    3421 \end{lstlisting} may have more than one interpretation, but it shall have only one interpretation with an integral type.
     4241\end{lstlisting}
     4242may have more than one interpretation, but it shall have only one interpretation with an integral type.
    34224243An \Index{integer promotion} is performed on the expression if necessary.
    34234244The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
     
    34634284while ( E ) ...
    34644285do ... while ( E );
    3465 \end{lstlisting} is treated as ``\lstinline$( int )((E)!=0)$''.
     4286\end{lstlisting}
     4287is treated as ``\lstinline$( int )((E)!=0)$''.
    34664288
    34674289The statement
    34684290\begin{lstlisting}
    34694291for ( a; b; c ) @\ldots@
    3470 \end{lstlisting} is treated as
     4292\end{lstlisting}
     4293is treated as
    34714294\begin{lstlisting}
    34724295for ( ( void )( a ); ( int )(( b )!=0); ( void )( c ) ) ...
     
    35904413
    35914414The implementation shall define the macro names \lstinline$__LINE__$, \lstinline$__FILE__$,
    3592 \lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard.
    3593 It shall not define the macro name \lstinline$__STDC__$.
    3594 
    3595 In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the decimal constant 1.
     4415\lstinline$__DATE__$, and \lstinline$__TIME__$, as in the {\c11} standard. It shall not define the
     4416macro name \lstinline$__STDC__$.
     4417
     4418In addition, the implementation shall define the macro name \lstinline$__CFORALL__$ to be the
     4419decimal constant 1.
    35964420
    35974421
     
    36034427
    36044428\section{C types}
    3605 This section gives example specifications for some groups of types that are important in the C language, in terms of the predefined operations that can be applied to those types.
     4429This section gives example specifications for some groups of types that are important in the C
     4430language, in terms of the predefined operations that can be applied to those types.
    36064431
    36074432
    36084433\subsection{Scalar, arithmetic, and integral types}
    36094434
    3610 The pointer, integral, and floating-point types are all \define{scalar types}.
    3611 All of these types can be logically negated and compared.
    3612 The assertion ``\lstinline$scalar( Complex )$'' should be read as ``type \lstinline$Complex$ is scalar''.
    3613 \begin{lstlisting}
    3614 trait scalar( otype T ) {@\impl{scalar}@
     4435The pointer, integral, and floating-point types are all \define{scalar types}. All of these types
     4436can be logically negated and compared. The assertion ``\lstinline$scalar( Complex )$'' should be read
     4437as ``type \lstinline$Complex$ is scalar''.
     4438\begin{lstlisting}
     4439context scalar( type T ) {@\impl{scalar}@
    36154440        int !?( T );
    36164441        int ?<?( T, T ), ?<=?( T, T ), ?==?( T, T ), ?>=?( T, T ), ?>?( T, T ), ?!=?( T, T );
     
    36184443\end{lstlisting}
    36194444
    3620 The integral and floating-point types are \define{arithmetic types}, which support the basic arithmetic operators.
    3621 The use of an assertion in the \nonterm{spec-parameter-list} declares that, in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are available ).
    3622 This is equivalent to inheritance of specifications.
    3623 \begin{lstlisting}
    3624 trait arithmetic( otype T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
     4445The integral and floating-point types are \define{arithmetic types}, which support the basic
     4446arithmetic operators. The use of an assertion in the \nonterm{spec-parameter-list} declares that,
     4447in order to be arithmetic, a type must also be scalar ( and hence that scalar operations are
     4448available ). This is equivalent to inheritance of specifications.
     4449\begin{lstlisting}
     4450context arithmetic( type T | scalar( T ) ) {@\impl{arithmetic}@@\use{scalar}@
    36254451        T +?( T ), -?( T );
    36264452        T ?*?( T, T ), ?/?( T, T ), ?+?( T, T ), ?-?( T, T );
     
    36314457\define{integral types}.
    36324458\begin{lstlisting}
    3633 trait integral( otype T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
     4459context integral( type T | arithmetic( T ) ) {@\impl{integral}@@\use{arithmetic}@
    36344460        T ~?( T );
    36354461        T ?&?( T, T ), ?|?( T, T ), ?^?( T, T );
     
    36454471The only operation that can be applied to all modifiable lvalues is simple assignment.
    36464472\begin{lstlisting}
    3647 trait m_lvalue( otype T ) {@\impl{m_lvalue}@
     4473context m_lvalue( type T ) {@\impl{m_lvalue}@
    36484474        T ?=?( T *, T );
    36494475};
     
    36514477
    36524478Modifiable scalar lvalues are scalars and are modifiable lvalues, and assertions in the
    3653 \nonterm{spec-parameter-list} reflect those relationships.
    3654 This is equivalent to multiple inheritance of specifications.
    3655 Scalars can also be incremented and decremented.
    3656 \begin{lstlisting}
    3657 trait m_l_scalar( otype T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
     4479\nonterm{spec-parameter-list} reflect those relationships. This is equivalent to multiple
     4480inheritance of specifications. Scalars can also be incremented and decremented.
     4481\begin{lstlisting}
     4482context m_l_scalar( type T | scalar( T ) | m_lvalue( T ) ) {@\impl{m_l_scalar}@
    36584483        T ?++( T * ), ?--( T * );@\use{scalar}@@\use{m_lvalue}@
    36594484        T ++?( T * ), --?( T * );
     
    36614486\end{lstlisting}
    36624487
    3663 Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic.
    3664 Note that this results in the ``inheritance'' of \lstinline$scalar$ along both paths.
    3665 \begin{lstlisting}
    3666 trait m_l_arithmetic( otype T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
     4488Modifiable arithmetic lvalues are both modifiable scalar lvalues and arithmetic. Note that this
     4489results in the ``inheritance'' of \lstinline$scalar$ along both paths.
     4490\begin{lstlisting}
     4491context m_l_arithmetic( type T | m_l_scalar( T ) | arithmetic( T ) ) {@\impl{m_l_arithmetic}@
    36674492        T ?/=?( T *, T ), ?*=?( T *, T );@\use{m_l_scalar}@@\use{arithmetic}@
    36684493        T ?+=?( T *, T ), ?-=?( T *, T );
    36694494};
    3670 trait m_l_integral( otype T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
     4495
     4496context m_l_integral( type T | m_l_arithmetic( T ) | integral( T ) ) {@\impl{m_l_integral}@
    36714497        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );@\use{m_l_arithmetic}@
    36724498        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );@\use{integral}@
     
    36774503\subsection{Pointer and array types}
    36784504
    3679 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a constant pointer to the first element of the array, and the subscript expression
     4505Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a
     4506constant pointer to the first element of the array, and the subscript expression
    36804507``\lstinline$a[i]$'' is equivalent to the dereferencing expression ``\lstinline$(*( a+( i )))$''.
    36814508Technically, pointer arithmetic and pointer comparisons other than ``\lstinline$==$'' and
    3682 ``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not enforce those restrictions.
    3683 Consequently, there is no need for a separate ``array type'' specification.
    3684 
    3685 Pointer types are scalar types.
    3686 Like other scalar types, they have ``\lstinline$+$'' and
     4509``\lstinline$!=$'' are only defined for pointers to array elements, but the type system does not
     4510enforce those restrictions. Consequently, there is no need for a separate ``array type''
     4511specification.
     4512
     4513Pointer types are scalar types. Like other scalar types, they have ``\lstinline$+$'' and
    36874514``\lstinline$-$'' operators, but the types do not match the types of the operations in
    36884515\lstinline$arithmetic$, so these operators cannot be consolidated in \lstinline$scalar$.
    36894516\begin{lstlisting}
    3690 trait pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
     4517context pointer( type P | scalar( P ) ) {@\impl{pointer}@@\use{scalar}@
    36914518        P ?+?( P, long int ), ?+?( long int, P ), ?-?( P, long int );
    36924519        ptrdiff_t ?-?( P, P );
    36934520};
    3694 trait m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
     4521
     4522context m_l_pointer( type P | pointer( P ) | m_l_scalar( P ) ) {@\impl{m_l_pointer}@
    36954523        P ?+=?( P *, long int ), ?-=?( P *, long int );
    36964524        P ?=?( P *, void * );
     
    36994527\end{lstlisting}
    37004528
    3701 Specifications that define the dereference operator ( or subscript operator ) require two parameters, one for the pointer type and one for the pointed-at ( or element ) type.
    3702 Different specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not included in types.
    3703 The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
     4529Specifications that define the dereference operator ( or subscript operator ) require two
     4530parameters, one for the pointer type and one for the pointed-at ( or element ) type. Different
     4531specifications are needed for each set of \Index{type qualifier}s, because qualifiers are not
     4532included in types. The assertion ``\lstinline$|ptr_to( Safe_pointer, int )$'' should be read as
    37044533``\lstinline$Safe_pointer$ acts like a pointer to \lstinline$int$''.
    37054534\begin{lstlisting}
    3706 trait ptr_to( otype P | pointer( P ), otype T ) {@\impl{ptr_to}@@\use{pointer}@
    3707         lvalue T *?( P );
    3708         lvalue T ?[?]( P, long int );
     4535context ptr_to( type P | pointer( P ), type T ) {@\impl{ptr_to}@@\use{pointer}@
     4536        lvalue T *?( P ); lvalue T ?[?]( P, long int );
    37094537};
    3710 trait ptr_to_const( otype P | pointer( P ), otype T ) {@\impl{ptr_to_const}@
    3711         const lvalue T *?( P );
    3712         const lvalue T ?[?]( P, long int );@\use{pointer}@
     4538
     4539context ptr_to_const( type P | pointer( P ), type T ) {@\impl{ptr_to_const}@
     4540        const lvalue T *?( P ); const lvalue T ?[?]( P, long int );@\use{pointer}@
    37134541};
    3714 trait ptr_to_volatile( otype P | pointer( P ), otype T ) }@\impl{ptr_to_volatile}@
    3715         volatile lvalue T *?( P );
    3716         volatile lvalue T ?[?]( P, long int );@\use{pointer}@
     4542
     4543context ptr_to_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_volatile}@
     4544        volatile lvalue T *?( P ); volatile lvalue T ?[?]( P, long int );@\use{pointer}@
    37174545};
    3718 trait ptr_to_const_volatile( otype P | pointer( P ), otype T ) }@\impl{ptr_to_const_volatile}@
     4546\end{lstlisting}
     4547\begin{lstlisting}
     4548context ptr_to_const_volatile( type P | pointer( P ), type T ) }@\impl{ptr_to_const_volatile}@
    37194549        const volatile lvalue T *?( P );@\use{pointer}@
    37204550        const volatile lvalue T ?[?]( P, long int );
     
    37224552\end{lstlisting}
    37234553
    3724 Assignment to pointers is more complicated than is the case with other types, because the target's type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
     4554Assignment to pointers is more complicated than is the case with other types, because the target's
     4555type can have extra type qualifiers in the pointed-at type: a ``\lstinline$T *$'' can be assigned to
     4556a ``\lstinline$const T *$'', a ``\lstinline$volatile T *$'', and a ``\lstinline$const volatile T *$''.
    37254557Again, the pointed-at type is passed in, so that assertions can connect these specifications to the
    37264558``\lstinline$ptr_to$'' specifications.
    37274559\begin{lstlisting}
    3728 trait m_l_ptr_to( otype P | m_l_pointer( P ),@\use{m_l_pointer}@@\impl{m_l_ptr_to}@ otype T | ptr_to( P, T )@\use{ptr_to}@ {
     4560context 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}@ {
    37294561        P ?=?( P *, T * );
    37304562        T * ?=?( T **, P );
    37314563};
    3732 trait m_l_ptr_to_const( otype 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}@) {
     4564
     4565context 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}@) {
    37334566        P ?=?( P *, const T * );
    37344567        const T * ?=?( const T **, P );
    37354568};
    3736 trait m_l_ptr_to_volatile( otype 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}@
     4569
     4570context 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}@
    37374571        P ?=?( P *, volatile T * );
    37384572        volatile T * ?=?( volatile T **, P );
    37394573};
    3740 trait m_l_ptr_to_const_volatile( otype P | ptr_to_const_volatile( P ),@\use{ptr_to_const_volatile}@@\impl{m_l_ptr_to_const_volatile}@
    3741                 otype 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}@
     4574
     4575context 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}@
     4576                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}@
    37424577        P ?=?( P *, const volatile T * );
    37434578        const volatile T * ?=?( const volatile T **, P );
     
    37454580\end{lstlisting}
    37464581
    3747 Note the regular manner in which type qualifiers appear in those specifications.
    3748 An 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.
    3749 \begin{lstlisting}
    3750 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 ) ) {
     4582Note the regular manner in which type qualifiers appear in those specifications. An alternative
     4583specification can make use of the fact that qualification of the pointed-at type is part of a
     4584pointer type to capture that regularity.
     4585\begin{lstlisting}
     4586context 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 ) ) {
    37514587        MyP ?=?( MyP *, CP );
    37524588        CP ?=?( CP *, MyP );
     
    37544590\end{lstlisting}
    37554591The assertion ``\lstinline$| m_l_ptr_like( Safe_ptr, const int * )$'' should be read as
    3756 ``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''.
    3757 This specification has two defects, compared to the original four: there is no automatic assertion that dereferencing a
     4592``\lstinline$Safe_ptr$ is a pointer type like \lstinline$const int *$''. This specification has two
     4593defects, compared to the original four: there is no automatic assertion that dereferencing a
    37584594\lstinline$MyP$ produces an lvalue of the type that \lstinline$CP$ points at, and the
    3759 ``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed to \lstinline$CP$ really is a pointer type.
     4595``\lstinline$|m_l_pointer( CP )$'' assertion provides only a weak assurance that the argument passed
     4596to \lstinline$CP$ really is a pointer type.
    37604597
    37614598
    37624599\section{Relationships between operations}
    37634600
    3764 Different operators often have related meanings;
    3765 for instance, in C, ``\lstinline$+$'',
     4601Different operators often have related meanings; for instance, in C, ``\lstinline$+$'',
    37664602``\lstinline$+=$'', and the two versions of ``\lstinline$++$'' perform variations of addition.
    3767 Languages like {\CC} and Ada allow programmers to define operators for new types, but do not require that these relationships be preserved, or even that all of the operators be implemented.
    3768 Completeness and consistency is left to the good taste and discretion of the programmer.
    3769 It is possible to encourage these attributes by providing generic operator functions, or member functions of abstract classes, that are defined in terms of other, related operators.
    3770 
    3771 In \CFA, polymorphic functions provide the equivalent of these generic operators, and specifications explicitly define the minimal implementation that a programmer should provide.
    3772 This section shows a few examples.
     4603Languages like {\CC} and Ada allow programmers to define operators for new types, but do not
     4604require that these relationships be preserved, or even that all of the operators be implemented.
     4605Completeness and consistency is left to the good taste and discretion of the programmer. It is
     4606possible to encourage these attributes by providing generic operator functions, or member functions
     4607of abstract classes, that are defined in terms of other, related operators.
     4608
     4609In \CFA, polymorphic functions provide the equivalent of these generic operators, and
     4610specifications explicitly define the minimal implementation that a programmer should provide. This
     4611section shows a few examples.
    37734612
    37744613
    37754614\subsection{Relational and equality operators}
    37764615
    3777 The different comparison operators have obvious relationships, but there is no obvious subset of the operations to use in the implementation of the others.
    3778 However, it is usually convenient to implement a single comparison function that returns a negative integer, 0, or a positive integer if its first argument is respectively less than, equal to, or greater than its second argument;
    3779 the library function \lstinline$strcmp$ is an example.
    3780 
    3781 C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation, returns 1 if its operand compares equal to 0, and 0 otherwise.
    3782 \begin{lstlisting}
    3783 trait comparable( otype T ) {
     4616The different comparison operators have obvious relationships, but there is no obvious subset of the
     4617operations to use in the implementation of the others. However, it is usually convenient to
     4618implement a single comparison function that returns a negative integer, 0, or a positive integer if
     4619its first argument is respectively less than, equal to, or greater than its second argument; the
     4620library function \lstinline$strcmp$ is an example.
     4621
     4622C and \CFA have an extra, non-obvious comparison operator: ``\lstinline$!$'', logical negation,
     4623returns 1 if its operand compares equal to 0, and 0 otherwise.
     4624\begin{lstlisting}
     4625context comparable( type T ) {
    37844626        const T 0;
    37854627        int compare( T, T );
    37864628}
    3787 forall( otype T | comparable( T ) ) int ?<?( T l, T r ) {
     4629
     4630forall( type T | comparable( T ) ) int ?<?( T l, T r ) {
    37884631        return compare( l, r ) < 0;
    37894632}
    37904633// ... similarly for <=, ==, >=, >, and !=.
    3791 forall( otype T | comparable( T ) ) int !?( T operand ) {
     4634
     4635forall( type T | comparable( T ) ) int !?( T operand ) {
    37924636        return !compare( operand, 0 );
    37934637}
     
    37974641\subsection{Arithmetic and integer operations}
    37984642
    3799 A complete arithmetic type would provide the arithmetic operators and the corresponding assignment operators.
    3800 Of these, the assignment operators are more likely to be implemented directly, because it is usually more efficient to alter the contents of an existing object than to create and return a new one.
    3801 Similarly, a complete integral type would provide integral operations based on integral assignment operations.
    3802 \begin{lstlisting}
    3803 trait arith_base( otype T ) {
     4643A complete arithmetic type would provide the arithmetic operators and the corresponding assignment
     4644operators. Of these, the assignment operators are more likely to be implemented directly, because
     4645it is usually more efficient to alter the contents of an existing object than to create and return a
     4646new one. Similarly, a complete integral type would provide integral operations based on integral
     4647assignment operations.
     4648\begin{lstlisting}
     4649context arith_base( type T ) {
    38044650        const T 1;
    38054651        T ?+=?( T *, T ), ?-=?( T *, T ), ?*=?( T *, T ), ?/=?( T *, T );
    38064652}
    3807 forall( otype T | arith_base( T ) ) T ?+?( T l, T r ) {
     4653
     4654forall( type T | arith_base( T ) ) T ?+?( T l, T r ) {
    38084655        return l += r;
    38094656}
    3810 forall( otype T | arith_base( T ) ) T ?++( T * operand ) {
     4657
     4658forall( type T | arith_base( T ) ) T ?++( T * operand ) {
    38114659        T temporary = *operand;
    38124660        *operand += 1;
    38134661        return temporary;
    38144662}
    3815 forall( otype T | arith_base( T ) ) T ++?( T * operand ) {
     4663
     4664forall( type T | arith_base( T ) ) T ++?( T * operand ) {
    38164665        return *operand += 1;
    38174666}
    38184667// ... similarly for -, --, *, and /.
    3819 trait int_base( otype T ) {
     4668
     4669context int_base( type T ) {
    38204670        T ?&=?( T *, T ), ?|=?( T *, T ), ?^=?( T *, T );
    38214671        T ?%=?( T *, T ), ?<<=?( T *, T ), ?>>=?( T *, T );
    38224672}
    3823 forall( otype T | int_base( T ) ) T ?&?( T l, T r ) {
     4673
     4674forall( type T | int_base( T ) ) T ?&?( T l, T r ) {
    38244675        return l &= r;
    38254676}
     
    38274678\end{lstlisting}
    38284679
    3829 Note that, although an arithmetic type would certainly provide comparison functions, and an integral type would provide arithmetic operations, there does not have to be any relationship among
    3830 \lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$.
    3831 Note also that these declarations provide guidance and assistance, but they do not define an absolutely minimal set of requirements.
    3832 A truly minimal implementation of an arithmetic type might only provide
     4680Note that, although an arithmetic type would certainly provide comparison functions, and an integral
     4681type would provide arithmetic operations, there does not have to be any relationship among
     4682\lstinline$int_base$, \lstinline$arith_base$ and \lstinline$comparable$. Note also that these
     4683declarations provide guidance and assistance, but they do not define an absolutely minimal set of
     4684requirements. A truly minimal implementation of an arithmetic type might only provide
    38334685\lstinline$0$, \lstinline$1$, and \lstinline$?-=?$, which would be used by polymorphic
    38344686\lstinline$?+=?$, \lstinline$?*=?$, and \lstinline$?/=?$ functions.
     
    38404692Review index entries.
    38414693
    3842 Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers.
    3843 This gets into \lstinline$noalias$ territory.
    3844 Qualifying anything (``\lstinline$short restrict rs$'') means pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
    3845 
    3846 Enumerated types.
    3847 Constants are not ints.
    3848 Overloading.
    3849 Definition should be ``representable as an integer type'', not ``as an int''.
    3850 C11 usual conversions freely convert to and from ordinary integer types via assignment, which works between any integer types.
    3851 Does enum Color ?*?( enum
     4694Restrict allowed to qualify anything, or type/dtype parameters, but only affects pointers. This gets
     4695into \lstinline$noalias$ territory. Qualifying anything (``\lstinline$short restrict rs$'') means
     4696pointer parameters of \lstinline$?++$, etc, would need restrict qualifiers.
     4697
     4698Enumerated types. Constants are not ints. Overloading. Definition should be ``representable as an
     4699integer type'', not ``as an int''. C11 usual conversions freely convert to and from ordinary
     4700integer types via assignment, which works between any integer types. Does enum Color ?*?( enum
    38524701Color, enum Color ) really make sense? ?++ does, but it adds (int)1.
    38534702
    3854 Operators on {,signed,unsigned} char and other small types. ?<? harmless;
    3855 ?*? questionable for chars.
    3856 Generic selections make these choices visible.
    3857 Safe conversion operators? Predefined
     4703Operators on {,signed,unsigned} char and other small types. ?<? harmless; ?*? questionable for
     4704chars. Generic selections make these choices visible. Safe conversion operators? Predefined
    38584705``promotion'' function?
    38594706
    3860 \lstinline$register$ assignment might be handled as assignment to a temporary with copying back and forth, but copying must not be done by assignment.
     4707\lstinline$register$ assignment might be handled as assignment to a temporary with copying back and
     4708forth, but copying must not be done by assignment.
    38614709
    38624710Don't use ptrdiff\_t by name in the predefineds.
    38634711
    3864 Polymorphic objects.
    3865 Polymorphic typedefs and type declarations.
     4712Polymorphic objects. Polymorphic typedefs and type declarations.
    38664713
    38674714
    38684715\bibliographystyle{plain}
    3869 \bibliography{cfa}
     4716\bibliography{refrat}
    38704717
    38714718
    38724719\addcontentsline{toc}{chapter}{\indexname} % add index name to table of contents
    38734720\begin{theindex}
    3874 Italic page numbers give the location of the main entry for the referenced term.
    3875 Plain page numbers denote uses of the indexed term.
    3876 Entries for grammar non-terminals are italicized.
    3877 A typewriter font is used for grammar terminals and program identifiers.
     4721Italic page numbers give the location of the main entry for the referenced term. Plain page numbers
     4722denote uses of the indexed term. Entries for grammar non-terminals are italicized. A typewriter
     4723font is used for grammar terminals and program identifiers.
    38784724\indexspace
    38794725\input{refrat.ind}
  • src/CodeGen/CodeGenerator.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:32:16 2016
    13 // Update Count     : 243
     12// Last Modified On : Mon Jan 25 21:22:00 2016
     13// Update Count     : 242
    1414//
    1515
     
    2121#include "Parser/ParseNode.h"
    2222
    23 #include "SynTree/Declaration.h"
     23#include "SynTree/Type.h"
    2424#include "SynTree/Expression.h"
    2525#include "SynTree/Initializer.h"
    2626#include "SynTree/Statement.h"
    27 #include "SynTree/Type.h"
    2827
    2928#include "Common/utility.h"
     
    171170        }
    172171 
    173         void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}
     172        void CodeGenerator::visit( ContextDecl *aggregateDecl ) {}
    174173 
    175174        void CodeGenerator::visit( TypedefDecl *typeDecl ) {
     
    455454
    456455        void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) {
    457                 assert( false && "UntypedOffsetofExpr should not reach code generation" );
     456                assert( false );
    458457        }
    459458
     
    464463                output << ", " << mangleName( offsetofExpr->get_member() );
    465464                output << ")";
    466         }
    467 
    468         void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {
    469                 assert( false && "OffsetPackExpr should not reach code generation" );
    470465        }
    471466 
  • src/CodeGen/CodeGenerator.h

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:32:24 2016
    13 // Update Count     : 28
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Aug 12 14:27:14 2015
     13// Update Count     : 27
    1414//
    1515
     
    1919#include <list>
    2020
    21 #include "SynTree/Declaration.h"
    2221#include "SynTree/SynTree.h"
    2322#include "SynTree/Visitor.h"
    24 
    2523#include "SymTab/Indexer.h"
    2624
     
    4038                virtual void visit( UnionDecl *aggregateDecl );
    4139                virtual void visit( EnumDecl *aggregateDecl );
    42                 virtual void visit( TraitDecl *aggregateDecl );
     40                virtual void visit( ContextDecl *aggregateDecl );
    4341                virtual void visit( TypedefDecl *typeDecl );
    4442                virtual void visit( TypeDecl *typeDecl );
     
    6563                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6664                virtual void visit( OffsetofExpr *offsetofExpr );
    67                 virtual void visit( OffsetPackExpr *offsetPackExpr );
    6865                virtual void visit( LogicalExpr *logicalExpr );
    6966                virtual void visit( ConditionalExpr *conditionalExpr );
  • src/CodeGen/GenType.cc

    r0f9e4403 rc5833e8  
    1919#include "GenType.h"
    2020#include "CodeGenerator.h"
    21 
    22 #include "SynTree/Declaration.h"
     21#include "SynTree/Visitor.h"
     22#include "SynTree/Type.h"
    2323#include "SynTree/Expression.h"
    24 #include "SynTree/Type.h"
    25 #include "SynTree/Visitor.h"
    2624
    2725namespace CodeGen {
     
    4139                virtual void visit( EnumInstType *enumInst );
    4240                virtual void visit( TypeInstType *typeInst );
    43                 virtual void visit( VarArgsType *varArgsType );
    4441 
    4542          private:
     
    194191        }
    195192
    196         void GenType::visit( VarArgsType *varArgsType ) {
    197                 typeString = "__builtin_va_list " + typeString;
    198                 handleQualifiers( varArgsType );
    199         }
    200 
    201193        void GenType::handleQualifiers( Type *type ) {
    202194                if ( type->get_isConst() ) {
  • src/GenPoly/Box.cc

    r0f9e4403 rc5833e8  
    1414//
    1515
    16 #include <algorithm>
    17 #include <iterator>
    18 #include <list>
    19 #include <map>
    2016#include <set>
    2117#include <stack>
    2218#include <string>
    23 #include <utility>
    24 #include <vector>
     19#include <iterator>
     20#include <algorithm>
    2521#include <cassert>
    2622
    2723#include "Box.h"
    28 #include "DeclMutator.h"
     24#include "InstantiateGeneric.h"
    2925#include "PolyMutator.h"
    3026#include "FindFunction.h"
    31 #include "ScopedMap.h"
    32 #include "ScopedSet.h"
    3327#include "ScrubTyVars.h"
    3428
     
    3630
    3731#include "SynTree/Constant.h"
    38 #include "SynTree/Declaration.h"
     32#include "SynTree/Type.h"
    3933#include "SynTree/Expression.h"
    4034#include "SynTree/Initializer.h"
     35#include "SynTree/Statement.h"
    4136#include "SynTree/Mutator.h"
    42 #include "SynTree/Statement.h"
    43 #include "SynTree/Type.h"
    44 #include "SynTree/TypeSubstitution.h"
    4537
    4638#include "ResolvExpr/TypeEnvironment.h"
     
    4840#include "ResolvExpr/typeops.h"
    4941
    50 #include "SymTab/Indexer.h"
    5142#include "SymTab/Mangler.h"
    5243
     
    6354                FunctionType *makeAdapterType( FunctionType *adaptee, const TyVarMap &tyVars );
    6455
    65                 /// Abstracts type equality for a list of parameter types
    66                 struct TypeList {
    67                         TypeList() : params() {}
    68                         TypeList( const std::list< Type* > &_params ) : params() { cloneAll(_params, params); }
    69                         TypeList( std::list< Type* > &&_params ) : params( _params ) {}
    70 
    71                         TypeList( const TypeList &that ) : params() { cloneAll(that.params, params); }
    72                         TypeList( TypeList &&that ) : params( std::move( that.params ) ) {}
    73 
    74                         /// Extracts types from a list of TypeExpr*
    75                         TypeList( const std::list< TypeExpr* >& _params ) : params() {
    76                                 for ( std::list< TypeExpr* >::const_iterator param = _params.begin(); param != _params.end(); ++param ) {
    77                                         params.push_back( (*param)->get_type()->clone() );
    78                                 }
    79                         }
    80 
    81                         TypeList& operator= ( const TypeList &that ) {
    82                                 deleteAll( params );
    83 
    84                                 params.clear();
    85                                 cloneAll( that.params, params );
    86 
    87                                 return *this;
    88                         }
    89 
    90                         TypeList& operator= ( TypeList &&that ) {
    91                                 deleteAll( params );
    92 
    93                                 params = std::move( that.params );
    94 
    95                                 return *this;
    96                         }
    97 
    98                         ~TypeList() { deleteAll( params ); }
    99 
    100                         bool operator== ( const TypeList& that ) const {
    101                                 if ( params.size() != that.params.size() ) return false;
    102 
    103                                 SymTab::Indexer dummy;
    104                                 for ( std::list< Type* >::const_iterator it = params.begin(), jt = that.params.begin(); it != params.end(); ++it, ++jt ) {
    105                                         if ( ! ResolvExpr::typesCompatible( *it, *jt, dummy ) ) return false;
    106                                 }
    107                                 return true;
    108                         }
    109 
    110                         std::list< Type* > params;  ///< Instantiation parameters
    111                 };
    112 
    113                 /// Maps a key and a TypeList to the some value, accounting for scope
    114                 template< typename Key, typename Value >
    115                 class InstantiationMap {
    116                         /// Wraps value for a specific (Key, TypeList) combination
    117                         typedef std::pair< TypeList, Value* > Instantiation;
    118                         /// List of TypeLists paired with their appropriate values
    119                         typedef std::vector< Instantiation > ValueList;
    120                         /// Underlying map type; maps keys to a linear list of corresponding TypeLists and values
    121                         typedef ScopedMap< Key*, ValueList > InnerMap;
    122 
    123                         InnerMap instantiations;  ///< instantiations
    124 
    125                 public:
    126                         /// Starts a new scope
    127                         void beginScope() { instantiations.beginScope(); }
    128 
    129                         /// Ends a scope
    130                         void endScope() { instantiations.endScope(); }
    131 
    132                         /// Gets the value for the (key, typeList) pair, returns NULL on none such.
    133                         Value *lookup( Key *key, const std::list< TypeExpr* >& params ) const {
    134                                 TypeList typeList( params );
    135                                
    136                                 // scan scopes for matches to the key
    137                                 for ( typename InnerMap::const_iterator insts = instantiations.find( key ); insts != instantiations.end(); insts = instantiations.findNext( insts, key ) ) {
    138                                         for ( typename ValueList::const_reverse_iterator inst = insts->second.rbegin(); inst != insts->second.rend(); ++inst ) {
    139                                                 if ( inst->first == typeList ) return inst->second;
    140                                         }
    141                                 }
    142                                 // no matching instantiations found
    143                                 return 0;
    144                         }
    145 
    146                         /// Adds a value for a (key, typeList) pair to the current scope
    147                         void insert( Key *key, const std::list< TypeExpr* > &params, Value *value ) {
    148                                 instantiations[ key ].push_back( Instantiation( TypeList( params ), value ) );
    149                         }
    150                 };
    151 
    152                 /// Adds layout-generation functions to polymorphic types
    153                 class LayoutFunctionBuilder : public DeclMutator {
    154                         unsigned int functionNesting;  // current level of nested functions
    155                 public:
    156                         LayoutFunctionBuilder() : functionNesting( 0 ) {}
    157 
    158                         virtual DeclarationWithType *mutate( FunctionDecl *functionDecl );
    159                         virtual Declaration *mutate( StructDecl *structDecl );
    160                         virtual Declaration *mutate( UnionDecl *unionDecl );
    161                 };
    162                
    16356                /// Replaces polymorphic return types with out-parameters, replaces calls to polymorphic functions with adapter calls as needed, and adds appropriate type variables to the function call
    16457                class Pass1 : public PolyMutator {
     
    17972                        virtual void doEndScope();
    18073                  private:
     74                        /// Makes a new temporary array holding the offsets of the fields of `type`, and returns a new variable expression referencing it
     75                        Expression *makeOffsetArray( StructInstType *type );
    18176                        /// Pass the extra type parameters from polymorphic generic arguments or return types into a function application
    18277                        void passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes );
     
    205100                        ObjectDecl *makeTemporary( Type *type );
    206101
    207                         ScopedMap< std::string, DeclarationWithType *> assignOps;    ///< Currently known type variable assignment operators
    208                         ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;  ///< Currently known assignment operators
    209                         ScopedMap< std::string, DeclarationWithType* > adapters;     ///< Set of adapter functions in the current scope
    210                        
     102                        typedef std::map< std::string, DeclarationWithType *> AdapterMap;
     103                        std::map< std::string, DeclarationWithType *> assignOps;
     104                        ResolvExpr::TypeMap< DeclarationWithType > scopedAssignOps;
     105                        std::stack< AdapterMap > adapters;
    211106                        DeclarationWithType *retval;
    212107                        bool useRetval;
     
    214109                };
    215110
    216                 /// * Moves polymorphic returns in function types to pointer-type parameters
    217                 /// * adds type size and assertion parameters to parameter lists
     111                /// Moves polymorphic returns in function types to pointer-type parameters, adds type size and assertion parameters to parameter lists as well
    218112                class Pass2 : public PolyMutator {
    219113                  public:
     
    226120                        virtual Type *mutate( PointerType *pointerType );
    227121                        virtual Type *mutate( FunctionType *funcType );
    228                        
    229122                  private:
    230123                        void addAdapters( FunctionType *functionType );
     
    233126                };
    234127
    235                 /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
    236                 class GenericInstantiator : public DeclMutator {
    237                         /// Map of (generic type, parameter list) pairs to concrete type instantiations
    238                         InstantiationMap< AggregateDecl, AggregateDecl > instantiations;
    239                         /// Namer for concrete types
    240                         UniqueName typeNamer;
    241 
    242                 public:
    243                         GenericInstantiator() : DeclMutator(), instantiations(), typeNamer("_conc_") {}
    244 
    245                         virtual Type* mutate( StructInstType *inst );
    246                         virtual Type* mutate( UnionInstType *inst );
    247 
    248         //              virtual Expression* mutate( MemberExpr *memberExpr );
    249 
    250                         virtual void doBeginScope();
    251                         virtual void doEndScope();
    252                 private:
    253                         /// Wrap instantiation lookup for structs
    254                         StructDecl* lookup( StructInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (StructDecl*)instantiations.lookup( inst->get_baseStruct(), typeSubs ); }
    255                         /// Wrap instantiation lookup for unions
    256                         UnionDecl* lookup( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs ) { return (UnionDecl*)instantiations.lookup( inst->get_baseUnion(), typeSubs ); }
    257                         /// Wrap instantiation insertion for structs
    258                         void insert( StructInstType *inst, const std::list< TypeExpr* > &typeSubs, StructDecl *decl ) { instantiations.insert( inst->get_baseStruct(), typeSubs, decl ); }
    259                         /// Wrap instantiation insertion for unions
    260                         void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
    261                 };
    262 
    263                 /// Replaces member and size/align/offsetof expressions on polymorphic generic types with calculated expressions.
    264                 /// * Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference
    265                 /// * Calculates polymorphic offsetof expressions from offset array
    266                 /// * Inserts dynamic calculation of polymorphic type layouts where needed
    267                 class PolyGenericCalculator : public PolyMutator {
    268                 public:
     128                /// Replaces member expressions for polymorphic types with calculated add-field-offset-and-dereference;
     129                /// also fixes offsetof expressions.
     130                class MemberExprFixer : public PolyMutator {
     131                  public:
    269132                        template< typename DeclClass >
    270133                        DeclClass *handleDecl( DeclClass *decl, Type *type );
     
    277140                        virtual Type *mutate( FunctionType *funcType );
    278141                        virtual Expression *mutate( MemberExpr *memberExpr );
    279                         virtual Expression *mutate( SizeofExpr *sizeofExpr );
    280                         virtual Expression *mutate( AlignofExpr *alignofExpr );
    281142                        virtual Expression *mutate( OffsetofExpr *offsetofExpr );
    282                         virtual Expression *mutate( OffsetPackExpr *offsetPackExpr );
    283 
    284                         virtual void doBeginScope();
    285                         virtual void doEndScope();
    286 
    287                 private:
    288                         /// Makes a new variable in the current scope with the given name, type & optional initializer
    289                         ObjectDecl *makeVar( const std::string &name, Type *type, Initializer *init = 0 );
    290                         /// returns true if the type has a dynamic layout; such a layout will be stored in appropriately-named local variables when the function returns
    291                         bool findGeneric( Type *ty );
    292                         /// adds type parameters to the layout call; will generate the appropriate parameters if needed
    293                         void addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams );
    294 
    295                         /// Enters a new scope for type-variables, adding the type variables from ty
    296                         void beginTypeScope( Type *ty );
    297                         /// Exits the type-variable scope
    298                         void endTypeScope();
    299                        
    300                         ScopedSet< std::string > knownLayouts;          ///< Set of generic type layouts known in the current scope, indexed by sizeofName
    301                         ScopedSet< std::string > knownOffsets;          ///< Set of non-generic types for which the offset array exists in the current scope, indexed by offsetofName
    302143                };
    303144
     
    318159        } // anonymous namespace
    319160
     161        void printAllNotBuiltin( const std::list< Declaration *>& translationUnit, std::ostream &os ) {
     162                for ( std::list< Declaration *>::const_iterator i = translationUnit.begin(); i != translationUnit.end(); ++i ) {
     163                        if ( ! LinkageSpec::isBuiltin( (*i)->get_linkage() ) ) {
     164                                (*i)->print( os );
     165                                os << std::endl;
     166                        } // if
     167                } // for
     168        }
     169
    320170        /// version of mutateAll with special handling for translation unit so you can check the end of the prelude when debugging
    321171        template< typename MutatorType >
     
    345195
    346196        void box( std::list< Declaration *>& translationUnit ) {
    347                 LayoutFunctionBuilder layoutBuilder;
    348197                Pass1 pass1;
    349198                Pass2 pass2;
    350                 GenericInstantiator instantiator;
    351                 PolyGenericCalculator polyCalculator;
     199                MemberExprFixer memberFixer;
    352200                Pass3 pass3;
    353                
    354                 layoutBuilder.mutateDeclarationList( translationUnit );
    355201                mutateTranslationUnit/*All*/( translationUnit, pass1 );
    356202                mutateTranslationUnit/*All*/( translationUnit, pass2 );
    357                 instantiator.mutateDeclarationList( translationUnit );
    358                 mutateTranslationUnit/*All*/( translationUnit, polyCalculator );
     203                instantiateGeneric( translationUnit );
     204                mutateTranslationUnit/*All*/( translationUnit, memberFixer );
    359205                mutateTranslationUnit/*All*/( translationUnit, pass3 );
    360206        }
    361207
    362         ////////////////////////////////// LayoutFunctionBuilder ////////////////////////////////////////////
    363 
    364         DeclarationWithType *LayoutFunctionBuilder::mutate( FunctionDecl *functionDecl ) {
    365                 functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
    366                 mutateAll( functionDecl->get_oldDecls(), *this );
    367                 ++functionNesting;
    368                 functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
    369                 --functionNesting;
    370                 return functionDecl;
    371         }
    372        
    373         /// Get a list of type declarations that will affect a layout function
    374         std::list< TypeDecl* > takeOtypeOnly( std::list< TypeDecl* > &decls ) {
    375                 std::list< TypeDecl * > otypeDecls;
    376 
    377                 for ( std::list< TypeDecl* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
    378                         if ( (*decl)->get_kind() == TypeDecl::Any ) {
    379                                 otypeDecls.push_back( *decl );
    380                         }
    381                 }
    382                
    383                 return otypeDecls;
    384         }
    385 
    386         /// Adds parameters for otype layout to a function type
    387         void addOtypeParams( FunctionType *layoutFnType, std::list< TypeDecl* > &otypeParams ) {
    388                 BasicType sizeAlignType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    389                
    390                 for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
    391                         TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param );
    392                         std::string paramName = mangleType( &paramType );
    393                         layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
    394                         layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignType.clone(), 0 ) );
    395                 }
    396         }
    397 
    398         /// Builds a layout function declaration
    399         FunctionDecl *buildLayoutFunctionDecl( AggregateDecl *typeDecl, unsigned int functionNesting, FunctionType *layoutFnType ) {
    400                 // Routines at global scope marked "static" to prevent multiple definitions is separate translation units
    401                 // because each unit generates copies of the default routines for each aggregate.
    402                 FunctionDecl *layoutDecl = new FunctionDecl(
    403                         layoutofName( typeDecl ), functionNesting > 0 ? DeclarationNode::NoStorageClass : DeclarationNode::Static, LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), true, false );
    404                 layoutDecl->fixUniqueId();
    405                 return layoutDecl;
    406         }
    407 
    408         /// Makes a unary operation
    409         Expression *makeOp( const std::string &name, Expression *arg ) {
    410                 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) );
    411                 expr->get_args().push_back( arg );
    412                 return expr;
    413         }
    414 
    415         /// Makes a binary operation
    416         Expression *makeOp( const std::string &name, Expression *lhs, Expression *rhs ) {
    417                 UntypedExpr *expr = new UntypedExpr( new NameExpr( name ) );
    418                 expr->get_args().push_back( lhs );
    419                 expr->get_args().push_back( rhs );
    420                 return expr;
    421         }
    422 
    423         /// Returns the dereference of a local pointer variable
    424         Expression *derefVar( ObjectDecl *var ) {
    425                 return makeOp( "*?", new VariableExpr( var ) );
    426         }
    427 
    428         /// makes an if-statement with a single-expression if-block and no then block
    429         Statement *makeCond( Expression *cond, Expression *ifPart ) {
    430                 return new IfStmt( noLabels, cond, new ExprStmt( noLabels, ifPart ), 0 );
    431         }
    432 
    433         /// makes a statement that assigns rhs to lhs if lhs < rhs
    434         Statement *makeAssignMax( Expression *lhs, Expression *rhs ) {
    435                 return makeCond( makeOp( "?<?", lhs, rhs ), makeOp( "?=?", lhs->clone(), rhs->clone() ) );
    436         }
    437 
    438         /// makes a statement that aligns lhs to rhs (rhs should be an integer power of two)
    439         Statement *makeAlignTo( Expression *lhs, Expression *rhs ) {
    440                 // check that the lhs is zeroed out to the level of rhs
    441                 Expression *ifCond = makeOp( "?&?", lhs, makeOp( "?-?", rhs, new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), "1" ) ) ) );
    442                 // if not aligned, increment to alignment
    443                 Expression *ifExpr = makeOp( "?+=?", lhs->clone(), makeOp( "?-?", rhs->clone(), ifCond->clone() ) );
    444                 return makeCond( ifCond, ifExpr );
    445         }
    446        
    447         /// adds an expression to a compound statement
    448         void addExpr( CompoundStmt *stmts, Expression *expr ) {
    449                 stmts->get_kids().push_back( new ExprStmt( noLabels, expr ) );
    450         }
    451 
    452         /// adds a statement to a compound statement
    453         void addStmt( CompoundStmt *stmts, Statement *stmt ) {
    454                 stmts->get_kids().push_back( stmt );
    455         }
    456        
    457         Declaration *LayoutFunctionBuilder::mutate( StructDecl *structDecl ) {
    458                 // do not generate layout function for "empty" tag structs
    459                 if ( structDecl->get_members().empty() ) return structDecl;
    460 
    461                 // get parameters that can change layout, exiting early if none
    462                 std::list< TypeDecl* > otypeParams = takeOtypeOnly( structDecl->get_parameters() );
    463                 if ( otypeParams.empty() ) return structDecl;
    464 
    465                 // build layout function signature
    466                 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false );
    467                 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    468                 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    469                
    470                 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    471                 layoutFnType->get_parameters().push_back( sizeParam );
    472                 ObjectDecl *alignParam = new ObjectDecl( alignofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    473                 layoutFnType->get_parameters().push_back( alignParam );
    474                 ObjectDecl *offsetParam = new ObjectDecl( offsetofName( structDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    475                 layoutFnType->get_parameters().push_back( offsetParam );
    476                 addOtypeParams( layoutFnType, otypeParams );
    477 
    478                 // build function decl
    479                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( structDecl, functionNesting, layoutFnType );
    480 
    481                 // calculate struct layout in function body
    482 
    483                 // initialize size and alignment to 0 and 1 (will have at least one member to re-edit size
    484                 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "0" ) ) ) );
    485                 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );
    486                 unsigned long n_members = 0;
    487                 bool firstMember = true;
    488                 for ( std::list< Declaration* >::const_iterator member = structDecl->get_members().begin(); member != structDecl->get_members().end(); ++member ) {
    489                         DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );
    490                         assert( dwt );
    491                         Type *memberType = dwt->get_type();
    492 
    493                         if ( firstMember ) {
    494                                 firstMember = false;
    495                         } else {
    496                                 // make sure all members after the first (automatically aligned at 0) are properly padded for alignment
    497                                 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), new AlignofExpr( memberType->clone() ) ) );
    498                         }
    499                        
    500                         // place current size in the current offset index
    501                         addExpr( layoutDecl->get_statements(), makeOp( "?=?", makeOp( "?[?]", new VariableExpr( offsetParam ), new ConstantExpr( Constant::from( n_members ) ) ),
    502                                                                               derefVar( sizeParam ) ) );
    503                         ++n_members;
    504 
    505                         // add member size to current size
    506                         addExpr( layoutDecl->get_statements(), makeOp( "?+=?", derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );
    507                        
    508                         // take max of member alignment and global alignment
    509                         addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );
    510                 }
    511                 // make sure the type is end-padded to a multiple of its alignment
    512                 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );
    513 
    514                 addDeclarationAfter( layoutDecl );
    515                 return structDecl;
    516         }
    517        
    518         Declaration *LayoutFunctionBuilder::mutate( UnionDecl *unionDecl ) {
    519                 // do not generate layout function for "empty" tag unions
    520                 if ( unionDecl->get_members().empty() ) return unionDecl;
    521                
    522                 // get parameters that can change layout, exiting early if none
    523                 std::list< TypeDecl* > otypeParams = takeOtypeOnly( unionDecl->get_parameters() );
    524                 if ( otypeParams.empty() ) return unionDecl;
    525 
    526                 // build layout function signature
    527                 FunctionType *layoutFnType = new FunctionType( Type::Qualifiers(), false );
    528                 BasicType *sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    529                 PointerType *sizeAlignOutType = new PointerType( Type::Qualifiers(), sizeAlignType );
    530                
    531                 ObjectDecl *sizeParam = new ObjectDecl( sizeofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType, 0 );
    532                 layoutFnType->get_parameters().push_back( sizeParam );
    533                 ObjectDecl *alignParam = new ObjectDecl( alignofName( unionDecl->get_name() ), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, sizeAlignOutType->clone(), 0 );
    534                 layoutFnType->get_parameters().push_back( alignParam );
    535                 addOtypeParams( layoutFnType, otypeParams );
    536 
    537                 // build function decl
    538                 FunctionDecl *layoutDecl = buildLayoutFunctionDecl( unionDecl, functionNesting, layoutFnType );
    539 
    540                 // calculate union layout in function body
    541                 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );
    542                 addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant( sizeAlignType->clone(), "1" ) ) ) );
    543                 for ( std::list< Declaration* >::const_iterator member = unionDecl->get_members().begin(); member != unionDecl->get_members().end(); ++member ) {
    544                         DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );
    545                         assert( dwt );
    546                         Type *memberType = dwt->get_type();
    547                        
    548                         // take max member size and global size
    549                         addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );
    550                        
    551                         // take max of member alignment and global alignment
    552                         addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );
    553                 }
    554                 // make sure the type is end-padded to a multiple of its alignment
    555                 addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), derefVar( alignParam ) ) );
    556 
    557                 addDeclarationAfter( layoutDecl );
    558                 return unionDecl;
    559         }
    560        
    561208        ////////////////////////////////////////// Pass1 ////////////////////////////////////////////////////
    562209
     
    598245                }
    599246
    600                 Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) {}
     247                Pass1::Pass1() : useRetval( false ), tempNamer( "_temp" ) {
     248                        adapters.push(AdapterMap());
     249                }
    601250
    602251                /// Returns T if the given declaration is (*?=?)(T *, T) for some TypeInstType T (return not checked, but maybe should be), NULL otherwise
     
    660309
    661310                DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) {
    662                         // if this is a assignment function, put it in the map for this scope
     311                        // if this is a polymorphic assignment function, put it in the map for this scope
    663312                        if ( Type *assignedType = isAssignment( functionDecl ) ) {
    664313                                if ( ! dynamic_cast< TypeInstType* >( assignedType ) ) {
     
    669318                        if ( functionDecl->get_statements() ) {         // empty routine body ?
    670319                                doBeginScope();
    671                                 scopeTyVars.beginScope();
    672                                 assignOps.beginScope();
     320                                TyVarMap oldtyVars = scopeTyVars;
     321                                std::map< std::string, DeclarationWithType *> oldassignOps = assignOps;
    673322                                DeclarationWithType *oldRetval = retval;
    674323                                bool oldUseRetval = useRetval;
     
    701350                                } // for
    702351
     352                                AdapterMap & adapters = Pass1::adapters.top();
    703353                                for ( std::list< FunctionType *>::iterator funType = functions.begin(); funType != functions.end(); ++funType ) {
    704354                                        std::string mangleName = mangleAdapterName( *funType, scopeTyVars );
     
    711361                                functionDecl->set_statements( functionDecl->get_statements()->acceptMutator( *this ) );
    712362
    713                                 scopeTyVars.endScope();
    714                                 assignOps.endScope();
     363                                scopeTyVars = oldtyVars;
     364                                assignOps = oldassignOps;
     365                                // std::cerr << "end FunctionDecl: ";
     366                                // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) {
     367                                //      std::cerr << i->first << " ";
     368                                // }
     369                                // std::cerr << "\n";
    715370                                retval = oldRetval;
    716371                                useRetval = oldUseRetval;
     
    745400                }
    746401
     402                Expression *Pass1::makeOffsetArray( StructInstType *ty ) {
     403                        std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();
     404
     405                        // make a new temporary array
     406                        Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
     407                        std::stringstream lenGen;
     408                        lenGen << baseMembers.size();
     409                        ConstantExpr *lenExpr = new ConstantExpr( Constant( offsetType->clone(), lenGen.str() ) );
     410                        ObjectDecl *arrayTemp = makeTemporary( new ArrayType( Type::Qualifiers(), offsetType, lenExpr, false, false ) );
     411
     412                        // build initializer list for temporary
     413                        std::list< Initializer* > inits;
     414                        for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {
     415                                DeclarationWithType *memberDecl;
     416                                if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {
     417                                        memberDecl = origMember->clone();
     418                                } else {
     419                                        memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );
     420                                }
     421                                inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );
     422                        }
     423                        arrayTemp->set_init( new ListInit( inits ) );
     424
     425                        // return variable pointing to temporary
     426                        return new VariableExpr( arrayTemp );
     427                }
     428
    747429                void Pass1::passArgTypeVars( ApplicationExpr *appExpr, Type *parmType, Type *argBaseType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars, std::set< std::string > &seenTypes ) {
    748                         Type *polyType = isPolyType( parmType, exprTyVars );
    749                         if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
    750                                 std::string typeName = mangleType( polyType );
    751                                 if ( seenTypes.count( typeName ) ) return;
     430                        Type *polyBase = hasPolyBase( parmType, exprTyVars );
     431                        if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
     432                                std::string sizeName = sizeofName( polyBase );
     433                                if ( seenTypes.count( sizeName ) ) return;
    752434
    753435                                arg = appExpr->get_args().insert( arg, new SizeofExpr( argBaseType->clone() ) );
     
    755437                                arg = appExpr->get_args().insert( arg, new AlignofExpr( argBaseType->clone() ) );
    756438                                arg++;
    757                                 if ( dynamic_cast< StructInstType* >( polyType ) ) {
     439                                if ( dynamic_cast< StructInstType* >( polyBase ) ) {
    758440                                        if ( StructInstType *argBaseStructType = dynamic_cast< StructInstType* >( argBaseType ) ) {
    759                                                 // zero-length arrays are forbidden by C, so don't pass offset for empty struct
    760                                                 if ( ! argBaseStructType->get_baseStruct()->get_members().empty() ) {
    761                                                         arg = appExpr->get_args().insert( arg, new OffsetPackExpr( argBaseStructType->clone() ) );
    762                                                         arg++;
    763                                                 }
     441                                                arg = appExpr->get_args().insert( arg, makeOffsetArray( argBaseStructType ) );
     442                                                arg++;
    764443                                        } else {
    765444                                                throw SemanticError( "Cannot pass non-struct type for generic struct" );
     
    767446                                }
    768447
    769                                 seenTypes.insert( typeName );
     448                                seenTypes.insert( sizeName );
    770449                        }
    771450                }
     
    909588                                        return;
    910589                                } else if ( arg->get_results().front()->get_isLvalue() ) {
    911                                         // VariableExpr and MemberExpr are lvalues; need to check this isn't coming from the second arg of a comma expression though (not an lvalue)
    912                                         if ( CommaExpr *commaArg = dynamic_cast< CommaExpr* >( arg ) ) {
    913                                                 commaArg->set_arg2( new AddressExpr( commaArg->get_arg2() ) );
    914                                         } else {
    915                                                 arg = new AddressExpr( arg );
    916                                         }
     590                                        // VariableExpr and MemberExpr are lvalues
     591                                        arg = new AddressExpr( arg );
    917592                                } else {
    918593                                        // use type computed in unification to declare boxed variables
     
    1009684                        } // for
    1010685                }
     686
     687
    1011688
    1012689                FunctionDecl *Pass1::makeAdapter( FunctionType *adaptee, FunctionType *realType, const std::string &mangleName, const TyVarMap &tyVars ) {
     
    1095772                                        mangleName += makePolyMonoSuffix( originalFunction, exprTyVars );
    1096773
    1097                                         typedef ScopedMap< std::string, DeclarationWithType* >::iterator AdapterIter;
    1098                                         AdapterIter adapter = adapters.find( mangleName );
     774                                        AdapterMap & adapters = Pass1::adapters.top();
     775                                        AdapterMap::iterator adapter = adapters.find( mangleName );
    1099776                                        if ( adapter == adapters.end() ) {
    1100777                                                // adapter has not been created yet in the current scope, so define it
    1101778                                                FunctionDecl *newAdapter = makeAdapter( *funType, realFunction, mangleName, exprTyVars );
    1102                                                 std::pair< AdapterIter, bool > answer = adapters.insert( std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) );
    1103                                                 adapter = answer.first;
     779                                                adapter = adapters.insert( adapters.begin(), std::pair< std::string, DeclarationWithType *>( mangleName, newAdapter ) );
    1104780                                                stmtsToAdd.push_back( new DeclStmt( noLabels, newAdapter ) );
    1105781                                        } // if
     
    1125801                                addAssign->get_args().push_back( appExpr->get_args().front() );
    1126802                        } // if
    1127                         addAssign->get_args().push_back( new NameExpr( sizeofName( mangleType( polyType ) ) ) );
     803                        addAssign->get_args().push_back( new NameExpr( sizeofName( polyType ) ) );
    1128804                        addAssign->get_results().front() = appExpr->get_results().front()->clone();
    1129805                        if ( appExpr->get_env() ) {
     
    1152828                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    1153829                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1154                                                         multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
     830                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
    1155831                                                        ret->get_args().push_back( appExpr->get_args().front() );
    1156832                                                        ret->get_args().push_back( multiply );
     
    1158834                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    1159835                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1160                                                         multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
     836                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
    1161837                                                        ret->get_args().push_back( multiply );
    1162838                                                        ret->get_args().push_back( appExpr->get_args().back() );
     
    1221897                                                        UntypedExpr *divide = new UntypedExpr( new NameExpr( "?/?" ) );
    1222898                                                        divide->get_args().push_back( appExpr );
    1223                                                         divide->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
     899                                                        divide->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
    1224900                                                        divide->get_results().push_front( appExpr->get_results().front()->clone() );
    1225901                                                        if ( appExpr->get_env() ) {
     
    1231907                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    1232908                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1233                                                         multiply->get_args().push_back( new SizeofExpr( baseType1->clone() ) );
     909                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType1 ) ) );
    1234910                                                        appExpr->get_args().back() = multiply;
    1235911                                                } else if ( baseType2 ) {
    1236912                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    1237913                                                        multiply->get_args().push_back( appExpr->get_args().front() );
    1238                                                         multiply->get_args().push_back( new SizeofExpr( baseType2->clone() ) );
     914                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType2 ) ) );
    1239915                                                        appExpr->get_args().front() = multiply;
    1240916                                                } // if
     
    1246922                                                        UntypedExpr *multiply = new UntypedExpr( new NameExpr( "?*?" ) );
    1247923                                                        multiply->get_args().push_back( appExpr->get_args().back() );
    1248                                                         multiply->get_args().push_back( new SizeofExpr( baseType->clone() ) );
     924                                                        multiply->get_args().push_back( new NameExpr( sizeofName( baseType ) ) );
    1249925                                                        appExpr->get_args().back() = multiply;
    1250926                                                } // if
     
    1283959                        std::list< Expression *>::iterator paramBegin = appExpr->get_args().begin();
    1284960
    1285                         TyVarMap exprTyVars( (TypeDecl::Kind)-1 );
     961                        TyVarMap exprTyVars;
    1286962                        makeTyVarMap( function, exprTyVars );
    1287963                        ReferenceToType *polyRetType = isPolyRet( function );
     
    1306982
    1307983                        boxParams( appExpr, function, arg, exprTyVars );
     984
    1308985                        passAdapters( appExpr, function, exprTyVars );
    1309986
     
    13851062                                if ( TypeInstType *typeInst = dynamic_cast< TypeInstType *>( retval->get_type() ) ) {
    13861063                                        // find assignment operator for type variable
    1387                                         ScopedMap< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
     1064                                        std::map< std::string, DeclarationWithType *>::const_iterator assignIter = assignOps.find( typeInst->get_name() );
    13881065                                        if ( assignIter == assignOps.end() ) {
    13891066                                                throw SemanticError( "Attempt to return dtype or ftype object in ", returnStmt->get_expr() );
     
    14071084                                        std::list< TypeDecl* >::const_iterator forallIt = forallParams.begin();
    14081085                                        for ( ; tyIt != tyParams.end() && forallIt != forallParams.end(); ++tyIt, ++forallIt ) {
    1409                                                 // Add appropriate mapping to assignment expression environment
     1086                                                if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; // skip types with no assign op (ftype/dtype)
     1087
     1088                                                std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
     1089                                                assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
     1090                                                DeclarationWithType *actualDecl = asserts.front();
     1091                                                TypeInstType *actualType = isTypeInstAssignment( actualDecl );
     1092                                                assert( actualType && "First assertion of type with assertions should be assignment operator" );
    14101093                                                TypeExpr *formalTypeExpr = dynamic_cast< TypeExpr* >( *tyIt );
    14111094                                                assert( formalTypeExpr && "type parameters must be type expressions" );
    14121095                                                Type *formalType = formalTypeExpr->get_type();
    1413                                                 assignExpr->get_env()->add( (*forallIt)->get_name(), formalType );
    1414 
    1415                                                 // skip types with no assign op (ftype/dtype)
    1416                                                 if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue;
    1417 
    1418                                                 // find assignment operator for formal type
     1096                                                assignExpr->get_env()->add( actualType->get_name(), formalType );
     1097                                               
    14191098                                                DeclarationWithType *assertAssign = 0;
    14201099                                                if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) {
    1421                                                         ScopedMap< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
     1100                                                        std::map< std::string, DeclarationWithType *>::const_iterator assertAssignIt = assignOps.find( formalTypeInstType->get_name() );
    14221101                                                        if ( assertAssignIt == assignOps.end() ) {
    14231102                                                                throw SemanticError( "No assignment operation found for ", formalTypeInstType );
     
    14301109                                                        }
    14311110                                                }
    1432 
    1433                                                 // add inferred parameter for field assignment operator to assignment expression
    1434                                                 std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
    1435                                                 assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
    1436                                                 DeclarationWithType *actualDecl = asserts.front();
     1111                                               
     1112
    14371113                                                assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ]
    14381114                                                        = ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) );
     
    14601136
    14611137                Type * Pass1::mutate( PointerType *pointerType ) {
    1462                         scopeTyVars.beginScope();
     1138                        TyVarMap oldtyVars = scopeTyVars;
    14631139                        makeTyVarMap( pointerType, scopeTyVars );
    14641140
    14651141                        Type *ret = Mutator::mutate( pointerType );
    14661142
    1467                         scopeTyVars.endScope();
     1143                        scopeTyVars = oldtyVars;
    14681144                        return ret;
    14691145                }
    14701146
    14711147                Type * Pass1::mutate( FunctionType *functionType ) {
    1472                         scopeTyVars.beginScope();
     1148                        TyVarMap oldtyVars = scopeTyVars;
    14731149                        makeTyVarMap( functionType, scopeTyVars );
    14741150
    14751151                        Type *ret = Mutator::mutate( functionType );
    14761152
    1477                         scopeTyVars.endScope();
     1153                        scopeTyVars = oldtyVars;
    14781154                        return ret;
    14791155                }
    14801156
    14811157                void Pass1::doBeginScope() {
    1482                         adapters.beginScope();
     1158                        // push a copy of the current map
     1159                        adapters.push(adapters.top());
    14831160                        scopedAssignOps.beginScope();
    14841161                }
    14851162
    14861163                void Pass1::doEndScope() {
    1487                         adapters.endScope();
     1164                        adapters.pop();
    14881165                        scopedAssignOps.endScope();
    14891166                }
     
    15401217
    15411218                Type * Pass2::mutate( PointerType *pointerType ) {
    1542                         scopeTyVars.beginScope();
     1219                        TyVarMap oldtyVars = scopeTyVars;
    15431220                        makeTyVarMap( pointerType, scopeTyVars );
    15441221
    15451222                        Type *ret = Mutator::mutate( pointerType );
    15461223
    1547                         scopeTyVars.endScope();
     1224                        scopeTyVars = oldtyVars;
    15481225                        return ret;
    15491226                }
    15501227
    15511228                Type *Pass2::mutate( FunctionType *funcType ) {
    1552                         scopeTyVars.beginScope();
     1229                        TyVarMap oldtyVars = scopeTyVars;
    15531230                        makeTyVarMap( funcType, scopeTyVars );
    15541231
     
    15671244                        ObjectDecl newPtr( "", DeclarationNode::NoStorageClass, LinkageSpec::C, 0,
    15681245                                           new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 );
     1246//   ObjectDecl *newFunPtr = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ), 0 );
    15691247                        for ( std::list< TypeDecl *>::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) {
    15701248                                ObjectDecl *sizeParm, *alignParm;
     
    15721250                                if ( (*tyParm)->get_kind() == TypeDecl::Any ) {
    15731251                                        TypeInstType parmType( Type::Qualifiers(), (*tyParm)->get_name(), *tyParm );
    1574                                         std::string parmName = mangleType( &parmType );
    15751252
    15761253                                        sizeParm = newObj.clone();
    1577                                         sizeParm->set_name( sizeofName( parmName ) );
     1254                                        sizeParm->set_name( sizeofName( &parmType ) );
    15781255                                        last = funcType->get_parameters().insert( last, sizeParm );
    15791256                                        ++last;
    15801257
    15811258                                        alignParm = newObj.clone();
    1582                                         alignParm->set_name( alignofName( parmName ) );
     1259                                        alignParm->set_name( alignofName( &parmType ) );
    15831260                                        last = funcType->get_parameters().insert( last, alignParm );
    15841261                                        ++last;
     
    15951272                        std::set< std::string > seenTypes; // sizeofName for generic types we've seen
    15961273                        for ( std::list< DeclarationWithType* >::const_iterator fnParm = last; fnParm != funcType->get_parameters().end(); ++fnParm ) {
    1597                                 Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
    1598                                 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
    1599                                         std::string typeName = mangleType( polyType );
    1600                                         if ( seenTypes.count( typeName ) ) continue;
     1274                                Type *polyBase = hasPolyBase( (*fnParm)->get_type(), scopeTyVars );
     1275                                if ( polyBase && ! dynamic_cast< TypeInstType* >( polyBase ) ) {
     1276                                        std::string sizeName = sizeofName( polyBase );
     1277                                        if ( seenTypes.count( sizeName ) ) continue;
    16011278
    16021279                                        ObjectDecl *sizeParm, *alignParm, *offsetParm;
    16031280                                        sizeParm = newObj.clone();
    1604                                         sizeParm->set_name( sizeofName( typeName ) );
     1281                                        sizeParm->set_name( sizeName );
    16051282                                        last = funcType->get_parameters().insert( last, sizeParm );
    16061283                                        ++last;
    16071284
    16081285                                        alignParm = newObj.clone();
    1609                                         alignParm->set_name( alignofName( typeName ) );
     1286                                        alignParm->set_name( alignofName( polyBase ) );
    16101287                                        last = funcType->get_parameters().insert( last, alignParm );
    16111288                                        ++last;
    16121289
    1613                                         if ( StructInstType *polyBaseStruct = dynamic_cast< StructInstType* >( polyType ) ) {
    1614                                                 // NOTE zero-length arrays are illegal in C, so empty structs have no offset array
    1615                                                 if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) {
    1616                                                         offsetParm = newPtr.clone();
    1617                                                         offsetParm->set_name( offsetofName( typeName ) );
    1618                                                         last = funcType->get_parameters().insert( last, offsetParm );
    1619                                                         ++last;
    1620                                                 }
     1290                                        if ( dynamic_cast< StructInstType* >( polyBase ) ) {
     1291                                                offsetParm = newPtr.clone();
     1292                                                offsetParm->set_name( offsetofName( polyBase ) );
     1293                                                last = funcType->get_parameters().insert( last, offsetParm );
     1294                                                ++last;
    16211295                                        }
    16221296
    1623                                         seenTypes.insert( typeName );
     1297                                        seenTypes.insert( sizeName );
    16241298                                }
    16251299                        }
     
    16311305                        mutateAll( funcType->get_parameters(), *this );
    16321306
    1633                         scopeTyVars.endScope();
     1307                        scopeTyVars = oldtyVars;
    16341308                        return funcType;
    16351309                }
    16361310
    1637 //////////////////////////////////////// GenericInstantiator //////////////////////////////////////////////////
    1638 
    1639                 /// Makes substitutions of params into baseParams; returns true if all parameters substituted for a concrete type
    1640                 bool makeSubstitutions( const std::list< TypeDecl* >& baseParams, const std::list< Expression* >& params, std::list< TypeExpr* >& out ) {
    1641                         bool allConcrete = true;  // will finish the substitution list even if they're not all concrete
    1642 
    1643                         // substitute concrete types for given parameters, and incomplete types for placeholders
    1644                         std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
    1645                         std::list< Expression* >::const_iterator param = params.begin();
    1646                         for ( ; baseParam != baseParams.end() && param != params.end(); ++baseParam, ++param ) {
    1647         //                      switch ( (*baseParam)->get_kind() ) {
    1648         //                      case TypeDecl::Any: {   // any type is a valid substitution here; complete types can be used to instantiate generics
    1649                                         TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    1650                                         assert(paramType && "Aggregate parameters should be type expressions");
    1651                                         out.push_back( paramType->clone() );
    1652                                         // check that the substituted type isn't a type variable itself
    1653                                         if ( dynamic_cast< TypeInstType* >( paramType->get_type() ) ) {
    1654                                                 allConcrete = false;
    1655                                         }
    1656         //                              break;
    1657         //                      }
    1658         //                      case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
    1659         //                              out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
    1660         //                              break;
    1661         //                      case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
    1662         //                              out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
    1663         //                              break;
    1664         //                      }
    1665                         }
    1666 
    1667                         // if any parameters left over, not done
    1668                         if ( baseParam != baseParams.end() ) return false;
    1669         //              // if not enough parameters given, substitute remaining incomplete types for placeholders
    1670         //              for ( ; baseParam != baseParams.end(); ++baseParam ) {
    1671         //                      switch ( (*baseParam)->get_kind() ) {
    1672         //                      case TypeDecl::Any:    // no more substitutions here, fail early
    1673         //                              return false;
    1674         //                      case TypeDecl::Dtype:  // dtype can be consistently replaced with void [only pointers, which become void*]
    1675         //                              out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
    1676         //                              break;
    1677         //                      case TypeDecl::Ftype:  // pointer-to-ftype can be consistently replaced with void (*)(void) [similar to dtype]
    1678         //                              out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
    1679         //                              break;
    1680         //                      }
    1681         //              }
    1682 
    1683                         return allConcrete;
    1684                 }
    1685 
    1686                 /// Substitutes types of members of in according to baseParams => typeSubs, appending the result to out
    1687                 void substituteMembers( const std::list< Declaration* >& in, const std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs,
    1688                                                                 std::list< Declaration* >& out ) {
    1689                         // substitute types into new members
    1690                         TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() );
    1691                         for ( std::list< Declaration* >::const_iterator member = in.begin(); member != in.end(); ++member ) {
    1692                                 Declaration *newMember = (*member)->clone();
    1693                                 subs.apply(newMember);
    1694                                 out.push_back( newMember );
    1695                         }
    1696                 }
    1697 
    1698                 Type* GenericInstantiator::mutate( StructInstType *inst ) {
    1699                         // mutate subtypes
    1700                         Type *mutated = Mutator::mutate( inst );
    1701                         inst = dynamic_cast< StructInstType* >( mutated );
    1702                         if ( ! inst ) return mutated;
    1703 
    1704                         // exit early if no need for further mutation
    1705                         if ( inst->get_parameters().empty() ) return inst;
    1706                         assert( inst->get_baseParameters() && "Base struct has parameters" );
    1707 
    1708                         // check if type can be concretely instantiated; put substitutions into typeSubs
    1709                         std::list< TypeExpr* > typeSubs;
    1710                         if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
    1711                                 deleteAll( typeSubs );
    1712                                 return inst;
    1713                         }
    1714 
    1715                         // make concrete instantiation of generic type
    1716                         StructDecl *concDecl = lookup( inst, typeSubs );
    1717                         if ( ! concDecl ) {
    1718                                 // set concDecl to new type, insert type declaration into statements to add
    1719                                 concDecl = new StructDecl( typeNamer.newName( inst->get_name() ) );
    1720                                 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs,        concDecl->get_members() );
    1721                                 DeclMutator::addDeclaration( concDecl );
    1722                                 insert( inst, typeSubs, concDecl );
    1723                         }
    1724                         StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
    1725                         newInst->set_baseStruct( concDecl );
    1726 
    1727                         deleteAll( typeSubs );
    1728                         delete inst;
    1729                         return newInst;
    1730                 }
    1731 
    1732                 Type* GenericInstantiator::mutate( UnionInstType *inst ) {
    1733                         // mutate subtypes
    1734                         Type *mutated = Mutator::mutate( inst );
    1735                         inst = dynamic_cast< UnionInstType* >( mutated );
    1736                         if ( ! inst ) return mutated;
    1737 
    1738                         // exit early if no need for further mutation
    1739                         if ( inst->get_parameters().empty() ) return inst;
    1740                         assert( inst->get_baseParameters() && "Base union has parameters" );
    1741 
    1742                         // check if type can be concretely instantiated; put substitutions into typeSubs
    1743                         std::list< TypeExpr* > typeSubs;
    1744                         if ( ! makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs ) ) {
    1745                                 deleteAll( typeSubs );
    1746                                 return inst;
    1747                         }
    1748 
    1749                         // make concrete instantiation of generic type
    1750                         UnionDecl *concDecl = lookup( inst, typeSubs );
    1751                         if ( ! concDecl ) {
    1752                                 // set concDecl to new type, insert type declaration into statements to add
    1753                                 concDecl = new UnionDecl( typeNamer.newName( inst->get_name() ) );
    1754                                 substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
    1755                                 DeclMutator::addDeclaration( concDecl );
    1756                                 insert( inst, typeSubs, concDecl );
    1757                         }
    1758                         UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
    1759                         newInst->set_baseUnion( concDecl );
    1760 
    1761                         deleteAll( typeSubs );
    1762                         delete inst;
    1763                         return newInst;
    1764                 }
    1765 
    1766         //      /// Gets the base struct or union declaration for a member expression; NULL if not applicable
    1767         //      AggregateDecl* getMemberBaseDecl( MemberExpr *memberExpr ) {
    1768         //              // get variable for member aggregate
    1769         //              VariableExpr *varExpr = dynamic_cast< VariableExpr* >( memberExpr->get_aggregate() );
    1770         //              if ( ! varExpr ) return NULL;
    1771         //
    1772         //              // get object for variable
    1773         //              ObjectDecl *objectDecl = dynamic_cast< ObjectDecl* >( varExpr->get_var() );
    1774         //              if ( ! objectDecl ) return NULL;
    1775         //
    1776         //              // get base declaration from object type
    1777         //              Type *objectType = objectDecl->get_type();
    1778         //              StructInstType *structType = dynamic_cast< StructInstType* >( objectType );
    1779         //              if ( structType ) return structType->get_baseStruct();
    1780         //              UnionInstType *unionType = dynamic_cast< UnionInstType* >( objectType );
    1781         //              if ( unionType ) return unionType->get_baseUnion();
    1782         //
    1783         //              return NULL;
    1784         //      }
    1785         //
    1786         //      /// Finds the declaration with the given name, returning decls.end() if none such
    1787         //      std::list< Declaration* >::const_iterator findDeclNamed( const std::list< Declaration* > &decls, const std::string &name ) {
    1788         //              for( std::list< Declaration* >::const_iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
    1789         //                      if ( (*decl)->get_name() == name ) return decl;
    1790         //              }
    1791         //              return decls.end();
    1792         //      }
    1793         //
    1794         //      Expression* Instantiate::mutate( MemberExpr *memberExpr ) {
    1795         //              // mutate, exiting early if no longer MemberExpr
    1796         //              Expression *expr = Mutator::mutate( memberExpr );
    1797         //              memberExpr = dynamic_cast< MemberExpr* >( expr );
    1798         //              if ( ! memberExpr ) return expr;
    1799         //
    1800         //              // get declaration of member and base declaration of member, exiting early if not found
    1801         //              AggregateDecl *memberBase = getMemberBaseDecl( memberExpr );
    1802         //              if ( ! memberBase ) return memberExpr;
    1803         //              DeclarationWithType *memberDecl = memberExpr->get_member();
    1804         //              std::list< Declaration* >::const_iterator baseIt = findDeclNamed( memberBase->get_members(), memberDecl->get_name() );
    1805         //              if ( baseIt == memberBase->get_members().end() ) return memberExpr;
    1806         //              DeclarationWithType *baseDecl = dynamic_cast< DeclarationWithType* >( *baseIt );
    1807         //              if ( ! baseDecl ) return memberExpr;
    1808         //
    1809         //              // check if stated type of the member is not the type of the member's declaration; if so, need a cast
    1810         //              // this *SHOULD* be safe, I don't think anything but the void-replacements I put in for dtypes would make it past the typechecker
    1811         //              SymTab::Indexer dummy;
    1812         //              if ( ResolvExpr::typesCompatible( memberDecl->get_type(), baseDecl->get_type(), dummy ) ) return memberExpr;
    1813         //              else return new CastExpr( memberExpr, memberDecl->get_type() );
    1814         //      }
    1815 
    1816                 void GenericInstantiator::doBeginScope() {
    1817                         DeclMutator::doBeginScope();
    1818                         instantiations.beginScope();
    1819                 }
    1820 
    1821                 void GenericInstantiator::doEndScope() {
    1822                         DeclMutator::doEndScope();
    1823                         instantiations.endScope();
    1824                 }
    1825 
    1826 ////////////////////////////////////////// PolyGenericCalculator ////////////////////////////////////////////////////
    1827 
    1828                 void PolyGenericCalculator::beginTypeScope( Type *ty ) {
    1829                         scopeTyVars.beginScope();
    1830                         makeTyVarMap( ty, scopeTyVars );
    1831                 }
    1832 
    1833                 void PolyGenericCalculator::endTypeScope() {
    1834                         scopeTyVars.endScope();
    1835                 }
     1311////////////////////////////////////////// MemberExprFixer ////////////////////////////////////////////////////
    18361312
    18371313                template< typename DeclClass >
    1838                 DeclClass * PolyGenericCalculator::handleDecl( DeclClass *decl, Type *type ) {
    1839                         beginTypeScope( type );
    1840                         knownLayouts.beginScope();
    1841                         knownOffsets.beginScope();
     1314                DeclClass * MemberExprFixer::handleDecl( DeclClass *decl, Type *type ) {
     1315                        TyVarMap oldtyVars = scopeTyVars;
     1316                        makeTyVarMap( type, scopeTyVars );
    18421317
    18431318                        DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
    18441319
    1845                         knownOffsets.endScope();
    1846                         knownLayouts.endScope();
    1847                         endTypeScope();
     1320                        scopeTyVars = oldtyVars;
    18481321                        return ret;
    18491322                }
    18501323
    1851                 ObjectDecl * PolyGenericCalculator::mutate( ObjectDecl *objectDecl ) {
     1324                ObjectDecl * MemberExprFixer::mutate( ObjectDecl *objectDecl ) {
    18521325                        return handleDecl( objectDecl, objectDecl->get_type() );
    18531326                }
    18541327
    1855                 DeclarationWithType * PolyGenericCalculator::mutate( FunctionDecl *functionDecl ) {
     1328                DeclarationWithType * MemberExprFixer::mutate( FunctionDecl *functionDecl ) {
    18561329                        return handleDecl( functionDecl, functionDecl->get_functionType() );
    18571330                }
    18581331
    1859                 TypedefDecl * PolyGenericCalculator::mutate( TypedefDecl *typedefDecl ) {
     1332                TypedefDecl * MemberExprFixer::mutate( TypedefDecl *typedefDecl ) {
    18601333                        return handleDecl( typedefDecl, typedefDecl->get_base() );
    18611334                }
    18621335
    1863                 TypeDecl * PolyGenericCalculator::mutate( TypeDecl *typeDecl ) {
     1336                TypeDecl * MemberExprFixer::mutate( TypeDecl *typeDecl ) {
    18641337                        scopeTyVars[ typeDecl->get_name() ] = typeDecl->get_kind();
    18651338                        return Mutator::mutate( typeDecl );
    18661339                }
    18671340
    1868                 Type * PolyGenericCalculator::mutate( PointerType *pointerType ) {
    1869                         beginTypeScope( pointerType );
     1341                Type * MemberExprFixer::mutate( PointerType *pointerType ) {
     1342                        TyVarMap oldtyVars = scopeTyVars;
     1343                        makeTyVarMap( pointerType, scopeTyVars );
    18701344
    18711345                        Type *ret = Mutator::mutate( pointerType );
    18721346
    1873                         endTypeScope();
     1347                        scopeTyVars = oldtyVars;
    18741348                        return ret;
    18751349                }
    18761350
    1877                 Type * PolyGenericCalculator::mutate( FunctionType *funcType ) {
    1878                         beginTypeScope( funcType );
    1879 
    1880                         // make sure that any type information passed into the function is accounted for
    1881                         for ( std::list< DeclarationWithType* >::const_iterator fnParm = funcType->get_parameters().begin(); fnParm != funcType->get_parameters().end(); ++fnParm ) {
    1882                                 // condition here duplicates that in Pass2::mutate( FunctionType* )
    1883                                 Type *polyType = isPolyType( (*fnParm)->get_type(), scopeTyVars );
    1884                                 if ( polyType && ! dynamic_cast< TypeInstType* >( polyType ) ) {
    1885                                         knownLayouts.insert( mangleType( polyType ) );
    1886                                 }
    1887                         }
    1888                        
    1889                         Type *ret = Mutator::mutate( funcType );
    1890 
    1891                         endTypeScope();
     1351                Type * MemberExprFixer::mutate( FunctionType *functionType ) {
     1352                        TyVarMap oldtyVars = scopeTyVars;
     1353                        makeTyVarMap( functionType, scopeTyVars );
     1354
     1355                        Type *ret = Mutator::mutate( functionType );
     1356
     1357                        scopeTyVars = oldtyVars;
    18921358                        return ret;
    18931359                }
    18941360
    1895                 Statement *PolyGenericCalculator::mutate( DeclStmt *declStmt ) {
     1361                Statement *MemberExprFixer::mutate( DeclStmt *declStmt ) {
    18961362                        if ( ObjectDecl *objectDecl = dynamic_cast< ObjectDecl *>( declStmt->get_decl() ) ) {
    1897                                 if ( findGeneric( objectDecl->get_type() ) ) {
     1363                                if ( isPolyType( objectDecl->get_type(), scopeTyVars ) ) {
    18981364                                        // change initialization of a polymorphic value object
    18991365                                        // to allocate storage with alloca
    19001366                                        Type *declType = objectDecl->get_type();
    19011367                                        UntypedExpr *alloc = new UntypedExpr( new NameExpr( "__builtin_alloca" ) );
    1902                                         alloc->get_args().push_back( new NameExpr( sizeofName( mangleType( declType ) ) ) );
     1368                                        alloc->get_args().push_back( new NameExpr( sizeofName( declType ) ) );
    19031369
    19041370                                        delete objectDecl->get_init();
     
    19321398                        ConstantExpr *fieldIndex = new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), offset_namer.str() ) );
    19331399                        UntypedExpr *fieldOffset = new UntypedExpr( new NameExpr( "?[?]" ) );
    1934                         fieldOffset->get_args().push_back( new NameExpr( offsetofName( mangleType( objectType ) ) ) );
     1400                        fieldOffset->get_args().push_back( new NameExpr( offsetofName( objectType ) ) );
    19351401                        fieldOffset->get_args().push_back( fieldIndex );
    19361402                        return fieldOffset;
     
    19471413                }
    19481414               
    1949                 Expression *PolyGenericCalculator::mutate( MemberExpr *memberExpr ) {
     1415                Expression *MemberExprFixer::mutate( MemberExpr *memberExpr ) {
    19501416                        // mutate, exiting early if no longer MemberExpr
    19511417                        Expression *expr = Mutator::mutate( memberExpr );
     
    19641430                        Type *objectType = hasPolyBase( objectDecl->get_type(), scopeTyVars, &tyDepth );
    19651431                        if ( ! objectType ) return memberExpr;
    1966                         findGeneric( objectType ); // ensure layout for this type is available
    19671432
    19681433                        Expression *newMemberExpr = 0;
     
    19961461                }
    19971462
    1998                 ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) {
    1999                         ObjectDecl *newObj = new ObjectDecl( name, DeclarationNode::NoStorageClass, LinkageSpec::C, 0, type, init );
    2000                         stmtsToAdd.push_back( new DeclStmt( noLabels, newObj ) );
    2001                         return newObj;
    2002                 }
    2003 
    2004                 void PolyGenericCalculator::addOtypeParamsToLayoutCall( UntypedExpr *layoutCall, const std::list< Type* > &otypeParams ) {
    2005                         for ( std::list< Type* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) {
    2006                                 if ( findGeneric( *param ) ) {
    2007                                         // push size/align vars for a generic parameter back
    2008                                         std::string paramName = mangleType( *param );
    2009                                         layoutCall->get_args().push_back( new NameExpr( sizeofName( paramName ) ) );
    2010                                         layoutCall->get_args().push_back( new NameExpr( alignofName( paramName ) ) );
    2011                                 } else {
    2012                                         layoutCall->get_args().push_back( new SizeofExpr( (*param)->clone() ) );
    2013                                         layoutCall->get_args().push_back( new AlignofExpr( (*param)->clone() ) );
    2014                                 }
    2015                         }
    2016                 }
    2017 
    2018                 /// returns true if any of the otype parameters have a dynamic layout and puts all otype parameters in the output list
    2019                 bool findGenericParams( std::list< TypeDecl* > &baseParams, std::list< Expression* > &typeParams, std::list< Type* > &out ) {
    2020                         bool hasDynamicLayout = false;
    2021 
    2022                         std::list< TypeDecl* >::const_iterator baseParam = baseParams.begin();
    2023                         std::list< Expression* >::const_iterator typeParam = typeParams.begin();
    2024                         for ( ; baseParam != baseParams.end() && typeParam != typeParams.end(); ++baseParam, ++typeParam ) {
    2025                                 // skip non-otype parameters
    2026                                 if ( (*baseParam)->get_kind() != TypeDecl::Any ) continue;
    2027                                 TypeExpr *typeExpr = dynamic_cast< TypeExpr* >( *typeParam );
    2028                                 assert( typeExpr && "all otype parameters should be type expressions" );
    2029 
    2030                                 Type *type = typeExpr->get_type();
    2031                                 out.push_back( type );
    2032                                 if ( isPolyType( type ) ) hasDynamicLayout = true;
    2033                         }
    2034                         assert( baseParam == baseParams.end() && typeParam == typeParams.end() );
    2035 
    2036                         return hasDynamicLayout;
    2037                 }
    2038 
    2039                 bool PolyGenericCalculator::findGeneric( Type *ty ) {
    2040                         if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( ty ) ) {
    2041                                 // duplicate logic from isPolyType()
    2042                                 if ( env ) {
    2043                                         if ( Type *newType = env->lookup( typeInst->get_name() ) ) {
    2044                                                 return findGeneric( newType );
    2045                                         } // if
    2046                                 } // if
    2047                                 if ( scopeTyVars.find( typeInst->get_name() ) != scopeTyVars.end() ) {
    2048                                         // NOTE assumes here that getting put in the scopeTyVars included having the layout variables set
    2049                                         return true;
    2050                                 }
    2051                                 return false;
    2052                         } else if ( StructInstType *structTy = dynamic_cast< StructInstType* >( ty ) ) {
    2053                                 // check if this type already has a layout generated for it
    2054                                 std::string typeName = mangleType( ty );
    2055                                 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
    2056 
    2057                                 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
    2058                                 std::list< Type* > otypeParams;
    2059                                 if ( ! findGenericParams( *structTy->get_baseParameters(), structTy->get_parameters(), otypeParams ) ) return false;
    2060 
    2061                                 // insert local variables for layout and generate call to layout function
    2062                                 knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
    2063                                 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    2064 
    2065                                 int n_members = structTy->get_baseStruct()->get_members().size();
    2066                                 if ( n_members == 0 ) {
    2067                                         // all empty structs have the same layout - size 1, align 1
    2068                                         makeVar( sizeofName( typeName ), layoutType, new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
    2069                                         makeVar( alignofName( typeName ), layoutType->clone(), new SingleInit( new ConstantExpr( Constant::from( (unsigned long)1 ) ) ) );
    2070                                         // NOTE zero-length arrays are forbidden in C, so empty structs have no offsetof array
    2071                                 } else {
    2072                                         ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
    2073                                         ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
    2074                                         ObjectDecl *offsetVar = makeVar( offsetofName( typeName ), new ArrayType( Type::Qualifiers(), layoutType->clone(), new ConstantExpr( Constant::from( n_members ) ), false, false ) );
    2075 
    2076                                         // generate call to layout function
    2077                                         UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( structTy->get_baseStruct() ) ) );
    2078                                         layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
    2079                                         layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
    2080                                         layoutCall->get_args().push_back( new VariableExpr( offsetVar ) );
    2081                                         addOtypeParamsToLayoutCall( layoutCall, otypeParams );
    2082 
    2083                                         stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) );
    2084                                 }
    2085 
    2086                                 return true;
    2087                         } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) {
    2088                                 // check if this type already has a layout generated for it
    2089                                 std::string typeName = mangleType( ty );
    2090                                 if ( knownLayouts.find( typeName ) != knownLayouts.end() ) return true;
    2091 
    2092                                 // check if any of the type parameters have dynamic layout; if none do, this type is (or will be) monomorphized
    2093                                 std::list< Type* > otypeParams;
    2094                                 if ( ! findGenericParams( *unionTy->get_baseParameters(), unionTy->get_parameters(), otypeParams ) ) return false;
    2095 
    2096                                 // insert local variables for layout and generate call to layout function
    2097                                 knownLayouts.insert( typeName );  // done early so as not to interfere with the later addition of parameters to the layout call
    2098                                 Type *layoutType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    2099 
    2100                                 ObjectDecl *sizeVar = makeVar( sizeofName( typeName ), layoutType );
    2101                                 ObjectDecl *alignVar = makeVar( alignofName( typeName ), layoutType->clone() );
    2102 
    2103                                 // generate call to layout function
    2104                                 UntypedExpr *layoutCall = new UntypedExpr( new NameExpr( layoutofName( unionTy->get_baseUnion() ) ) );
    2105                                 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( sizeVar ) ) );
    2106                                 layoutCall->get_args().push_back( new AddressExpr( new VariableExpr( alignVar ) ) );
    2107                                 addOtypeParamsToLayoutCall( layoutCall, otypeParams );
    2108 
    2109                                 stmtsToAdd.push_back( new ExprStmt( noLabels, layoutCall ) );
    2110 
    2111                                 return true;
    2112                         }
    2113 
    2114                         return false;
    2115                 }
    2116 
    2117                 Expression *PolyGenericCalculator::mutate( SizeofExpr *sizeofExpr ) {
    2118                         Type *ty = sizeofExpr->get_type();
    2119                         if ( findGeneric( ty ) ) {
    2120                                 Expression *ret = new NameExpr( sizeofName( mangleType( ty ) ) );
    2121                                 delete sizeofExpr;
    2122                                 return ret;
    2123                         }
    2124                         return sizeofExpr;
    2125                 }
    2126 
    2127                 Expression *PolyGenericCalculator::mutate( AlignofExpr *alignofExpr ) {
    2128                         Type *ty = alignofExpr->get_type();
    2129                         if ( findGeneric( ty ) ) {
    2130                                 Expression *ret = new NameExpr( alignofName( mangleType( ty ) ) );
    2131                                 delete alignofExpr;
    2132                                 return ret;
    2133                         }
    2134                         return alignofExpr;
    2135                 }
    2136 
    2137                 Expression *PolyGenericCalculator::mutate( OffsetofExpr *offsetofExpr ) {
     1463                Expression *MemberExprFixer::mutate( OffsetofExpr *offsetofExpr ) {
    21381464                        // mutate, exiting early if no longer OffsetofExpr
    21391465                        Expression *expr = Mutator::mutate( offsetofExpr );
     
    21421468
    21431469                        // only mutate expressions for polymorphic structs/unions
    2144                         Type *ty = offsetofExpr->get_type();
    2145                         if ( ! findGeneric( ty ) ) return offsetofExpr;
    2146                        
     1470                        Type *ty = isPolyType( offsetofExpr->get_type(), scopeTyVars );
     1471                        if ( ! ty ) return offsetofExpr;
     1472
    21471473                        if ( StructInstType *structType = dynamic_cast< StructInstType* >( ty ) ) {
    21481474                                // replace offsetof expression by index into offset array
     
    21601486                }
    21611487
    2162                 Expression *PolyGenericCalculator::mutate( OffsetPackExpr *offsetPackExpr ) {
    2163                         StructInstType *ty = offsetPackExpr->get_type();
    2164 
    2165                         Expression *ret = 0;
    2166                         if ( findGeneric( ty ) ) {
    2167                                 // pull offset back from generated type information
    2168                                 ret = new NameExpr( offsetofName( mangleType( ty ) ) );
    2169                         } else {
    2170                                 std::string offsetName = offsetofName( mangleType( ty ) );
    2171                                 if ( knownOffsets.find( offsetName ) != knownOffsets.end() ) {
    2172                                         // use the already-generated offsets for this type
    2173                                         ret = new NameExpr( offsetName );
    2174                                 } else {
    2175                                         knownOffsets.insert( offsetName );
    2176 
    2177                                         std::list< Declaration* > &baseMembers = ty->get_baseStruct()->get_members();
    2178                                         Type *offsetType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt );
    2179 
    2180                                         // build initializer list for offset array
    2181                                         std::list< Initializer* > inits;
    2182                                         for ( std::list< Declaration* >::const_iterator member = baseMembers.begin(); member != baseMembers.end(); ++member ) {
    2183                                                 DeclarationWithType *memberDecl;
    2184                                                 if ( DeclarationWithType *origMember = dynamic_cast< DeclarationWithType* >( *member ) ) {
    2185                                                         memberDecl = origMember->clone();
    2186                                                 } else {
    2187                                                         memberDecl = new ObjectDecl( (*member)->get_name(), DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, offsetType->clone(), 0 );
    2188                                                 }
    2189                                                 inits.push_back( new SingleInit( new OffsetofExpr( ty->clone(), memberDecl ) ) );
    2190                                         }
    2191 
    2192                                         // build the offset array and replace the pack with a reference to it
    2193                                         ObjectDecl *offsetArray = makeVar( offsetName, new ArrayType( Type::Qualifiers(), offsetType, new ConstantExpr( Constant::from( baseMembers.size() ) ), false, false ),
    2194                                                         new ListInit( inits ) );
    2195                                         ret = new VariableExpr( offsetArray );
    2196                                 }
    2197                         }
    2198 
    2199                         delete offsetPackExpr;
    2200                         return ret;
    2201                 }
    2202 
    2203                 void PolyGenericCalculator::doBeginScope() {
    2204                         knownLayouts.beginScope();
    2205                         knownOffsets.beginScope();
    2206                 }
    2207 
    2208                 void PolyGenericCalculator::doEndScope() {
    2209                         knownLayouts.endScope();
    2210                         knownOffsets.endScope();
    2211                 }
    2212 
    22131488////////////////////////////////////////// Pass3 ////////////////////////////////////////////////////
    22141489
    22151490                template< typename DeclClass >
    22161491                DeclClass * Pass3::handleDecl( DeclClass *decl, Type *type ) {
    2217                         scopeTyVars.beginScope();
     1492                        TyVarMap oldtyVars = scopeTyVars;
    22181493                        makeTyVarMap( type, scopeTyVars );
    22191494
     
    22211496                        ScrubTyVars::scrub( decl, scopeTyVars );
    22221497
    2223                         scopeTyVars.endScope();
     1498                        scopeTyVars = oldtyVars;
    22241499                        return ret;
    22251500                }
     
    22511526
    22521527                Type * Pass3::mutate( PointerType *pointerType ) {
    2253                         scopeTyVars.beginScope();
     1528                        TyVarMap oldtyVars = scopeTyVars;
    22541529                        makeTyVarMap( pointerType, scopeTyVars );
    22551530
    22561531                        Type *ret = Mutator::mutate( pointerType );
    22571532
    2258                         scopeTyVars.endScope();
     1533                        scopeTyVars = oldtyVars;
    22591534                        return ret;
    22601535                }
    22611536
    22621537                Type * Pass3::mutate( FunctionType *functionType ) {
    2263                         scopeTyVars.beginScope();
     1538                        TyVarMap oldtyVars = scopeTyVars;
    22641539                        makeTyVarMap( functionType, scopeTyVars );
    22651540
    22661541                        Type *ret = Mutator::mutate( functionType );
    22671542
    2268                         scopeTyVars.endScope();
     1543                        scopeTyVars = oldtyVars;
    22691544                        return ret;
    22701545                }
  • src/GenPoly/DeclMutator.cc

    r0f9e4403 rc5833e8  
    2424        }
    2525
    26         DeclMutator::DeclMutator() : Mutator(), declsToAdd(1), declsToAddAfter(1) {}
     26        DeclMutator::DeclMutator() : Mutator(), declsToAdd(1) {}
    2727
    2828        DeclMutator::~DeclMutator() {}
    2929       
    3030        void DeclMutator::mutateDeclarationList( std::list< Declaration* > &decls ) {
    31                 for ( std::list< Declaration* >::iterator decl = decls.begin(); ; ++decl ) {
    32                         // splice in new declarations after previous decl
    33                         decls.splice( decl, declsToAddAfter.back() );
    34 
    35                         if ( decl == decls.end() ) break;
    36                        
     31                for ( std::list< Declaration* >::iterator decl = decls.begin(); decl != decls.end(); ++decl ) {
    3732                        // run mutator on declaration
    3833                        *decl = maybeMutate( *decl, *this );
     
    4439
    4540        void DeclMutator::doBeginScope() {
    46                 // add new decl lists for inside of scope
     41                // add new decl list for inside of scope
    4742                declsToAdd.resize( declsToAdd.size()+1 );
    48                 declsToAddAfter.resize( declsToAddAfter.size()+1 );
    4943        }
    5044
     
    5549                newBack->splice( newBack->end(), *back );
    5650                declsToAdd.pop_back();
    57                
    58                 back = declsToAddAfter.rbegin();
    59                 newBack = back + 1;
    60                 newBack->splice( newBack->end(), *back );
    61                 declsToAddAfter.pop_back();
    6251        }
    6352
     
    7261                stmt = maybeMutate( stmt, *this );
    7362                // return if no declarations to add
    74                 if ( declsToAdd.back().empty() && declsToAddAfter.back().empty() ) {
    75                         doEndScope();
    76                         return stmt;
    77                 }
     63                if ( declsToAdd.back().empty() ) return stmt;
    7864
    7965                // otherwise add declarations to new compound statement
     
    8571                declsToAdd.back().clear();
    8672
    87                 // add mutated statement
     73                doEndScope();
     74
     75                // add mutated statement and return
    8876                compound->get_kids().push_back( stmt );
    89 
    90                 // add declarations after to new compound statement
    91                 for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
    92                         DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
    93                         compound->get_kids().push_back( declStmt );
    94                 }
    95                 declsToAddAfter.back().clear();
    96 
    97                 doEndScope();
    9877                return compound;
    9978        }
     
    10180        void DeclMutator::mutateStatementList( std::list< Statement* > &stmts ) {
    10281                doBeginScope();
    103 
    10482               
    105                 for ( std::list< Statement* >::iterator stmt = stmts.begin(); ; ++stmt ) {
    106                         // add any new declarations after the previous statement
    107                         for ( std::list< Declaration* >::iterator decl = declsToAddAfter.back().begin(); decl != declsToAddAfter.back().end(); ++decl ) {
    108                                 DeclStmt *declStmt = new DeclStmt( noLabels, *decl );
    109                                 stmts.insert( stmt, declStmt );
    110                         }
    111                         declsToAddAfter.back().clear();
    112 
    113                         if ( stmt == stmts.end() ) break;
    114                        
     83                for ( std::list< Statement* >::iterator stmt = stmts.begin(); stmt != stmts.end(); ++stmt ) {
    11584                        // run mutator on statement
    11685                        *stmt = maybeMutate( *stmt, *this );
     
    12392                        declsToAdd.back().clear();
    12493                }
    125                
     94
    12695                doEndScope();
    12796        }
     
    12998        void DeclMutator::addDeclaration( Declaration *decl ) {
    13099                declsToAdd.back().push_back( decl );
    131         }
    132 
    133         void DeclMutator::addDeclarationAfter( Declaration *decl ) {
    134                 declsToAddAfter.back().push_back( decl );
    135100        }
    136101
  • src/GenPoly/DeclMutator.h

    r0f9e4403 rc5833e8  
    5555                /// Add a declaration to the list to be added before the current position
    5656                void addDeclaration( Declaration* decl );
    57                 /// Add a declaration to the list to be added after the current position
    58                 void addDeclarationAfter( Declaration* decl );
    5957        private:
    6058                /// A stack of declarations to add before the current declaration or statement
    6159                std::vector< std::list< Declaration* > > declsToAdd;
    62                 /// A stack of declarations to add after the current declaration or statement
    63                 std::vector< std::list< Declaration* > > declsToAddAfter;
    6460        };
    6561} // namespace
  • src/GenPoly/FindFunction.cc

    r0f9e4403 rc5833e8  
    5555                        TyVarMap::iterator var = tyVars.find( (*i)->get_name() );
    5656                        if ( var != tyVars.end() ) {
    57                                 tyVars.erase( var->first );
     57                                tyVars.erase( var );
    5858                        } // if
    5959                } // for
     
    6161
    6262        Type * FindFunction::mutate( FunctionType *functionType ) {
    63                 tyVars.beginScope();
     63                TyVarMap oldTyVars = tyVars;
    6464                handleForall( functionType->get_forall() );
    6565                mutateAll( functionType->get_returnVals(), *this );
     
    7272                        } // if
    7373                } // if
    74                 tyVars.endScope();
     74                tyVars = oldTyVars;
    7575                return ret;
    7676        }
    7777
    7878        Type * FindFunction::mutate( PointerType *pointerType ) {
    79                 tyVars.beginScope();
     79                TyVarMap oldTyVars = tyVars;
    8080                handleForall( pointerType->get_forall() );
    8181                Type *ret = Mutator::mutate( pointerType );
    82                 tyVars.endScope();
     82                tyVars = oldTyVars;
    8383                return ret;
    8484        }
  • src/GenPoly/GenPoly.cc

    r0f9e4403 rc5833e8  
    1616#include "GenPoly.h"
    1717
     18#include "SymTab/Mangler.h"
    1819#include "SynTree/Expression.h"
    1920#include "SynTree/Type.h"
     
    3738        ReferenceToType *isPolyRet( FunctionType *function ) {
    3839                if ( ! function->get_returnVals().empty() ) {
    39                         TyVarMap forallTypes( (TypeDecl::Kind)-1 );
     40                        TyVarMap forallTypes;
    4041                        makeTyVarMap( function, forallTypes );
    4142                        return (ReferenceToType*)isPolyType( function->get_returnVals().front()->get_type(), forallTypes );
     
    217218        }
    218219
     220        std::string sizeofName( Type *ty ) {
     221                return std::string( "_sizeof_" ) + SymTab::Mangler::mangleType( ty );
     222        }
     223
     224        std::string alignofName( Type *ty ) {
     225                return std::string( "_alignof_" ) + SymTab::Mangler::mangleType( ty );
     226        }
     227
     228        std::string offsetofName( Type* ty ) {
     229                return std::string( "_offsetof_" ) + SymTab::Mangler::mangleType( ty );
     230        }
     231
    219232} // namespace GenPoly
    220233
  • src/GenPoly/GenPoly.h

    r0f9e4403 rc5833e8  
    1717#define GENPOLY_H
    1818
     19#include <map>
    1920#include <string>
    2021#include <iostream>
    2122#include <utility>
    22 
    23 #include "ErasableScopedMap.h"
    24 
    25 #include "SymTab/Mangler.h"
    2623
    2724#include "SynTree/Declaration.h"
     
    3027
    3128namespace GenPoly {
    32         typedef ErasableScopedMap< std::string, TypeDecl::Kind > TyVarMap;
     29        typedef std::map< std::string, TypeDecl::Kind > TyVarMap;
    3330
    3431        /// A function needs an adapter if it returns a polymorphic value or if any of its
     
    7269        void printTyVarMap( std::ostream &os, const TyVarMap &tyVarMap );
    7370
    74         /// Gets the mangled name of this type; alias for SymTab::Mangler::mangleType().
    75         inline std::string mangleType( Type *ty ) { return SymTab::Mangler::mangleType( ty ); }
    76        
    77         /// Gets the name of the sizeof parameter for the type, given its mangled name
    78         inline std::string sizeofName( const std::string &name ) { return std::string( "_sizeof_" ) + name; }
     71        /// Gets the name of the sizeof parameter for the type
     72        std::string sizeofName( Type *ty );
    7973
    80         /// Gets the name of the alignof parameter for the type, given its mangled name
    81         inline std::string alignofName( const std::string &name ) { return std::string( "_alignof_" ) + name; }
     74        /// Gets the name of the alignof parameter for the type
     75        std::string alignofName( Type *ty );
    8276
    83         /// Gets the name of the offsetof parameter for the type, given its mangled name
    84         inline std::string offsetofName( const std::string &name ) { return std::string( "_offsetof_" ) + name; }
    85 
    86         /// Gets the name of the layout function for a given aggregate type, given its declaration
    87         inline std::string layoutofName( AggregateDecl *decl ) { return std::string( "_layoutof_" ) + decl->get_name(); }
    88        
     77        /// Gets the name of the offsetof parameter for the type
     78        std::string offsetofName( Type *ty );
    8979} // namespace GenPoly
    9080
  • src/GenPoly/Lvalue.cc

    r0f9e4403 rc5833e8  
    1717
    1818#include "Lvalue.h"
    19 
    20 #include "GenPoly.h"
    2119
    2220#include "SynTree/Declaration.h"
     
    6563
    6664        namespace {
    67                 Type* isLvalueRet( FunctionType *function ) {
    68                         if ( function->get_returnVals().empty() ) return 0;
    69                         Type *ty = function->get_returnVals().front()->get_type();
    70                         return ty->get_isLvalue() ? ty : 0;
     65                bool isLvalueRet( FunctionType *function ) {
     66                        if ( ! function->get_returnVals().empty() ) {
     67                                return function->get_returnVals().front()->get_type()->get_isLvalue();
     68                        } else {
     69                                return false;
     70                        } // if
    7171                }
    7272
     
    107107                        assert( function );
    108108
    109                         Type *funType = isLvalueRet( function );
    110                         if ( funType && ! isIntrinsicApp( appExpr ) ) {
    111                                 Expression *expr = appExpr;
    112                                 Type *appType = appExpr->get_results().front();
    113                                 if ( isPolyType( funType ) && ! isPolyType( appType ) ) {
    114                                         // make sure cast for polymorphic type is inside dereference
    115                                         expr = new CastExpr( appExpr, new PointerType( Type::Qualifiers(), appType->clone() ) );
    116                                 }
     109                        std::string typeName;
     110                        if ( isLvalueRet( function ) && ! isIntrinsicApp( appExpr ) ) {
    117111                                UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
    118                                 deref->get_results().push_back( appType->clone() );
    119                                 appExpr->get_results().front() = new PointerType( Type::Qualifiers(), appType );
    120                                 deref->get_args().push_back( expr );
     112                                deref->get_results().push_back( appExpr->get_results().front() );
     113                                appExpr->get_results().front() = new PointerType( Type::Qualifiers(), deref->get_results().front()->clone() );
     114                                deref->get_args().push_back( appExpr );
    121115                                return deref;
    122116                        } else {
  • src/GenPoly/PolyMutator.cc

    r0f9e4403 rc5833e8  
    2727        }
    2828
    29         PolyMutator::PolyMutator() : scopeTyVars( (TypeDecl::Kind)-1 ), env( 0 ) {}
     29        PolyMutator::PolyMutator() : env( 0 ) {
     30        }
    3031
    3132        void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) {
  • src/GenPoly/ScopedMap.h

    r0f9e4403 rc5833e8  
    1717#define _SCOPEDMAP_H
    1818
    19 #include <cassert>
    2019#include <iterator>
    2120#include <map>
     
    5150                        typedef typename scope_list::size_type size_type;
    5251
    53                         /// Checks if this iterator points to a valid item
    54                         bool is_valid() const {
    55                                 return it != (*scopes)[i].end();
    56                         }
    57 
    58                         /// Increments on invalid
    59                         iterator& next_valid() {
    60                                 if ( ! is_valid() ) { ++(*this); }
    61                                 return *this;
    62                         }
    63 
    64                         /// Decrements on invalid
    65                         iterator& prev_valid() {
    66                                 if ( ! is_valid() ) { --(*this); }
    67                                 return *this;
    68                         }
    69 
    7052                        iterator(scope_list const &_scopes, const wrapped_iterator &_it, size_type _i)
    7153                                : scopes(&_scopes), it(_it), i(_i) {}
     
    8567                                        --i;
    8668                                        it = (*scopes)[i].begin();
    87                                 } else {
    88                                         ++it;
    89                                 }
    90                                 return next_valid();
     69                                        return *this;
     70                                }
     71                                ++it;
     72                                return *this;
    9173                        }
    9274                        iterator& operator++ (int) { iterator tmp = *this; ++(*this); return tmp; }
     
    9981                                }
    10082                                --it;
    101                                 return prev_valid();
     83                                return *this;
    10284                        }
    10385                        iterator& operator-- (int) { iterator tmp = *this; --(*this); return tmp; }
     
    122104                        typedef typename scope_list::size_type size_type;
    123105
    124                         /// Checks if this iterator points to a valid item
    125                         bool is_valid() const {
    126                                 return it != (*scopes)[i].end();
    127                         }
    128 
    129                         /// Increments on invalid
    130                         const_iterator& next_valid() {
    131                                 if ( ! is_valid() ) { ++(*this); }
    132                                 return *this;
    133                         }
    134 
    135                         /// Decrements on invalid
    136                         const_iterator& prev_valid() {
    137                                 if ( ! is_valid() ) { --(*this); }
    138                                 return *this;
    139                         }
    140 
    141106                        const_iterator(scope_list const &_scopes, const wrapped_const_iterator &_it, size_type _i)
    142107                                : scopes(&_scopes), it(_it), i(_i) {}
     
    161126                                        --i;
    162127                                        it = (*scopes)[i].begin();
    163                                 } else {
    164                                         ++it;
    165                                 }
    166                                 return next_valid();
     128                                        return *this;
     129                                }
     130                                ++it;
     131                                return *this;
    167132                        }
    168133                        const_iterator& operator++ (int) { const_iterator tmp = *this; ++(*this); return tmp; }
     
    175140                                }
    176141                                --it;
    177                                 return prev_valid();
     142                                return *this;
    178143                        }
    179144                        const_iterator& operator-- (int) { const_iterator tmp = *this; --(*this); return tmp; }
     
    199164                void endScope() {
    200165                        scopes.pop_back();
    201                         assert( ! scopes.empty() );
    202166                }
    203167
     
    205169                ScopedMap() { beginScope(); }
    206170
    207                 iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
    208                 const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
    209                 const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1).next_valid(); }
     171                iterator begin() { return iterator(scopes, scopes.back().begin(), scopes.size()-1); }
     172                const_iterator begin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
     173                const_iterator cbegin() const { return const_iterator(scopes, scopes.back().begin(), scopes.size()-1); }
    210174                iterator end() { return iterator(scopes, scopes[0].end(), 0); }
    211175                const_iterator end() const { return const_iterator(scopes, scopes[0].end(), 0); }
     
    224188                        return end();
    225189                }
    226                 const_iterator find( const Key &key ) const {
    227                                 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->find( key ) );
    228                 }
     190                const_iterator find( const Key &key ) const { return const_iterator( find( key ) ); }
    229191               
    230192                /// Finds the given key in the outermost scope inside the given scope where it occurs
     
    238200                        return end();
    239201                }
    240                 const_iterator findNext( const_iterator &it, const Key &key ) const {
    241                                 return const_iterator( const_cast< ScopedMap< Key, Value >* >(this)->findNext( it, key ) );
    242                 }
     202                const_iterator findNext( const_iterator &it, const Key &key ) const { return const_iterator( findNext( it, key ) ); }
    243203
    244204                /// Inserts the given key-value pair into the outermost scope
     
    248208                }
    249209                std::pair< iterator, bool > insert( const Key &key, const Value &value ) { return insert( std::make_pair( key, value ) ); }
    250 
    251                 Value& operator[] ( const Key &key ) {
    252                         iterator slot = find( key );
    253                         if ( slot != end() ) return slot->second;
    254                         return insert( key, Value() ).first->second;
    255                 }
     210               
    256211        };
    257212} // namespace GenPoly
  • src/GenPoly/ScrubTyVars.cc

    r0f9e4403 rc5833e8  
    6464                // sizeof( T ) => _sizeof_T parameter, which is the size of T
    6565                if ( Type *polyType = isPolyType( szeof->get_type() ) ) {
    66                         Expression *expr = new NameExpr( sizeofName( mangleType( polyType ) ) );
     66                        Expression *expr = new NameExpr( sizeofName( polyType ) );
    6767                        return expr;
    6868                } else {
     
    7474                // alignof( T ) => _alignof_T parameter, which is the alignment of T
    7575                if ( Type *polyType = isPolyType( algnof->get_type() ) ) {
    76                         Expression *expr = new NameExpr( alignofName( mangleType( polyType ) ) );
     76                        Expression *expr = new NameExpr( alignofName( polyType ) );
    7777                        return expr;
    7878                } else {
  • src/GenPoly/module.mk

    r0f9e4403 rc5833e8  
    2323       GenPoly/CopyParams.cc \
    2424       GenPoly/FindFunction.cc \
     25       GenPoly/InstantiateGeneric.cc \
    2526       GenPoly/DeclMutator.cc
  • src/InitTweak/InitModel.h

    r0f9e4403 rc5833e8  
    7575                        void visit( UntypedOffsetofExpr * ) { throw 0; }
    7676                        void visit( OffsetofExpr * ) { throw 0; }
    77                         void visit( OffsetPackExpr * ) { throw 0; }
    7877                        void visit( AttrExpr * ) { throw 0; }
    7978                        void visit( LogicalExpr * ) { throw 0; }
  • src/Makefile.am

    r0f9e4403 rc5833e8  
    1111## Created On       : Sun May 31 08:51:46 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Fri Feb 26 17:19:16 2016
    14 ## Update Count     : 57
     13## Last Modified On : Thu Jan 28 16:50:26 2016
     14## Update Count     : 55
    1515###############################################################################
    1616
     
    4646driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL
    4747
    48 CXXFLAGS = -g -std=c++11                # remove default -O2 to allow better debugging
     48CXXFLAGS = -g   # remove default -O2 to allow better debugging
    4949
    5050MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
  • src/Makefile.in

    r0f9e4403 rc5833e8  
    122122        GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT) \
    123123        GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) \
     124        GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) \
    124125        GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) \
    125126        InitTweak/driver_cfa_cpp-RemoveInit.$(OBJEXT) \
     
    153154        ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT) \
    154155        ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT) \
     156        SymTab/driver_cfa_cpp-IdTable.$(OBJEXT) \
    155157        SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) \
    156158        SymTab/driver_cfa_cpp-Mangler.$(OBJEXT) \
     
    169171        SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT) \
    170172        SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) \
    171         SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT) \
    172173        SynTree/driver_cfa_cpp-Constant.$(OBJEXT) \
    173174        SynTree/driver_cfa_cpp-Expression.$(OBJEXT) \
     
    190191        SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \
    191192        SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \
     193        SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT) \
    192194        SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \
    193195        Tuples/driver_cfa_cpp-Mutate.$(OBJEXT) \
     
    245247CXX = @CXX@
    246248CXXDEPMODE = @CXXDEPMODE@
    247 CXXFLAGS = -g -std=c++11                # remove default -O2 to allow better debugging
     249CXXFLAGS = -g   # remove default -O2 to allow better debugging
    248250CYGPATH_W = @CYGPATH_W@
    249251DEFS = @DEFS@
     
    345347        GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \
    346348        GenPoly/CopyParams.cc GenPoly/FindFunction.cc \
    347         GenPoly/DeclMutator.cc InitTweak/RemoveInit.cc \
    348         Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \
    349         Parser/ParseNode.cc Parser/DeclarationNode.cc \
    350         Parser/ExpressionNode.cc Parser/StatementNode.cc \
    351         Parser/InitializerNode.cc Parser/TypeData.cc \
    352         Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \
     349        GenPoly/InstantiateGeneric.cc GenPoly/DeclMutator.cc \
     350        InitTweak/RemoveInit.cc Parser/parser.yy Parser/lex.ll \
     351        Parser/TypedefTable.cc Parser/ParseNode.cc \
     352        Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
     353        Parser/StatementNode.cc Parser/InitializerNode.cc \
     354        Parser/TypeData.cc Parser/LinkageSpec.cc \
     355        Parser/parseutility.cc Parser/Parser.cc \
    353356        ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \
    354357        ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \
     
    359362        ResolvExpr/RenameVars.cc ResolvExpr/FindOpenVars.cc \
    360363        ResolvExpr/PolyCost.cc ResolvExpr/Occurs.cc \
    361         ResolvExpr/TypeEnvironment.cc SymTab/Indexer.cc \
    362         SymTab/Mangler.cc SymTab/Validate.cc SymTab/FixFunction.cc \
    363         SymTab/ImplementationType.cc SymTab/TypeEquality.cc \
    364         SynTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \
    365         SynTree/PointerType.cc SynTree/ArrayType.cc \
    366         SynTree/FunctionType.cc SynTree/ReferenceToType.cc \
    367         SynTree/TupleType.cc SynTree/TypeofType.cc SynTree/AttrType.cc \
    368         SynTree/VarArgsType.cc SynTree/Constant.cc \
     364        ResolvExpr/TypeEnvironment.cc SymTab/IdTable.cc \
     365        SymTab/Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \
     366        SymTab/FixFunction.cc SymTab/ImplementationType.cc \
     367        SymTab/TypeEquality.cc SynTree/Type.cc SynTree/VoidType.cc \
     368        SynTree/BasicType.cc SynTree/PointerType.cc \
     369        SynTree/ArrayType.cc SynTree/FunctionType.cc \
     370        SynTree/ReferenceToType.cc SynTree/TupleType.cc \
     371        SynTree/TypeofType.cc SynTree/AttrType.cc SynTree/Constant.cc \
    369372        SynTree/Expression.cc SynTree/TupleExpr.cc \
    370373        SynTree/CommaExpr.cc SynTree/TypeExpr.cc \
     
    376379        SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \
    377380        SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \
    378         SynTree/TypeSubstitution.cc Tuples/Mutate.cc \
    379         Tuples/AssignExpand.cc Tuples/FunctionFixer.cc \
    380         Tuples/TupleAssignment.cc Tuples/FunctionChecker.cc \
    381         Tuples/NameMatcher.cc
     381        SynTree/CodeGenVisitor.cc SynTree/TypeSubstitution.cc \
     382        Tuples/Mutate.cc Tuples/AssignExpand.cc \
     383        Tuples/FunctionFixer.cc Tuples/TupleAssignment.cc \
     384        Tuples/FunctionChecker.cc Tuples/NameMatcher.cc
    382385MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \
    383386        ${cfa_cpplib_PROGRAMS}}
     
    407410          esac; \
    408411        done; \
    409         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
     412        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
    410413        $(am__cd) $(top_srcdir) && \
    411           $(AUTOMAKE) --foreign src/Makefile
     414          $(AUTOMAKE) --gnu src/Makefile
    412415.PRECIOUS: Makefile
    413416Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
     
    552555        GenPoly/$(DEPDIR)/$(am__dirstamp)
    553556GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT):  \
     557        GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
     558GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT):  \
    554559        GenPoly/$(am__dirstamp) GenPoly/$(DEPDIR)/$(am__dirstamp)
    555560GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT): GenPoly/$(am__dirstamp) \
     
    658663        @$(MKDIR_P) SymTab/$(DEPDIR)
    659664        @: > SymTab/$(DEPDIR)/$(am__dirstamp)
     665SymTab/driver_cfa_cpp-IdTable.$(OBJEXT): SymTab/$(am__dirstamp) \
     666        SymTab/$(DEPDIR)/$(am__dirstamp)
    660667SymTab/driver_cfa_cpp-Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \
    661668        SymTab/$(DEPDIR)/$(am__dirstamp)
     
    695702        SynTree/$(DEPDIR)/$(am__dirstamp)
    696703SynTree/driver_cfa_cpp-AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
    697         SynTree/$(DEPDIR)/$(am__dirstamp)
    698 SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
    699704        SynTree/$(DEPDIR)/$(am__dirstamp)
    700705SynTree/driver_cfa_cpp-Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
     
    738743SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \
    739744        SynTree/$(DEPDIR)/$(am__dirstamp)
     745SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT):  \
     746        SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)
    740747SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT):  \
    741748        SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)
     
    788795        -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT)
    789796        -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT)
     797        -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT)
    790798        -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT)
    791799        -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT)
     
    823831        -rm -f ResolvExpr/driver_cfa_cpp-Unify.$(OBJEXT)
    824832        -rm -f SymTab/driver_cfa_cpp-FixFunction.$(OBJEXT)
     833        -rm -f SymTab/driver_cfa_cpp-IdTable.$(OBJEXT)
    825834        -rm -f SymTab/driver_cfa_cpp-ImplementationType.$(OBJEXT)
    826835        -rm -f SymTab/driver_cfa_cpp-Indexer.$(OBJEXT)
     
    834843        -rm -f SynTree/driver_cfa_cpp-AttrType.$(OBJEXT)
    835844        -rm -f SynTree/driver_cfa_cpp-BasicType.$(OBJEXT)
     845        -rm -f SynTree/driver_cfa_cpp-CodeGenVisitor.$(OBJEXT)
    836846        -rm -f SynTree/driver_cfa_cpp-CommaExpr.$(OBJEXT)
    837847        -rm -f SynTree/driver_cfa_cpp-CompoundStmt.$(OBJEXT)
     
    857867        -rm -f SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT)
    858868        -rm -f SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT)
    859         -rm -f SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT)
    860869        -rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT)
    861870        -rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT)
     
    893902@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-FindFunction.Po@am__quote@
    894903@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-GenPoly.Po@am__quote@
     904@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po@am__quote@
    895905@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-Lvalue.Po@am__quote@
    896906@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/driver_cfa_cpp-PolyMutator.Po@am__quote@
     
    928938@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-Unify.Po@am__quote@
    929939@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-FixFunction.Po@am__quote@
     940@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po@am__quote@
    930941@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-ImplementationType.Po@am__quote@
    931942@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Po@am__quote@
     
    939950@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-AttrType.Po@am__quote@
    940951@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-BasicType.Po@am__quote@
     952@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po@am__quote@
    941953@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CommaExpr.Po@am__quote@
    942954@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-CompoundStmt.Po@am__quote@
     
    962974@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeSubstitution.Po@am__quote@
    963975@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-TypeofType.Po@am__quote@
    964 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po@am__quote@
    965976@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@
    966977@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@
     
    13521363@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-FindFunction.obj `if test -f 'GenPoly/FindFunction.cc'; then $(CYGPATH_W) 'GenPoly/FindFunction.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/FindFunction.cc'; fi`
    13531364
     1365GenPoly/driver_cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc
     1366@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
     1367@am__fastdepCXX_TRUE@   $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
     1368@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@
     1369@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1370@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc
     1371
     1372GenPoly/driver_cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc
     1373@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
     1374@am__fastdepCXX_TRUE@   $(am__mv) GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/driver_cfa_cpp-InstantiateGeneric.Po
     1375@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='GenPoly/InstantiateGeneric.cc' object='GenPoly/driver_cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@
     1376@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1377@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/driver_cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi`
     1378
    13541379GenPoly/driver_cfa_cpp-DeclMutator.o: GenPoly/DeclMutator.cc
    13551380@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-DeclMutator.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-DeclMutator.Tpo -c -o GenPoly/driver_cfa_cpp-DeclMutator.o `test -f 'GenPoly/DeclMutator.cc' || echo '$(srcdir)/'`GenPoly/DeclMutator.cc
     
    17861811@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ResolvExpr/driver_cfa_cpp-TypeEnvironment.obj `if test -f 'ResolvExpr/TypeEnvironment.cc'; then $(CYGPATH_W) 'ResolvExpr/TypeEnvironment.cc'; else $(CYGPATH_W) '$(srcdir)/ResolvExpr/TypeEnvironment.cc'; fi`
    17871812
     1813SymTab/driver_cfa_cpp-IdTable.o: SymTab/IdTable.cc
     1814@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc
     1815@am__fastdepCXX_TRUE@   $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po
     1816@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.o' libtool=no @AMDEPBACKSLASH@
     1817@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1818@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.o `test -f 'SymTab/IdTable.cc' || echo '$(srcdir)/'`SymTab/IdTable.cc
     1819
     1820SymTab/driver_cfa_cpp-IdTable.obj: SymTab/IdTable.cc
     1821@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-IdTable.obj -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`
     1822@am__fastdepCXX_TRUE@   $(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-IdTable.Po
     1823@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SymTab/IdTable.cc' object='SymTab/driver_cfa_cpp-IdTable.obj' libtool=no @AMDEPBACKSLASH@
     1824@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1825@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-IdTable.obj `if test -f 'SymTab/IdTable.cc'; then $(CYGPATH_W) 'SymTab/IdTable.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/IdTable.cc'; fi`
     1826
    17881827SymTab/driver_cfa_cpp-Indexer.o: SymTab/Indexer.cc
    17891828@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-Indexer.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Tpo -c -o SymTab/driver_cfa_cpp-Indexer.o `test -f 'SymTab/Indexer.cc' || echo '$(srcdir)/'`SymTab/Indexer.cc
     
    20102049@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-AttrType.obj `if test -f 'SynTree/AttrType.cc'; then $(CYGPATH_W) 'SynTree/AttrType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/AttrType.cc'; fi`
    20112050
    2012 SynTree/driver_cfa_cpp-VarArgsType.o: SynTree/VarArgsType.cc
    2013 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc
    2014 @am__fastdepCXX_TRUE@   $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po
    2015 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.o' libtool=no @AMDEPBACKSLASH@
    2016 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2017 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.o `test -f 'SynTree/VarArgsType.cc' || echo '$(srcdir)/'`SynTree/VarArgsType.cc
    2018 
    2019 SynTree/driver_cfa_cpp-VarArgsType.obj: SynTree/VarArgsType.cc
    2020 @am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-VarArgsType.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi`
    2021 @am__fastdepCXX_TRUE@   $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po
    2022 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SynTree/VarArgsType.cc' object='SynTree/driver_cfa_cpp-VarArgsType.obj' libtool=no @AMDEPBACKSLASH@
    2023 @AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    2024 @am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi`
    2025 
    20262051SynTree/driver_cfa_cpp-Constant.o: SynTree/Constant.cc
    20272052@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Constant.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Constant.Tpo -c -o SynTree/driver_cfa_cpp-Constant.o `test -f 'SynTree/Constant.cc' || echo '$(srcdir)/'`SynTree/Constant.cc
     
    23032328@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    23042329@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi`
     2330
     2331SynTree/driver_cfa_cpp-CodeGenVisitor.o: SynTree/CodeGenVisitor.cc
     2332@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc
     2333@am__fastdepCXX_TRUE@   $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po
     2334@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.o' libtool=no @AMDEPBACKSLASH@
     2335@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     2336@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.o `test -f 'SynTree/CodeGenVisitor.cc' || echo '$(srcdir)/'`SynTree/CodeGenVisitor.cc
     2337
     2338SynTree/driver_cfa_cpp-CodeGenVisitor.obj: SynTree/CodeGenVisitor.cc
     2339@am__fastdepCXX_TRUE@   $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-CodeGenVisitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`
     2340@am__fastdepCXX_TRUE@   $(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-CodeGenVisitor.Po
     2341@AMDEP_TRUE@@am__fastdepCXX_FALSE@      source='SynTree/CodeGenVisitor.cc' object='SynTree/driver_cfa_cpp-CodeGenVisitor.obj' libtool=no @AMDEPBACKSLASH@
     2342@AMDEP_TRUE@@am__fastdepCXX_FALSE@      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     2343@am__fastdepCXX_FALSE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-CodeGenVisitor.obj `if test -f 'SynTree/CodeGenVisitor.cc'; then $(CYGPATH_W) 'SynTree/CodeGenVisitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/CodeGenVisitor.cc'; fi`
    23052344
    23062345SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc
  • src/Parser/DeclarationNode.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:53:17 2016
    13 // Update Count     : 161
     12// Last Modified On : Tue Jul 14 14:46:32 2015
     13// Update Count     : 126
    1414//
    1515
     
    3434const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" };
    3535const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" };
    36 const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary", };
     36const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" };
    3737const char *DeclarationNode::modifierName[]  = { "signed", "unsigned", "short", "long" };
    3838const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" };
    3939const char *DeclarationNode::typeClassName[] = { "type", "dtype", "ftype" };
    40 const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
    4140
    4241UniqueName DeclarationNode::anonymous( "__anonymous" );
    4342
    44 extern LinkageSpec::Type linkage;                                               // defined in parser.yy
     43extern LinkageSpec::Type linkage;               /* defined in cfa.y */
    4544
    4645DeclarationNode *DeclarationNode::clone() const {
     
    5554        newnode->linkage = linkage;
    5655        return newnode;
    57 } // DeclarationNode::clone
     56}
    5857
    5958DeclarationNode::DeclarationNode() : type( 0 ), bitfieldWidth( 0 ), initializer( 0 ), hasEllipsis( false ), linkage( ::linkage ) {
     
    117116        newnode->type->function->newStyle = newStyle;
    118117        newnode->type->function->body = body;
    119         typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );
    120118
    121119        if ( body ) {
     
    130128
    131129        return newnode;
    132 } // DeclarationNode::newFunction
     130}
    133131
    134132DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) {
     
    137135        newnode->type->qualifiers.push_back( q );
    138136        return newnode;
    139 } // DeclarationNode::newQualifier
     137}
    140138
    141139DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
     
    143141        newnode->storageClasses.push_back( sc );
    144142        return newnode;
    145 } // DeclarationNode::newStorageClass
     143}
    146144
    147145DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) {
     
    150148        newnode->type->basic->typeSpec.push_back( bt );
    151149        return newnode;
    152 } // DeclarationNode::newBasicType
    153 
    154 DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
    155         DeclarationNode *newnode = new DeclarationNode;
    156         newnode->type = new TypeData( TypeData::Builtin );
    157         newnode->type->builtin->type = bt;
    158         return newnode;
    159 } // DeclarationNode::newBuiltinType
     150}
    160151
    161152DeclarationNode *DeclarationNode::newModifier( Modifier mod ) {
     
    164155        newnode->type->basic->modifiers.push_back( mod );
    165156        return newnode;
    166 } // DeclarationNode::newModifier
     157}
    167158
    168159DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) {
     
    171162        newnode->type->forall = forall;
    172163        return newnode;
    173 } // DeclarationNode::newForall
     164}
    174165
    175166DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) {
     
    180171        newnode->type->symbolic->params = 0;
    181172        return newnode;
    182 } // DeclarationNode::newFromTypedef
     173}
    183174
    184175DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields ) {
     
    188179        newnode->type->aggregate->name = assign_strptr( name );
    189180        if ( newnode->type->aggregate->name == "" ) {           // anonymous aggregate ?
    190                 newnode->type->aggregate->name = anonymous.newName();
     181                newnode->type->aggregate->name = DeclarationNode::anonymous.newName();
     182        } else {
     183                // SKULLDUGGERY: generate a typedef for the aggregate name so that the aggregate does not have to be qualified
     184                // by "struct"
     185                typedefTable.addToEnclosingScope( newnode->type->aggregate->name, TypedefTable::TD );
     186                DeclarationNode *typedf = new DeclarationNode;
     187                typedf->name = newnode->type->aggregate->name;
     188                newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() );
    191189        } // if
    192190        newnode->type->aggregate->actuals = actuals;
    193191        newnode->type->aggregate->fields = fields;
    194192        return newnode;
    195 } // DeclarationNode::newAggregate
     193}
    196194
    197195DeclarationNode *DeclarationNode::newEnum( std::string *name, DeclarationNode *constants ) {
     
    202200        if ( newnode->type->enumeration->name == "" ) {         // anonymous enumeration ?
    203201                newnode->type->enumeration->name = DeclarationNode::anonymous.newName();
     202        } else {
     203                // SKULLDUGGERY: generate a typedef for the enumeration name so that the enumeration does not have to be
     204                // qualified by "enum"
     205                typedefTable.addToEnclosingScope( newnode->type->enumeration->name, TypedefTable::TD );
     206                DeclarationNode *typedf = new DeclarationNode;
     207                typedf->name = newnode->type->enumeration->name;
     208                newnode->appendList( typedf->addType( newnode->clone() )->addTypedef() );
    204209        } // if
    205210        newnode->type->enumeration->constants = constants;
    206211        return newnode;
    207 } // DeclarationNode::newEnum
     212}
    208213
    209214DeclarationNode *DeclarationNode::newEnumConstant( std::string *name, ExpressionNode *constant ) {
    210215        DeclarationNode *newnode = new DeclarationNode;
    211216        newnode->name = assign_strptr( name );
    212         newnode->enumeratorValue = constant;
    213         typedefTable.addToEnclosingScope( newnode->name, TypedefTable::ID );
    214         return newnode;
    215 } // DeclarationNode::newEnumConstant
     217        // do something with the constant
     218        return newnode;
     219}
    216220
    217221DeclarationNode *DeclarationNode::newName( std::string *name ) {
     
    219223        newnode->name = assign_strptr( name );
    220224        return newnode;
    221 } // DeclarationNode::newName
     225}
    222226
    223227DeclarationNode *DeclarationNode::newFromTypeGen( std::string *name, ExpressionNode *params ) {
     
    228232        newnode->type->symbolic->actuals = params;
    229233        return newnode;
    230 } // DeclarationNode::newFromTypeGen
     234}
    231235
    232236DeclarationNode *DeclarationNode::newTypeParam( TypeClass tc, std::string *name ) {
     
    237241        newnode->type->variable->name = newnode->name;
    238242        return newnode;
    239 } // DeclarationNode::newTypeParam
    240 
    241 DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
     243}
     244
     245DeclarationNode *DeclarationNode::newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
    242246        DeclarationNode *newnode = new DeclarationNode;
    243247        newnode->type = new TypeData( TypeData::Aggregate );
    244         newnode->type->aggregate->kind = Trait;
     248        newnode->type->aggregate->kind = Context;
    245249        newnode->type->aggregate->params = params;
    246250        newnode->type->aggregate->fields = asserts;
    247251        newnode->type->aggregate->name = assign_strptr( name );
    248252        return newnode;
    249 } // DeclarationNode::newTrait
    250 
    251 DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) {
     253}
     254
     255DeclarationNode *DeclarationNode::newContextUse( std::string *name, ExpressionNode *params ) {
    252256        DeclarationNode *newnode = new DeclarationNode;
    253257        newnode->type = new TypeData( TypeData::AggregateInst );
    254258        newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate );
    255         newnode->type->aggInst->aggregate->aggregate->kind = Trait;
     259        newnode->type->aggInst->aggregate->aggregate->kind = Context;
    256260        newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name );
    257261        newnode->type->aggInst->params = params;
    258262        return newnode;
    259 } // DeclarationNode::newTraitUse
     263}
    260264
    261265DeclarationNode *DeclarationNode::newTypeDecl( std::string *name, DeclarationNode *typeParams ) {
     
    267271        newnode->type->symbolic->name = newnode->name;
    268272        return newnode;
    269 } // DeclarationNode::newTypeDecl
     273}
    270274
    271275DeclarationNode *DeclarationNode::newPointer( DeclarationNode *qualifiers ) {
     
    273277        newnode->type = new TypeData( TypeData::Pointer );
    274278        return newnode->addQualifiers( qualifiers );
    275 } // DeclarationNode::newPointer
     279}
    276280
    277281DeclarationNode *DeclarationNode::newArray( ExpressionNode *size, DeclarationNode *qualifiers, bool isStatic ) {
     
    286290        } // if
    287291        return newnode->addQualifiers( qualifiers );
    288 } // DeclarationNode::newArray
     292}
    289293
    290294DeclarationNode *DeclarationNode::newVarArray( DeclarationNode *qualifiers ) {
     
    790794                        errors.append( e );
    791795                } // try
    792                 cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
     796                cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
    793797        } // while
    794798        if ( ! errors.isEmpty() ) {
     
    877881                          ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name );
    878882                          break;
    879                         case DeclarationNode::Trait:
    880                           ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );
     883                        case DeclarationNode::Context:
     884                          ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name );
    881885                          break;
    882886                        default:
  • src/Parser/ExpressionNode.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  8 15:43:05 2016
    13 // Update Count     : 296
     12// Last Modified On : Mon Feb  1 13:32:30 2016
     13// Update Count     : 271
    1414//
    1515
     
    2222
    2323#include "ParseNode.h"
    24 #include "TypeData.h"
    2524#include "SynTree/Constant.h"
    2625#include "SynTree/Expression.h"
    27 #include "SynTree/Declaration.h"
    2826#include "Common/UnimplementedError.h"
    2927#include "parseutility.h"
     
    489487                args.front() = new AddressExpr( args.front() );
    490488                break;
    491           default:              // do nothing
     489          default:
     490                /* do nothing */
    492491                ;
    493         } // switch
     492        }
    494493
    495494        switch ( op->get_type() ) {
     
    874873}
    875874
    876 
    877 CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
    878 CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
    879 
    880 CompoundLiteralNode::~CompoundLiteralNode() {
    881         delete kids;
    882         delete type;
    883 }
    884 
    885 CompoundLiteralNode *CompoundLiteralNode::clone() const {
    886         return new CompoundLiteralNode( *this );
    887 }
    888 
    889 void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
    890         os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
    891 
    892         os << string( indent + 2, ' ' ) << "type:" << endl;
    893         if ( type != 0 )
    894                 type->print( os, indent + 4 );
    895 
    896         os << string( indent + 2, ' ' ) << "initialization:" << endl;
    897         if ( kids != 0 )
    898                 kids->printList( os, indent + 4 );
    899 }
    900 
    901 void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
    902         os << "( ";
    903         if ( type ) type->print( os );
    904         os << ", ";
    905         if ( kids ) kids->printOneLine( os );
    906         os << ") ";
    907 }
    908 
    909 Expression *CompoundLiteralNode::build() const {
    910         Declaration * newDecl = type->build();                          // compound literal type
    911         if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
    912                 return new CompoundLiteralExpr( newDeclWithType->get_type(), kids->build() );
    913         // these types do not have associated type information
    914         } else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
    915                 return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), kids->build() );
    916         } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
    917                 return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), kids->build() );
    918         } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
    919                 return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), kids->build() );
    920         } else {
    921                 assert( false );
    922         } // if
    923 }
    924 
    925 
    926875ExpressionNode *flattenCommas( ExpressionNode *list ) {
    927876        if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
  • src/Parser/ParseNode.h

    r0f9e4403 rc5833e8  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // ParseNode.h --
     7// ParseNode.h -- 
    88//
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Sat May 16 13:28:16 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Mon Apr 11 11:50:52 2016
    13 // Update Count     : 205
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon Feb  1 13:32:32 2016
     13// Update Count     : 184
    1414//
    1515
     
    108108
    109109        ConstantNode( Type, std::string * );
    110         ConstantNode( const ConstantNode &other ) : type( other.type ), btype( other.btype), value( *new std::string( other.value ) ) {};
     110        ConstantNode( const ConstantNode &other ) : value( *new std::string( other.value ) ) {};
    111111        ~ConstantNode() { delete &value; }
    112112
     
    177177        enum Type { TupleC, Comma, TupleFieldSel, // n-adic
    178178                                // triadic
    179                                 Cond, NCond,
     179                                Cond, NCond, 
    180180                                // diadic
    181                                 SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And,
    182                                 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
     181                                SizeOf, AlignOf, OffsetOf, Attr, CompLit, Plus, Minus, Mul, Div, Mod, Or, And, 
     182                                BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 
    183183                                Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
    184184                                Index, FieldSel, PFieldSel, Range,
     
    309309        ValofExprNode( const ValofExprNode &other );
    310310        ~ValofExprNode();
    311 
     311 
    312312        virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
    313313
     
    329329        enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
    330330        enum Modifier  { Signed, Unsigned, Short, Long };
    331         enum Aggregate { Struct, Union, Trait };
     331        enum Aggregate { Struct, Union, Context };
    332332        enum TypeClass { Type, Dtype, Ftype };
    333         enum BuiltinType { Valist };
    334 
    335         static const char *storageName[];
     333
     334        static const char *storageName[]; 
    336335        static const char *qualifierName[];
    337336        static const char *basicTypeName[];
     
    339338        static const char *aggregateName[];
    340339        static const char *typeClassName[];
    341         static const char *builtinTypeName[];
    342340
    343341        static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
     
    354352        static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params );
    355353        static DeclarationNode *newTypeParam( TypeClass, std::string *);
    356         static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
    357         static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params );
     354        static DeclarationNode *newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
     355        static DeclarationNode *newContextUse( std::string *name, ExpressionNode *params );
    358356        static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams );
    359357        static DeclarationNode *newPointer( DeclarationNode *qualifiers );
     
    365363        static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
    366364        static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
    367         static DeclarationNode *newBuiltinType( BuiltinType );
    368365
    369366        DeclarationNode *addQualifiers( DeclarationNode *);
     
    404401        LinkageSpec::Type get_linkage() const { return linkage; }
    405402        DeclarationNode *extractAggregate() const;
    406         ExpressionNode *get_enumeratorValue() const { return enumeratorValue; }
    407403
    408404        DeclarationNode();
     
    417413        std::list< std::string > attributes;
    418414        ExpressionNode *bitfieldWidth;
    419         ExpressionNode *enumeratorValue;
    420415        InitializerNode *initializer;
    421416        bool hasEllipsis;
     
    427422class StatementNode : public ParseNode {
    428423  public:
    429         enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru,
     424        enum Type { Exp,   If,        Switch,  Case,    Default,  Choose,   Fallthru, 
    430425                                While, Do,        For,
    431426                                Goto,  Continue,  Break,   Return,  Throw,
     
    535530        bool aggregate;
    536531        ExpressionNode *designator; // may be list
    537         InitializerNode *kids;
    538 };
    539 
    540 class CompoundLiteralNode : public ExpressionNode {
    541   public:
    542         CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
    543         CompoundLiteralNode( const CompoundLiteralNode &type );
    544         ~CompoundLiteralNode();
    545 
    546         virtual CompoundLiteralNode *clone() const;
    547 
    548         DeclarationNode *get_type() const { return type; }
    549         CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
    550 
    551         InitializerNode *get_initializer() const { return kids; }
    552         CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
    553 
    554         void print( std::ostream &, int indent = 0 ) const;
    555         void printOneLine( std::ostream &, int indent = 0 ) const;
    556 
    557         virtual Expression *build() const;
    558   private:
    559         DeclarationNode *type;
    560532        InitializerNode *kids;
    561533};
  • src/Parser/Parser.cc

    r0f9e4403 rc5833e8  
    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/TypeData.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:26:45 2016
    13 // Update Count     : 49
     12// Last Modified On : Tue Jul 14 14:57:23 2015
     13// Update Count     : 32
    1414//
    1515
     
    2323#include "SynTree/Expression.h"
    2424#include "SynTree/Statement.h"
    25 #include "SynTree/Initializer.h"
    2625
    2726TypeData::TypeData( Kind k ) : kind( k ), base( 0 ), forall( 0 ) {
     
    8584                typeexpr->expr = 0;
    8685                break;
    87           case Builtin:
    88                 builtin = new Builtin_t;
    89                 break;
    9086          case Attr:
    9187                attr = new Attr_t;
     
    153149                delete typeexpr->expr;
    154150                delete typeexpr;
    155                 break;
    156           case Builtin:
    157                 delete builtin;
    158151                break;
    159152          case Attr:
     
    228221                newtype->typeexpr->expr = maybeClone( typeexpr->expr );
    229222                break;
    230           case Builtin:
    231                 newtype->builtin->type = builtin->type;
    232                 break;
    233223          case Attr:
    234224                newtype->attr->expr = maybeClone( attr->expr );
     
    406396                        attr->type->print( os, indent + 2 );
    407397                } // if
    408                 break;
    409           case Builtin:
    410                 os << "gcc builtin type";
    411398                break;
    412399          default:
     
    519506          case Typeof:
    520507                return buildTypeof();
    521           case Builtin:
    522                 return new VarArgsType( buildQualifiers() );
    523508          case Attr:
    524509                return buildAttr();
     
    820805                buildForall( aggregate->params, at->get_parameters() );
    821806                break;
    822           case DeclarationNode::Trait:
    823                 at = new TraitDecl( aggregate->name );
     807          case DeclarationNode::Context:
     808                at = new ContextDecl( aggregate->name );
    824809                buildList( aggregate->params, at->get_parameters() );
    825810                break;
     
    860845                        ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    861846                        break;
    862                   case DeclarationNode::Trait:
    863                         ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
     847                  case DeclarationNode::Context:
     848                        ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
    864849                        break;
    865850                  default:
     
    898883        EnumDecl *ret = new EnumDecl( enumeration->name );
    899884        buildList( enumeration->constants, ret->get_members() );
    900         std::list< Declaration * >::iterator members = ret->get_members().begin();
    901         for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
    902                 if ( cur->get_enumeratorValue() != NULL ) {
    903                         ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
    904                         member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ) ) );
    905                 } // if
    906         } // for
    907885        return ret;
    908886}
  • src/Parser/TypeData.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Feb 26 14:21:38 2016
    13 // Update Count     : 19
     12// Last Modified On : Thu Jan 14 23:31:15 2016
     13// Update Count     : 17
    1414//
    1515
     
    2424struct TypeData {
    2525        enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst,
    26                                 Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind;
     26                                Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Attr } kind;
    2727
    2828        TypeData( Kind k = Unknown );
     
    9898        };
    9999
    100         struct Builtin_t {
    101                 DeclarationNode::BuiltinType type;
    102         };
    103 
    104100        struct Attr_t {
    105101                std::string name;
     
    120116                Typeof_t * typeexpr;
    121117                Attr_t * attr;
    122                 Builtin_t * builtin;
    123118        };
    124119
  • src/Parser/TypedefTable.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat May 16 15:20:13 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:57:30 2016
    13 // Update Count     : 24
     12// Last Modified On : Fri Jun 26 07:30:16 2015
     13// Update Count     : 19
    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;
    33 }
    34 
    35 int TypedefTable::isKind( const string &identifier ) const {
    36         tableType::const_iterator id_pos = table.find( identifier );
    37         // Name lookup defaults to identifier, and then the identifier's kind is set by the parser.
    38         if ( id_pos == table.end() ) return IDENTIFIER;
    39         return id_pos->second.begin()->kind;
    40 }
    41 
    4231void TypedefTable::changeKind( const string &identifier, kind_t kind ) {
    4332        tableType::iterator id_pos = table.find( identifier );
    44         if ( id_pos == table.end() ) return;
    45         id_pos->second.begin()->kind = kind;
    46 }
    47 
    48 // SKULLDUGGERY: Generate a typedef for the aggregate name so the aggregate does not have to be qualified by
    49 // "struct". Only generate the typedef, if the name is not in use. The typedef is implicitly (silently) removed
    50 // if the name is explicitly used.
    51 void TypedefTable::makeTypedef( const string &name ) {
    52         if ( ! typedefTable.exists( name ) ) {
    53                 typedefTable.addToEnclosingScope( name, TypedefTable::TD );
     33        if ( id_pos == table.end() ) {
     34                return;
     35        } else {
     36                (*((*id_pos ).second.begin())).kind = kind;
     37                return;
    5438        } // if
    5539}
    5640
     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
     48}
     49
     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 );
     60}
     61
    5762void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) {
    58         if ( currentTrait != "" && scope == contextScope ) {
     63        if ( currentContext != "" && scope == contextScope ) {
    5964                DeferredEntry entry = { identifier, kind };
    60                 contexts[currentTrait].push_back( entry );
     65                contexts[currentContext].push_back( entry );
    6166        } else {
    6267                debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl );
     
    107112}
    108113
    109 void TypedefTable::openTrait( const std::string &contextName ) {
     114void TypedefTable::openContext( const std::string &contextName ) {
    110115        map< string, deferListType >::iterator i = contexts.find( contextName );
    111116        if ( i != contexts.end() ) {
     
    145150}
    146151
    147 void TypedefTable::enterTrait( const std::string &contextName ) {
    148         currentTrait = contextName;
     152void TypedefTable::enterContext( const std::string &contextName ) {
     153        currentContext = contextName;
    149154        contextScope = currentScope;
    150155}
    151156
    152 void TypedefTable::leaveTrait() {
    153         currentTrait = "";
     157void TypedefTable::leaveContext() {
     158        currentContext = "";
    154159}
    155160
  • src/Parser/TypedefTable.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat May 16 15:24:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:59:56 2016
    13 // Update Count     : 27
     12// Last Modified On : Thu Jun 25 22:52:15 2015
     13// Update Count     : 11
    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 {
     
    4340
    4441        int currentScope;
    45         std::string currentTrait;
     42        std::string currentContext;
    4643        int contextScope;
    4744       
     
    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 );
    61 
    62         void makeTypedef( const std::string &name );
    63 
     61       
    6462        // "addToCurrentScope" adds the identifier/type pair to the current scope. This does less than you think it does,
    6563        // since each declaration is within its own scope.  Mostly useful for type parameters.
     
    8179       
    8280        // dump the definitions from a pre-defined context into the current scope
    83         void openTrait( const std::string &contextName );
     81        void openContext( const std::string &contextName );
    8482       
    8583        void enterScope();
    8684        void leaveScope();
    87         void enterTrait( const std::string &contextName );
    88         void leaveTrait();
     85        void enterContext( const std::string &contextName );
     86        void leaveContext();
    8987
    9088        void print() const;
  • src/Parser/lex.cc

    r0f9e4403 rc5833e8  
    382382        (yy_c_buf_p) = yy_cp;
    383383
    384 #define YY_NUM_RULES 180
    385 #define YY_END_OF_BUFFER 181
     384#define YY_NUM_RULES 179
     385#define YY_END_OF_BUFFER 180
    386386/* This struct is not used in this scanner,
    387387   but its presence is necessary. */
     
    391391        flex_int32_t yy_nxt;
    392392        };
    393 static yyconst flex_int16_t yy_accept[888] =
     393static yyconst flex_int16_t yy_accept[876] =
    394394    {   0,
    395         0,    0,    0,    0,    0,    0,  115,  115,  118,  118,
    396       181,  179,    7,    9,    8,  138,  117,  102,  143,  146,
    397       114,  125,  126,  141,  139,  129,  140,  132,  142,  107,
    398       108,  109,  130,  131,  148,  150,  149,  151,  179,  102,
    399       123,  179,  124,  144,  102,  104,  102,  102,  102,  102,
    400       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    401       102,  102,  127,  147,  128,  145,    7,  179,    4,    4,
    402       180,  105,  180,  106,  115,  116,  122,  118,  119,    7,
    403         9,    0,    8,  155,  174,  102,    0,  167,  137,  160,
    404       168,  165,  152,  163,  153,  164,  162,    0,  112,    3,
    405 
    406         0,  166,  112,  110,    0,    0,  110,  110,    0,    0,
    407       110,  109,  109,  109,    0,  109,  135,  136,  134,  156,
    408       158,  154,  159,  157,    0,    0,    0,    0,    0,    0,
    409         0,    0,    0,    0,    0,    0,    0,    0,    0,  103,
    410       173,    0,  117,  114,  102,    0,    0,  170,    0,  102,
    411       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    412       102,  102,  102,  102,  102,  102,   38,  102,  102,  102,
    413       102,  102,  102,  102,  102,  102,  102,   56,  102,  102,
    414       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    415       102,  102,  102,  102,  169,  161,    7,    0,    0,    0,
    416 
    417         2,    0,    5,  105,    0,    0,    0,  115,    0,  121,
    418       120,  120,    0,    0,    0,  118,    0,    0,    0,    0,
     395        0,    0,    0,    0,    0,    0,  114,  114,  117,  117,
     396      180,  178,    7,    9,    8,  137,  116,  101,  142,  145,
     397      113,  124,  125,  140,  138,  128,  139,  131,  141,  106,
     398      107,  108,  129,  130,  147,  149,  148,  150,  178,  101,
     399      122,  178,  123,  143,  101,  103,  101,  101,  101,  101,
     400      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     401      101,  126,  146,  127,  144,    7,  178,    4,    4,  179,
     402      104,  179,  105,  114,  115,  121,  117,  118,    7,    9,
     403        0,    8,  154,  173,  101,    0,  166,  136,  159,  167,
     404      164,  151,  162,  152,  163,  161,    0,  111,    3,    0,
     405
     406      165,  111,  109,    0,    0,  109,  109,    0,    0,  109,
     407      108,  108,  108,    0,  108,  134,  135,  133,  155,  157,
     408      153,  158,  156,    0,    0,    0,    0,    0,    0,    0,
     409        0,    0,    0,    0,    0,    0,    0,    0,  102,  172,
     410        0,  116,  113,  101,    0,    0,  169,    0,  101,  101,
     411      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     412      101,  101,  101,  101,  101,   39,  101,  101,  101,  101,
     413      101,  101,  101,  101,  101,  101,   57,  101,  101,  101,
     414      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     415      101,  101,  168,  160,    7,    0,    0,    0,    2,    0,
     416
     417        5,  104,    0,    0,    0,  114,    0,  120,  119,  119,
     418        0,    0,    0,  117,    0,    0,    0,    0,    0,    0,
     419        0,    0,    0,    0,    0,    0,    0,    0,    0,  132,
     420      111,  111,    0,  111,  111,  111,    0,    6,  111,  109,
     421        0,    0,    0,  111,    0,  109,  109,  109,  109,    0,
     422      110,    0,    0,  108,  108,  108,  108,    0,  170,  171,
     423        0,  176,  174,    0,    0,    0,  102,    0,    0,    0,
     424        0,    0,    0,    0,    0,  101,   17,  101,  101,  101,
     425      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     426      101,  101,  101,  101,  101,   14,  101,  101,  101,  101,
     427
     428      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     429      101,  101,  101,  101,   51,  101,  101,  101,   64,  101,
     430      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     431      101,   88,  101,  101,  101,  101,  101,  101,  101,    0,
     432        0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
     433        0,    0,    0,  119,    0,    0,  177,    0,    0,    0,
     434        0,    0,    0,    0,  111,    0,  111,    0,  111,    0,
     435        0,  111,  111,  109,  109,    0,    0,  110,  110,    0,
     436      110,    0,  110,  108,  108,    0,    0,    0,    0,    0,
     437        0,    0,    0,    0,    0,  175,  101,  101,  101,  101,
     438
     439      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     440      101,  101,  101,  101,  101,  101,  101,  101,  101,   21,
     441      101,   24,  101,   27,  101,  101,  101,  101,  101,  101,
     442      101,   42,  101,   44,  101,  101,  101,  101,  101,  101,
     443      101,   56,  101,   67,  101,  101,  101,  101,  101,  101,
     444      101,  101,  101,  101,  101,   89,  101,  101,   96,  101,
     445      101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     446        0,    0,    0,    0,    0,  119,    0,    0,    0,    0,
     447        0,  111,  111,    0,    0,    0,    0,    0,  110,  110,
     448        0,  112,    0,  110,  110,    0,    0,    0,    0,    0,
     449
     450        0,    0,    0,    0,    0,    0,    0,    0,  101,  101,
     451       22,  101,  101,  101,  101,  101,  101,  101,   15,  101,
     452      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     453      101,  101,  101,   23,   25,  101,   32,  101,  101,  101,
     454      101,  101,   41,  101,  101,  101,  101,   49,  101,  101,
     455       54,  101,  101,  101,  101,  101,   76,  101,  101,  101,
     456      101,  101,   86,  101,  101,   94,  101,  101,  100,    0,
    419457        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    420         0,  133,  112,  112,    0,  112,  112,    0,    0,    6,
    421         0,  110,    0,    0,    0,  112,    0,  110,  110,  110,
    422       110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
    423       171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
    424         0,    0,    0,    0,    0,    0,    0,  102,   17,  102,
    425       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    426       102,  102,  102,  102,  102,  102,  102,   14,  102,  102,
    427 
    428       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    429       102,  102,  102,  102,  102,  102,   50,  102,  102,  102,
    430        63,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    431       102,  102,  102,  102,  102,   89,  102,  102,  102,  102,
    432       102,  102,  102,    0,    0,    0,    0,    0,    0,    0,
    433         0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
    434       178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
    435       112,    0,  112,    0,    0,  112,    0,  110,  110,    0,
    436         0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
    437         0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
    438 
    439       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    440       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    441       102,  102,  102,   21,  102,   24,  102,   27,  102,  102,
    442       102,  102,  102,  102,  102,   41,  102,   43,  102,  102,
    443       102,  102,  102,  102,  102,   55,  102,   66,  102,  102,
    444       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    445       102,  102,  102,  102,   97,  102,  102,    0,    0,    0,
    446         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    447         0,  120,    0,    0,    0,    0,    0,  112,    0,    0,
    448         0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
    449 
    450       111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    451         0,    0,    0,    0,  102,  102,   22,  102,  102,  102,
    452       102,  102,  102,  102,   15,  102,  102,  102,  102,  102,
    453       102,  102,  102,  102,  102,  102,  102,  102,  102,   23,
    454        25,  102,   32,  102,  102,  102,  102,   40,  102,  102,
    455       102,  102,   48,  102,  102,   53,  102,  102,   70,  102,
    456       102,  102,   76,  102,  102,  102,  102,  102,   86,   88,
    457       102,  102,   94,  102,  102,  101,    0,    0,    0,    0,
    458         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    459         0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
    460 
    461       113,  113,  113,    0,  111,    0,    0,    0,    0,    0,
    462         0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
    463       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
    464       102,  102,  102,   58,  102,  102,  102,  102,  102,  102,
    465       102,  102,   28,  102,  102,  102,   39,   42,   45,  102,
    466       102,   51,  102,   60,   67,  102,  102,   75,   77,   80,
    467        81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
    468         0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
    469       120,    0,    0,    0,    0,  113,    0,  113,  113,    0,
    470         0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
    471 
    472        18,  102,  102,  102,  102,  102,  102,  102,   16,  102,
    473       102,  102,   33,  102,  102,  102,  102,  102,  102,  102,
    474       102,  102,  102,  102,  102,   36,   37,  102,   47,   52,
    475       102,  102,  102,   90,  102,  102,    0,    0,    0,    0,
    476         0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
    477        11,   29,   54,  102,  102,  102,  102,  102,  102,  102,
    478       102,  102,  102,  102,   59,   61,   64,  102,  102,   78,
    479        92,  102,  102,   35,   46,   71,   72,  102,   95,   98,
    480         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    481         0,    0,  102,   68,  102,  102,   12,  102,  102,   30,
    482 
    483        34,  102,  102,  102,   65,  102,  102,  102,  102,  102,
    484       102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    485         0,    0,    0,    0,   57,  102,  102,  102,  102,  102,
    486       102,  102,   49,   62,   73,   79,   93,   99,  102,  102,
    487         0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
    488        13,   19,  102,  102,   31,  102,  102,  102,   26,   87,
    489         0,    0,  102,  102,  102,  102,  102,  102,   74,  100,
    490       102,   85,   20,  102,  102,   44,   82,  102,  102,  102,
    491       102,  102,  102,  102,   96,   69,    0
     458        0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
     459        0,  110,  112,  112,  112,  112,  112,  110,    0,    0,
     460
     461        0,    0,    0,    0,    0,    0,    0,    0,  101,    0,
     462      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
     463      101,  101,  101,  101,  101,  101,   59,  101,  101,  101,
     464      101,  101,  101,  101,  101,   28,  101,  101,  101,  101,
     465       40,   43,   46,  101,  101,   52,  101,   61,   68,  101,
     466      101,   75,   77,   80,   81,   83,   84,  101,  101,   91,
     467      101,  101,    0,    1,    0,    0,    0,    0,    0,    0,
     468      104,    0,    0,    0,  119,    0,    0,    0,    0,  112,
     469      112,  112,  112,    0,    0,    0,    0,    0,    0,    0,
     470        0,    0,  101,  101,   18,  101,  101,  101,  101,  101,
     471
     472      101,  101,   16,  101,  101,  101,   33,  101,  101,  101,
     473      101,  101,  101,  101,  101,  101,  101,  101,   35,  101,
     474       37,   38,  101,   48,   53,  101,  101,  101,   90,  101,
     475      101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     476        0,    0,    0,    0,   10,   11,   29,   55,  101,  101,
     477      101,  101,  101,  101,  101,  101,  101,  101,  101,   60,
     478       62,   65,  101,  101,   78,   92,  101,  101,   36,   47,
     479       71,   72,  101,   95,   97,    0,    0,    0,    0,    0,
     480        0,    0,    0,    0,    0,    0,    0,  101,   69,  101,
     481      101,   12,  101,  101,   30,   34,  101,  101,  101,   66,
     482
     483      101,  101,  101,  101,  101,  101,    0,    0,    0,    0,
     484        0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
     485      101,  101,  101,  101,  101,  101,  101,   50,   63,   73,
     486       79,   93,   98,  101,  101,    0,    0,    0,    0,    0,
     487        0,    0,    0,  101,  101,   13,   19,  101,   31,  101,
     488      101,  101,   26,   87,    0,    0,  101,  101,  101,  101,
     489      101,   74,   99,  101,   85,   20,  101,   45,   82,  101,
     490      101,  101,  101,   70,    0
    492491    } ;
    493492
     
    500499       16,   17,   18,   19,   20,   21,   22,   23,   24,   25,
    501500       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,
     501       32,   33,   34,   35,   36,   37,   38,   39,   40,   39,
     502       41,   11,   42,   11,   11,   43,   11,   44,   11,   45,
     503       11,   46,   47,   48,   49,   11,   11,   50,   11,   11,
     504       51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
     505
     506       61,   62,   63,   64,   65,   11,   66,   67,   68,   69,
     507       70,   71,   11,   72,   73,   74,   75,   76,   77,   78,
     508       79,   80,   81,   82,   83,   84,    1,    1,    1,    1,
    510509        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    511510        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    524523    } ;
    525524
    526 static yyconst flex_int32_t yy_meta[86] =
     525static yyconst flex_int32_t yy_meta[85] =
    527526    {   0,
    528527        1,    1,    2,    1,    1,    1,    1,    1,    3,    1,
     
    530529        6,    1,    7,    7,    7,    7,    7,    7,    1,    1,
    531530        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
     531        4,    4,   10,    4,   11,    4,    4,    4,   10,    4,
     532        1,   12,    1,    1,   13,    1,    9,    9,    9,    9,
     533        9,    9,    4,    4,    4,    4,   10,    4,    4,    4,
     534       11,    4,    4,    4,   10,    4,    4,    4,    4,    4,
     535        1,    1,    1,    1
    537536    } ;
    538537
    539 static yyconst flex_int16_t yy_base[1062] =
     538static yyconst flex_int16_t yy_base[1050] =
    540539    {   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
     540        0,   83, 2238, 2237,   93,    0,  175,  176,  177,  178,
     541     2252, 2782,  189, 2782,  195,   54, 2782, 2197,   59,  171,
     542     2782, 2782, 2782,   55,  186, 2782,  189,  187,  202,  214,
     543      272,    0, 2213, 2782,  214, 2213,  150,  340,  153,  222,
     544     2782,  157, 2782,  215,  224, 2782,  207,  181,  221,  249,
     545      235,  289,  155,  255,  218,  206,  266,  256,  323,  259,
     546      192, 2782,  223, 2782, 2210,  377,  342, 2782, 2220, 2782,
     547     2187,  234, 2782,    0, 2782,  421,    0, 2782,  393, 2782,
     548      399,  405, 2782,  492, 2184,  241, 2782, 2782, 2782, 2782,
     549     2782, 2201, 2782, 2200, 2782, 2782, 2211,  552, 2782, 2226,
     550
     551     2782,  413,  393,  437,  493,  377,  318,  195,  430,  382,
     552        0,  384,  321,  196,  427, 2782, 2782, 2782, 2194, 2782,
     553     2782, 2782, 2193, 2192,  252,  302, 2206,  342,  435,  422,
     554      381,  455,  400,  494, 2185,  440, 2133,  469, 2163, 2782,
     555      276, 2782, 2782,  520, 2159, 2157, 2782, 2128,  414,  463,
     556      470,  325,  254,  479,  432,  274,  480,  423,  483,  498,
     557      492,  503,  499,  509,  341,  455,  484,  377,  510,  512,
     558      517,  518,  529,  530,  531,  537, 2154,  541,  536,  544,
     559      557,  546,  566,  569,  538,  552,  548,  554,  588,  571,
     560      570,  580, 2782, 2782,  645,  651, 2202,  657, 2782,  663,
     561
     562     2782, 2152,  593, 2147, 2144,    0,  631, 2782, 2782,  669,
     563     2141, 2140, 2139,    0, 2160,  629,  635,  639,  678,  677,
     564      666,  670,  671,  674, 2138,  681,  682, 2115, 2114, 2782,
     565        0,  597,  702,  678,  676, 2111, 2160, 2782,  693,    0,
     566      710,  723,  743,  762,  788,  707, 2782, 2119, 2094,    0,
     567      776, 2138,  768,  723, 2782, 2113, 2086,  809, 2782, 2782,
     568     2118, 2782, 2782,  705,  710, 2098, 2097,  724, 2091, 2088,
     569     2087,    0, 2086,    0, 2056,  709,  682,  707,  712,  710,
     570      724,  647,  750,  671,  786,  751,  748,  731,  778,  787,
     571      789,  788,  792,  790,  758, 2084,  796,  806,  800,  813,
     572
     573      798,  810,  802,  816,  822,  819,  815,  826,  830,  829,
     574      831,  832,  833,  837,  839,  841,  846,  843, 2081,  848,
     575      850,  849,  851,  852,  854,  853,  857,  855,  858,  863,
     576      868, 2080,  867,  912,  871,  878,  872,  879,  882,  937,
     577      939, 2076, 2074, 2071,    0, 2070,    0,  927,  931, 2069,
     578        0, 2067,    0, 2064,    0, 2084, 2782,  913,  926, 2064,
     579     2060,    0, 2057,    0, 2782,  942,  960,  953, 2782,  966,
     580      981, 1005, 2053, 2782, 2782,  955,  968,  995,  968, 1028,
     581      892, 1014,  970, 2782, 2782, 2049, 2047, 2045,    0, 2042,
     582        0, 2040,    0, 2038,    0, 2782,  909,  944,  982,  943,
     583
     584     1006,  911, 1012,  923, 1013, 1019, 1009, 1016, 1023, 1024,
     585     1020,  972, 1030, 1028,  989, 1026, 1034, 1027, 1039, 2038,
     586     1044, 2035, 1048, 2034, 1049, 1051, 1052, 1053, 1056, 1057,
     587     1055, 2033, 1059, 2031,  946, 1063, 1066, 1067, 1068, 1071,
     588     1069, 2028, 1075, 2025, 1077, 1080, 1079, 1082, 1084, 1086,
     589     1087, 1090, 1097, 1107, 1088, 1108, 1093, 1098, 2024, 1096,
     590     1111, 1164, 2020,    0, 2018,    0, 2015,    0, 2012,    0,
     591     1151, 2011,    0, 2010,    0, 2008, 2005, 2002,    0, 2001,
     592        0, 1156, 2000, 1162, 1148, 1182, 1149, 1126, 1147, 2782,
     593     1201, 1215, 1241, 2010, 1983, 1992, 1991,    0, 1990,    0,
     594
     595     1988,    0, 1985,    0, 1982,    0, 1981,    0, 1161, 1149,
     596     1983, 1179, 1140, 1180, 1117, 1182, 1192, 1199, 1181, 1163,
     597     1196, 1200, 1201, 1220, 1198, 1221, 1224,  604, 1226, 1227,
     598     1231, 1233, 1234, 1981, 1244, 1236, 1978, 1240, 1241, 1246,
     599     1247, 1243, 1975, 1250, 1251, 1253, 1254, 1974, 1255, 1267,
     600     1973, 1264, 1271, 1256, 1263, 1257, 1971, 1275, 1277, 1279,
     601     1260, 1281, 1290, 1285, 1288, 1968, 1289, 1291, 1967, 2015,
     602     1961,    0, 1958,    0, 1957,    0, 1956,    0, 1954,    0,
     603     1921,    0, 1919,    0, 1918,    0, 1336, 1342, 1369, 1353,
     604     1915, 2782, 1359, 1307, 1359, 1309, 1912, 2782, 1911,    0,
     605
     606     1910,    0, 1908,    0, 1905,    0,    0,    0, 1905,    0,
     607     1347, 1295, 1292, 1323, 1337, 1338, 1296, 1349, 1351, 1355,
     608     1353, 1348, 1363, 1364, 1371, 1373, 1380, 1375, 1403, 1381,
     609     1385, 1389, 1094, 1387, 1390, 1904, 1391, 1393, 1397, 1401,
     610     1903, 1901, 1898, 1394, 1400, 1897, 1404, 1896, 1894, 1402,
     611     1408, 1891, 1890, 1889, 1887, 1884, 1880, 1417, 1412, 1876,
     612     1420, 1418, 1921, 2782, 1853,    0, 1852,    0,    0,    0,
     613     1854,    0,    0,    0, 2782,    0,    0,    0,    0, 1463,
     614     1849, 2782, 2782, 1469, 1846,    0, 1845,    0,    0,    0,
     615        0, 1844, 1407, 1446, 1845, 1406, 1423, 1300, 1431, 1449,
     616
     617     1455, 1447, 1842, 1457, 1448, 1459, 1464, 1460, 1490, 1474,
     618     1470, 1494, 1480, 1475, 1484, 1485, 1486, 1482, 1841, 1487,
     619     1840, 1838, 1489, 1835, 1834, 1491, 1493, 1497, 1833, 1498,
     620     1500,    0,    0,    0, 1828, 1825, 1824, 1548,    0, 1823,
     621     1821, 1818, 1817, 1816, 1817, 1814, 1813, 1812, 1505, 1510,
     622     1502, 1501, 1504, 1508, 1513, 1517, 1526, 1528, 1559, 1810,
     623     1533, 1807, 1534, 1535, 1544, 1545, 1538, 1539, 1806, 1805,
     624     1803, 1800, 1540, 1799, 1798, 1793, 1786, 1784, 1783, 1780,
     625     1779, 1778, 1776, 1759, 1750, 1749, 1746, 1546, 1742, 1549,
     626     1550, 1552, 1554, 1557, 1558, 1739, 1556, 1589, 1566, 1732,
     627
     628     1565, 1572, 1577, 1579, 1567, 1578, 1727, 1726, 1705, 1704,
     629     1703, 1696, 1694, 1693, 1650, 1649, 1647, 1645, 1644, 1646,
     630     1571, 1584, 1582, 1581, 1586, 1593, 1595, 1645, 1644, 1597,
     631     1642, 1641, 1598, 1599, 1602, 1636, 1635, 1633, 1422, 1421,
     632     1205, 1201,  946, 1605, 1610,  910, 1603, 1607,  768, 1613,
     633     1618, 1619,  723,  605,  503,  370, 1609, 1620, 1623, 1624,
     634     1625,  338,  337, 1627,  290,  251, 1630,  200,  196, 1631,
     635     1632, 1637, 1633,  136, 2782, 1707, 1720, 1733, 1743, 1753,
     636     1766, 1776, 1789, 1802, 1815, 1823, 1833, 1840, 1847, 1854,
     637     1861, 1868, 1875, 1882, 1889, 1896, 1909, 1916, 1920, 1928,
     638
     639     1931, 1938, 1945, 1952, 1955, 1962, 1968, 1981, 1994, 2001,
     640     2008, 2015, 2022, 2025, 2032, 2035, 2042, 2045, 2052, 2055,
     641     2062, 2065, 2072, 2075, 2082, 2085, 2092, 2100, 2107, 2114,
     642     2121, 2128, 2131, 2138, 2141, 2148, 2151, 2158, 2164, 2177,
     643     2184, 2191, 2194, 2201, 2204, 2211, 2214, 2221, 2224, 2231,
     644     2234, 2241, 2244, 2251, 2258, 2261, 2268, 2271, 2278, 2285,
     645     2292, 2295, 2302, 2305, 2312, 2315, 2322, 2325, 2332, 2335,
     646     2342, 2348, 2361, 2368, 2375, 2378, 2385, 2388, 2395, 2398,
     647     2405, 2408, 2415, 2418, 2425, 2428, 2435, 2438, 2445, 2448,
     648     2455, 2462, 2465, 2472, 2475, 2482, 2485, 2492, 2495, 2498,
     649
     650     2504, 2511, 2520, 2527, 2534, 2537, 2544, 2547, 2550, 2556,
     651     2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2591, 2594,
     652     2601, 2604, 2607, 2610, 2613, 2623, 2630, 2633, 2636, 2639,
     653     2646, 2653, 2660, 2663, 2670, 2677, 2684, 2691, 2698, 2705,
     654     2712, 2719, 2726, 2733, 2740, 2747, 2754, 2761, 2768
    658655    } ;
    659656
    660 static yyconst flex_int16_t yy_def[1062] =
     657static yyconst flex_int16_t yy_def[1050] =
    661658    {   0,
    662       887,    1,  888,  888,  887,    5,  889,  889,  890,  890,
    663       887,  887,  887,  887,  887,  887,  887,  891,  887,  887,
    664       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    665       887,   31,  887,  887,  887,  887,  887,  887,  892,  891,
    666       887,  887,  887,  887,  891,  887,  891,  891,  891,  891,
    667       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    668       891,  891,  887,  887,  887,  887,  887,  893,  887,  887,
    669       887,  894,  887,  887,  895,  887,  887,  896,  887,  887,
    670       887,  887,  887,  887,  887,  891,  887,  887,  887,  887,
    671       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    672 
    673       897,  887,   99,   30,  887,  887,  887,  887,  898,   30,
    674       887,   31,  887,  887,   31,  887,  887,  887,  887,  887,
    675       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    676       887,  887,  887,  887,  887,  887,  887,  887,  887,  899,
    677       887,  887,  887,  887,  891,  900,  901,  887,  887,  891,
    678       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    679       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    680       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    681       891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
    682       891,  891,  891,  891,  887,  887,  887,  893,  893,  893,
    683 
    684       887,  893,  887,  894,  887,  902,  903,  895,  887,  887,
    685       887,  887,  904,  905,  906,  896,  887,  887,  887,  887,
    686       887,  887,  887,  887,  887,  887,  887,  887,  887,  907,
    687       908,  887,   99,  887,  887,  887,  887,   99,  909,  887,
    688       887,  104,  104,  887,  887,  887,  887,  887,  887,  887,
    689       887,  910,  911,  912,  887,  887,  887,  887,  887,  887,
    690       887,  887,  887,  887,  887,  887,  887,  887,  899,  887,
    691       913,  914,  915,  916,  917,  918,  887,  919,  919,  919,
    692       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    693       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    694 
    695       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    696       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    697       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    698       919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
    699       919,  919,  919,  920,  921,  922,  923,  924,  925,  926,
    700       927,  887,  887,  928,  929,  930,  931,  932,  933,  887,
    701       887,  887,  887,  887,  934,  935,  936,  937,  887,  887,
    702       887,  887,  887,  887,  887,  371,  376,  887,  887,  938,
    703       939,  940,  887,  887,  887,  940,  887,  887,  887,  941,
    704       942,  943,  944,  945,  946,  947,  948,  949,  950,  887,
    705 
    706       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    707       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    708       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    709       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    710       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    711       951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
    712       951,  951,  951,  951,  951,  951,  951,  952,  953,  954,
    713       955,  956,  957,  958,  959,  960,  887,  961,  962,  963,
    714       964,  965,  965,  966,  967,  968,  969,  887,  488,  887,
    715       970,  887,  970,  887,  887,  887,  887,  887,  887,  887,
    716 
    717       887,  971,  972,  973,  974,  975,  976,  977,  978,  979,
    718       980,  981,  982,  983,  984,  984,  984,  984,  984,  984,
    719       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    720       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    721       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    722       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    723       984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
    724       984,  984,  984,  984,  984,  984,  985,  986,  987,  988,
    725       989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
    726       999, 1000, 1001,  887,  887,  887,  887, 1002,  887,  596,
    727 
    728       887,  887,  887,  600,  887, 1003, 1004, 1005, 1006, 1007,
    729      1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013,
    730      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    731      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    732      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    733      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
    734      1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015,  887,
    735      1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
    736       887, 1026, 1027, 1028, 1029,  887,  686,  887,  887,  887,
    737      1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038,
    738 
    739      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    740      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    741      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    742      1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042,
    743      1043, 1044,  887, 1045, 1030, 1032, 1046, 1047, 1037, 1038,
    744      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    745      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    746      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    747      1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046,
    748      1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    749 
    750      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    751      1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059,
    752      1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038,
    753      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    754      1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038,
    755      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    756      1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    757      1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
    758      1038, 1038, 1038, 1038, 1038, 1038,    0,  887,  887,  887,
    759       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    760 
    761       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    762       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    763       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    764       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    765       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    766       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    767       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    768       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    769       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    770       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    771 
    772       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    773       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    774       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    775       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    776       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    777       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    778       887
     659      875,    1,  876,  876,  875,    5,  877,  877,  878,  878,
     660      875,  875,  875,  875,  875,  875,  875,  879,  875,  875,
     661      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     662      875,   31,  875,  875,  875,  875,  875,  875,  880,  879,
     663      875,  875,  875,  875,  879,  875,  879,  879,  879,  879,
     664      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
     665      879,  875,  875,  875,  875,  875,  881,  875,  875,  875,
     666      882,  875,  875,  883,  875,  875,  884,  875,  875,  875,
     667      875,  875,  875,  875,  879,  875,  875,  875,  875,  875,
     668      875,  875,  875,  875,  875,  875,  875,  875,  875,  885,
     669
     670      875,   98,   30,  875,  875,  875,  875,  886,   30,  875,
     671       31,  875,  875,   31,  875,  875,  875,  875,  875,  875,
     672      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     673      875,  875,  875,  875,  875,  875,  875,  875,  887,  875,
     674      875,  875,  875,  879,  888,  889,  875,  875,  879,  879,
     675      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
     676      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
     677      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
     678      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
     679      879,  879,  875,  875,  875,  881,  881,  881,  875,  881,
     680
     681      875,  882,  875,  890,  891,  883,  875,  875,  875,  875,
     682      892,  893,  894,  884,  875,  875,  875,  875,  875,  875,
     683      875,  875,  875,  875,  875,  875,  875,  895,  896,  875,
     684       98,  875,  875,  875,  875,   98,  897,  875,  875,  103,
     685      103,  875,  875,  875,  875,  875,  875,  875,  875,  898,
     686      899,  900,  875,  875,  875,  875,  875,  875,  875,  875,
     687      875,  875,  875,  875,  875,  875,  887,  875,  901,  902,
     688      903,  904,  905,  906,  875,  907,  907,  907,  907,  907,
     689      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
     690      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
     691
     692      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
     693      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
     694      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
     695      907,  907,  907,  907,  907,  907,  907,  907,  907,  908,
     696      909,  910,  911,  912,  913,  914,  915,  875,  875,  916,
     697      917,  918,  919,  920,  921,  875,  875,  875,  875,  875,
     698      922,  923,  924,  925,  875,  875,  875,  875,  875,  875,
     699      875,  367,  372,  875,  875,  926,  927,  928,  875,  875,
     700      875,  928,  875,  875,  875,  929,  930,  931,  932,  933,
     701      934,  935,  936,  937,  938,  875,  939,  939,  939,  939,
     702
     703      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
     704      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
     705      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
     706      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
     707      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
     708      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
     709      939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
     710      875,  949,  950,  951,  952,  953,  953,  954,  955,  956,
     711      957,  875,  482,  875,  958,  875,  958,  875,  875,  875,
     712      875,  875,  875,  875,  875,  959,  960,  961,  962,  963,
     713
     714      964,  965,  966,  967,  968,  969,  970,  971,  972,  972,
     715      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     716      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     717      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     718      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     719      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
     720      972,  972,  972,  972,  972,  972,  972,  972,  972,  973,
     721      974,  975,  976,  977,  978,  979,  980,  981,  982,  983,
     722      984,  985,  986,  987,  988,  989,  875,  875,  875,  875,
     723      990,  875,  589,  875,  875,  875,  593,  875,  991,  992,
     724
     725      993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
     726     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
     727     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
     728     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
     729     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
     730     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
     731     1001, 1001, 1003,  875, 1004, 1005, 1006, 1007, 1008, 1009,
     732     1010, 1011, 1012, 1013,  875, 1014, 1015, 1016, 1017,  875,
     733      680,  875,  875,  875, 1018, 1019, 1020, 1021, 1022, 1023,
     734     1024, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     735
     736     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     737     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     738     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     739     1026, 1027, 1028, 1029, 1030, 1031, 1032,  875, 1033, 1018,
     740     1020, 1034, 1035, 1025, 1026, 1026, 1026, 1026, 1026, 1026,
     741     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     742     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     743     1026, 1026, 1026, 1026, 1026, 1036, 1037, 1030, 1038, 1031,
     744     1039, 1032, 1040, 1041, 1034, 1042, 1035, 1026, 1026, 1026,
     745     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     746
     747     1026, 1026, 1026, 1026, 1026, 1026, 1043, 1036, 1044, 1037,
     748     1045, 1038, 1046, 1039, 1047, 1040, 1048, 1041, 1042, 1026,
     749     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     750     1026, 1026, 1026, 1026, 1026, 1049, 1043, 1044, 1045, 1046,
     751     1020, 1047, 1048, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     752     1026, 1026, 1026, 1026, 1049, 1020, 1026, 1026, 1026, 1026,
     753     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
     754     1026, 1026, 1026, 1026,    0,  875,  875,  875,  875,  875,
     755      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     756      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     757
     758      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     759      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     760      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     761      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     762      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     763      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     764      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     765      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     766      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     767      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     768
     769      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     770      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     771      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     772      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     773      875,  875,  875,  875,  875,  875,  875,  875,  875
    779774    } ;
    780775
    781 static yyconst flex_int16_t yy_nxt[2908] =
     776static yyconst flex_int16_t yy_nxt[2867] =
    782777    {   0,
    783778       12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
     
    785780       28,   29,   30,   31,   32,   32,   32,   32,   33,   34,
    786781       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,
     782       18,   18,   40,   18,   18,   18,   18,   18,   40,   18,
     783       41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
     784       51,   52,   53,   18,   54,   18,   55,   18,   18,   18,
     785       18,   56,   57,   58,   59,   60,   61,   18,   18,   18,
     786       62,   63,   64,   65,   66,   83,   91,   84,   84,   66,
     787       87,   88,   67,   70,   70,   70,   70,   70,   70,   70,
     788
     789       70,   70,   70,   71,   70,   70,   70,   70,   70,   70,
     790       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
     791       70,   70,   70,   70,   70,   70,   70,   70,   71,   71,
    795792       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
    796        71,   71,   71,   71,   71,   71,   71,   71,   71,   72,
    797        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,
    800        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,
    1027       468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
    1028       578,  355,  578,  351,  349,  205,  578,  469,  201,  469,
    1029       580,   87,  580,  277,  276,  274,  580,  471,  270,  471,
    1030       582,  265,  582,  268,  265,  263,  582,  473,  262,  473,
    1031       584,  261,  584,  240,  232,   85,  584,  475,   85,  475,
    1032       586,   87,  586,  205,  203,   85,  586,  478,  122,  478,
    1033       588,  117,  588,   87,  887,   70,  588,  480,   70,  480,
    1034       482,  887,  482,  887,  887,  887,  482,  590,  887,  590,
    1035 
    1036       887,  887,  887,  590,  484,  887,  484,  592,  887,  592,
    1037       887,  887,  887,  592,  486,  887,  486,  491,  887,  491,
    1038       887,  491,  887,  491,  382,  887,  382,  887,  887,  887,
    1039       382,  606,  887,  606,  887,  887,  887,  606,  503,  887,
    1040       503,  608,  887,  608,  887,  887,  887,  608,  505,  887,
    1041       505,  610,  887,  610,  887,  887,  887,  610,  507,  887,
    1042       507,  612,  887,  612,  887,  887,  887,  612,  509,  887,
    1043       509,  614,  887,  614,  887,  887,  887,  614,  511,  887,
    1044       511,  616,  887,  616,  887,  887,  887,  616,  513,  887,
    1045       513,   86,  887,  887,   86,  887,   86,   86,   86,   86,
    1046 
    1047        86,  669,  669,  669,  669,  669,  669,  669,  669,  669,
    1048       669,  669,  669,  669,  671,  887,  671,  887,  887,  887,
    1049       671,  578,  887,  578,  673,  887,  673,  887,  887,  887,
    1050       673,  580,  887,  580,  675,  887,  675,  887,  887,  887,
    1051       675,  582,  887,  582,  677,  887,  677,  887,  887,  887,
    1052       677,  584,  887,  584,  679,  887,  679,  887,  887,  887,
    1053       679,  586,  887,  586,  681,  887,  681,  887,  887,  887,
    1054       681,  588,  887,  588,  683,  887,  683,  887,  887,  887,
    1055       683,  590,  887,  590,   86,  887,   86,  887,  887,  887,
    1056        86,  592,  887,  592,  491,  887,  491,  887,  887,  887,
    1057 
    1058       491,  691,  887,  691,  887,  887,  887,  691,  606,  887,
    1059       606,  693,  887,  693,  887,  887,  887,  693,  608,  887,
    1060       608,  695,  887,  695,  887,  887,  887,  695,  610,  887,
    1061       610,  140,  887,  140,  887,  887,  887,  140,  612,  887,
    1062       612,  698,  887,  698,  614,  887,  614,   86,  887,  887,
    1063        86,  887,   86,   86,   86,   86,   86,  616,  887,  616,
    1064       669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
    1065       669,  669,  669,  737,  887,  737,  887,  887,  887,  737,
    1066       671,  887,  671,  204,  887,  204,  887,  887,  887,  204,
    1067       673,  887,  673,  740,  887,  740,  675,  887,  675,  204,
    1068 
    1069       887,  887,  204,  887,  204,  204,  204,  204,  204,  677,
    1070       887,  677,  741,  887,  741,  679,  887,  679,  681,  887,
    1071       681,  742,  887,  742,  683,  887,  683,   86,  887,   86,
    1072       744,  887,  744,  887,  887,  887,  744,  691,  887,  691,
    1073       269,  887,  269,  887,  887,  887,  269,  693,  887,  693,
    1074       747,  887,  747,  695,  887,  695,  140,  887,  140,  748,
    1075       887,  748,  887,  887,  887,  748,   86,  887,  887,   86,
    1076       887,   86,   86,   86,   86,   86,  781,  887,  781,  737,
    1077       887,  737,  204,  887,  204,  782,  887,  782,  887,  887,
    1078       887,  782,  784,  887,  784,  887,  887,  887,  784,  786,
    1079 
    1080       887,  786,  887,  887,  887,  786,  788,  887,  788,  789,
    1081       887,  789,  887,  887,  887,  789,  791,  887,  791,  887,
    1082       887,  887,  791,  812,  887,  812,  887,  887,  887,  812,
    1083       814,  887,  814,  887,  887,  887,  814,  816,  887,  816,
    1084       887,  887,  887,  816,  818,  887,  818,  887,  887,  887,
    1085       818,  820,  887,  820,  887,  887,  887,  820,  822,  887,
    1086       822,  887,  887,  887,  822,  616,  887,  616,  887,  887,
    1087       887,  616,  841,  887,  841,  887,  887,  887,  841,  677,
    1088       887,  677,  887,  887,  887,  677,  681,  887,  681,  887,
    1089       887,  887,  681,   86,  887,   86,  887,  887,  887,   86,
    1090 
    1091       846,  887,  846,  887,  887,  887,  846,  140,  887,  140,
    1092       887,  887,  887,  140,  204,  887,  204,  887,  887,  887,
    1093       204,   11,  887,  887,  887,  887,  887,  887,  887,  887,
    1094       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1095       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1096       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1097       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1098       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1099       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1100       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1101 
    1102       887,  887,  887,  887,  887,  887,  887
     793       71,   71,   71,   70,   72,   70,   70,   71,   73,   71,
     794       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
     795       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
     796       71,   71,   71,   70,   70,   70,   70,   75,   75,   78,
     797       78,  122,  123,   89,  140,   78,   78,   86,   75,   75,
     798       79,   80,   81,   81,   81,   79,   81,   80,   82,   82,
     799
     800       82,   81,   90,   92,  141,  145,   86,   97,   94,   98,
     801       98,   98,   98,   98,   98,  250,  875,   93,   99,   84,
     802       95,   96,   84,  100,  176,  117,   76,   76,   76,   76,
     803      142,  146,   86,  101,  102,  143,  103,  103,  103,  103,
     804      104,  104,  118,   86,  119,  120,  147,   86,  148,  252,
     805      258,   86,  160,  105,  193,  192,  106,   86,   86,  149,
     806      150,  151,  107,  108,  152,  153,  181,  154,  109,   86,
     807      155,  156,   86,   86,  105,   86,  144,  161,  157,  158,
     808      110,  159,  204,  261,  162,  262,   86,  179,  107,  228,
     809      163,  108,  102,  180,  111,  111,  111,  111,  111,  111,
     810
     811       86,  168,   86,  169,  194,   86,   86,   86,  205,  164,
     812       86,  105,  170,  165,  112,  229,  177,   86,  166,  186,
     813      113,  281,  167,  178,  269,   86,  114,  187,  191,  182,
     814      183,  142,  105,  261,  188,  262,  143,  284,  115,  184,
     815       86,   86,  185,  198,  199,  171,  113,  124,  198,  189,
     816      270,  125,  126,  172,  127,  173,  128,  129,  174,  130,
     817      248,  131,  175,  256,  200,  200,  200,  200,  200,  200,
     818      132,  133,  134,  261,   86,  262,   86,  144,  195,   80,
     819       81,   81,   81,  195,  249,  280,  196,  257,   86,   86,
     820      135,  190,   86,  136,   79,   80,   81,   81,   81,   79,
     821
     822       81,   80,   81,   81,   81,   81,   81,   80,   82,   82,
     823       82,   81,  261,  305,  262,  240,  240,  240,  240,  246,
     824      137,  138,  207,  208,  875,  247,  254,  207,   86,  209,
     825      247,  261,  255,  262,  209,   98,   98,   98,   98,   98,
     826       98,  263,  875,  210,  210,  210,  210,  241,  246,  308,
     827      875,  247,  263,  261,  209,  262,  247,  102,  255,  104,
     828      104,  104,  104,  104,  104,   86,  261,  239,  262,  211,
     829      875,  261,  209,  262,   86,  255,  105,  209,  209,  875,
     830      276,  209,  209,   86,  253,  264,  261,  277,  262,  209,
     831      296,  242,  209,  254,  209,  212,  209,  105,  213,  215,
     832
     833      261,  255,  262,  216,  217,  283,   86,  875,  218,  219,
     834      243,  220,  243,  221,   86,  244,  244,  244,  244,  244,
     835      244,   86,  222,  223,  224,  261,  265,  262,  142,  306,
     836       86,   86,  278,  143,   86,   86,  285,  286,  287,  279,
     837      288,  289,  225,   86,  290,  226,  291,  245,  282,   86,
     838       86,  292,  293,  294,   86,  295,  297,  875,  298,  301,
     839       86,   86,  307,   86,  299,  300,  309,  303,   86,   86,
     840      304,   86,  302,  227,  231,  231,  231,  231,  231,  231,
     841       86,   86,   86,  312,  310,  311,  313,   86,   86,   86,
     842      232,  233,   86,  234,  235,   86,  142,   86,  314,   86,
     843
     844      321,  315,  330,   86,  320,   86,  236,  318,   86,  316,
     845      317,  232,  233,  232,  319,  325,  234,   86,  235,  322,
     846       86,   86,   86,  331,  333,  328,  332,  629,  326,  323,
     847      324,   86,  207,  208,  337,  335,  338,  207,  365,   86,
     848      329,  342,  334,  336,  339,  327,  195,   80,   81,   81,
     849       81,  195,  198,  199,  196,   86,   86,  198,  198,  199,
     850      356,  365,  357,  198,  340,  199,  356,  343,  357,  340,
     851      356,  341,  357,  200,  200,  200,  200,  200,  200,  200,
     852      200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
     853      200,  348,  348,  348,  348,  357,  357,  356,   86,  357,
     854
     855      358,  356,  356,  357,  357,  356,  359,  357,  356,  356,
     856      357,  357,  356,  356,  357,  357,  369,  365,  403,  366,
     857      369,  366,   86,  349,  367,  367,  367,  367,  367,  367,
     858      875,  232,  233,   86,  234,  235,  261,  369,  262,  369,
     859      365,  261,  405,  262,  369,  104,  104,  104,  104,  104,
     860      104,  398,  232,  233,  232,  374,  368,  234,   86,  235,
     861       86,   86,  105,   86,  371,  244,  244,  244,  244,  244,
     862      244,  384,  386,  397,   86,   86,  399,  253,  401,  400,
     863      402,  374,   86,  105,  372,  372,  372,  372,  372,  372,
     864      104,  104,  104,  104,  104,  104,  377,  384,  387,   86,
     865
     866      232,   86,   86,  234,  235,  243,  404,  243,  411,   86,
     867      244,  244,  244,  244,  244,  244,  373,  410,  379,   86,
     868      380,  232,  253,  232,  381,  409,  234,  419,  235,   86,
     869      382,  111,  111,  111,  111,  111,  111,   86,   86,   86,
     870       86,   86,  383,   86,  412,  415,  380,   86,  416,   86,
     871      381,   86,  406,   86,  413,  414,  417,   86,  407,  408,
     872      422,   86,  421,  258,   86,  420,   86,   86,  418,  424,
     873       86,  423,  428,   86,  426,  427,  430,   86,  429,  425,
     874       86,   86,   86,   86,   86,  431,  432,  433,   86,  437,
     875       86,  435,   86,  438,   86,  439,  434,   86,  436,   86,
     876
     877       86,   86,   86,   86,   86,   86,   86,  443,   86,   86,
     878      444,  441,  440,  446,   86,  442,  445,  451,   86,   86,
     879      142,  450,   86,   86,  447,  449,  448,  456,  452,   86,
     880       86,  459,  453,   86,  494,  460,  454,  455,  340,  199,
     881      457,  199,  458,  340,  356,  341,  357,  197,  461,  209,
     882      209,  209,  209,  348,  348,  348,  348,  356,  495,  357,
     883       86,   86,   86,   86,  367,  367,  367,  367,  367,  367,
     884      366,  509,  366,  514,   86,  367,  367,  367,  367,  367,
     885      367,  471,  482,  482,  482,  482,  482,  482,  231,  231,
     886      231,  231,  231,  231,   86,   86,  516,   86,  232,  486,
     887
     888      875,  234,  235,  240,  240,  240,  240,  104,  104,  487,
     889      489,  510,  486,  512,  483,  377,  490,  545,  490,  232,
     890      370,  232,  488,   86,  234,  486,  235,  372,  372,  372,
     891      372,  372,  372,   86,  875,  371,  489,  379,  486,  380,
     892       86,  525,  490,  381,  490,  491,  529,  491,  511,  382,
     893      492,  492,  492,  492,  492,  492,  379,   86,  380,  373,
     894       86,  383,  381,   86,   86,  380,  513,   86,  496,  381,
     895       86,   86,  515,  517,   86,   86,  519,   86,   86,   86,
     896      383,   86,  493,  518,  380,   86,  526,  521,  381,  520,
     897       86,  522,  523,  524,  527,   86,  531,  532,  530,   86,
     898
     899       86,  528,   86,   86,   86,  533,   86,   86,   86,  534,
     900       86,  535,  538,  541,   86,  543,  539,   86,   86,   86,
     901       86,  536,   86,  542,  537,  544,   86,  540,   86,  551,
     902       86,   86,  547,   86,  549,   86,  546,   86,   86,   86,
     903      548,   86,  550,  552,   86,   86,  558,   86,   86,   86,
     904      555,  553,  554,  556,  560,  561,  559,  557,   86,   86,
     905      567,  566,   86,  716,  563,  562,  199,  564,   86,  568,
     906      486,  569,  570,  209,  209,  209,  209,  565,  482,  482,
     907      482,  482,  482,  482,  372,  372,  372,  372,  372,  372,
     908      616,   86,  486,  486,  232,  592,  486,  234,  235,  588,
     909
     910       86,  588,  487,  591,  589,  589,  589,  589,  589,  589,
     911      483,  614,   86,  612,   86,  232,  484,  232,  486,  486,
     912      234,  592,  235,  492,  492,  492,  492,  492,  492,  611,
     913       86,   86,   86,   86,  621,  620,  590,  593,  593,  593,
     914      593,  593,  593,   86,  615,  613,  617,   86,  618,   86,
     915       86,   86,   86,  594,  626,  875,  595,  596,  491,  856,
     916      491,  619,  622,  492,  492,  492,  492,  492,  492,  597,
     917      623,   86,   86,  624,  594,   86,  594,   86,   86,  595,
     918      625,  596,   86,  627,   86,   86,  630,   86,  628,  635,
     919      634,   86,   86,  633,   86,   86,  636,   86,   86,  632,
     920
     921      631,   86,   86,  641,   86,   86,   86,   86,   86,  638,
     922      642,   86,  639,  640,   86,   86,  644,  637,   86,  643,
     923      645,  646,   86,  647,  648,  652,   86,  651,   86,  650,
     924       86,  649,   86,  656,  653,  658,   86,  655,  654,   86,
     925       86,   86,   86,   86,  657,  659,   86,   86,  682,  660,
     926      682,   86,  696,  695,  700,  662,  749,  661,  482,  482,
     927      482,  482,  482,  482,  589,  589,  589,  589,  589,  589,
     928      588,  682,  588,  682,   86,  589,  589,  589,  589,  589,
     929      589,  593,  593,  593,  593,  593,  593,  697,   86,   86,
     930      587,  680,  680,  680,  680,  680,  680,  683,   86,   86,
     931
     932       86,  683,   86,  693,   86,  698,   86,  594,  701,  703,
     933      595,  596,  699,  597,   86,   86,  694,  704,  683,  702,
     934      683,  705,   86,  681,   86,  683,   86,  712,  594,  706,
     935      594,   86,   86,  595,  710,  596,   86,  707,   86,  708,
     936       86,   86,   86,  711,   86,   86,  709,  713,   86,  715,
     937      718,   86,   86,   86,   86,   86,  714,   86,   86,   86,
     938      717,  722,  726,   86,  719,  723,  727,  720,   86,   86,
     939      721,   86,  725,  729,   86,  875,  875,  728,  724,  745,
     940      730,  748,   86,  747,  731,  680,  680,  680,  680,  680,
     941      680,  593,  593,  593,  593,  593,  593,   86,   86,   86,
     942
     943       86,  594,  750,  751,  595,  596,   86,  746,   86,  752,
     944       86,   86,  755,  759,  754,   86,  753,  681,  757,  756,
     945      762,   86,  594,  684,  594,   86,   86,  595,  760,  596,
     946      761,   86,  758,   86,  763,   86,   86,   86,   86,  764,
     947       86,   86,   86,  765,   86,   86,  766,  769,   86,   86,
     948      767,   86,   86,   86,  768,   86,   86,  774,  790,   86,
     949      775,   86,  771,  770,   86,  792,  772,  791,   86,  773,
     950      680,  680,  680,  680,  680,  680,  788,   86,  789,   86,
     951      796,  794,  793,  798,   86,   86,   86,  799,  800,   86,
     952       86,   86,  797,  801,  795,   86,   86,   86,  802,  803,
     953
     954       86,   86,  738,   86,  804,   86,  823,   86,   86,   86,
     955       86,  825,  826,  805,  806,  828,   86,   86,   86,  822,
     956      829,  821,   86,   86,  820,  827,  831,  824,   86,   86,
     957       86,  832,   86,   86,  834,   86,  846,   86,  830,  833,
     958       86,  847,  845,  844,   86,  835,   86,  849,   86,   86,
     959       86,  851,  852,   86,   86,  848,   86,  859,   86,  853,
     960       86,   86,  854,  850,   86,  857,  858,  861,  860,   86,
     961       86,   86,  862,  863,   86,   86,   86,  866,   86,  868,
     962      864,   86,   86,   86,   86,  867,  865,  875,   86,  875,
     963      855,  871,   86,   86,  874,   86,   86,   86,  875,  875,
     964
     965      869,  843,  870,  875,  842,  872,  873,   68,   68,   68,
     966       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
     967       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
     968       74,   74,   74,   77,   77,   77,   77,   77,   77,   77,
     969       77,   77,   77,   77,   77,   77,   85,  875,  840,   85,
     970      875,   85,   85,   85,   85,   85,  139,  839,  875,  838,
     971      139,  139,  139,  139,  139,  139,  197,  197,  197,  197,
     972      197,  197,  197,  197,  197,  197,  197,  197,  197,  202,
     973      875,  837,  202,   86,  202,  202,  202,  202,  202,  206,
     974       86,  206,  206,   86,  206,  206,  206,  206,  206,  206,
     975
     976      875,  206,  214,  819,  875,  214,  214,  214,  214,  214,
     977      214,  214,  214,  818,  214,  237,  237,  237,  237,  237,
     978      237,  237,  237,  237,  237,  237,  237,  237,  251,  251,
     979      816,  251,  875,  814,  875,  251,  267,  812,  875,  267,
     980      810,  267,  267,  267,  267,  267,  271,  808,  271,   86,
     981       86,   86,  271,  273,   86,  273,   86,   86,   86,  273,
     982      344,   86,  344,   86,   86,   86,  344,  346,   86,  346,
     983      875,  787,  785,  346,  350,  875,  350,  875,  782,  780,
     984      350,  352,  778,  352,   86,   86,   86,  352,  354,   86,
     985      354,   86,   86,   86,  354,  361,   86,  361,  744,  741,
     986
     987      740,  361,  363,  738,  363,  203,  734,  733,  363,  237,
     988      237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
     989      237,  237,  376,  664,  376,  378,  378,   86,  378,  378,
     990      378,   86,  378,  251,  251,   86,  251,  388,   86,  388,
     991       86,   86,   86,  388,  390,   86,  390,   86,   86,   86,
     992      390,  392,   86,  392,   86,   86,   86,  392,  271,  691,
     993      271,  394,  690,  394,  688,  686,  684,  394,  273,  591,
     994      273,   85,  679,  678,   85,  676,   85,   85,   85,   85,
     995       85,  197,  197,  197,  197,  197,  197,  197,  197,  197,
     996      197,  197,  197,  197,  462,  462,  462,  462,  462,  462,
     997
     998      462,  462,  462,  462,  462,  462,  462,  463,  674,  463,
     999      672,  670,  668,  463,  465,  666,  465,  664,   86,   86,
     1000      465,  467,   86,  467,   86,   86,   86,  467,  344,   86,
     1001      344,  469,   86,  469,   86,  610,  608,  469,  346,  606,
     1002      346,  472,  604,  472,  602,  600,  496,  472,  350,  598,
     1003      350,  474,  598,  474,  587,  586,  584,  474,  352,  477,
     1004      352,  476,  477,  476,  582,  580,  578,  476,  354,  576,
     1005      354,  478,  574,  478,  572,   86,   86,  478,  361,   86,
     1006      361,  480,   86,  480,   86,   86,   86,  480,  363,   86,
     1007      363,  485,  508,  485,  506,  485,  504,  485,  376,  502,
     1008
     1009      376,  500,  376,  498,  376,  378,  378,  484,  378,  378,
     1010      378,  481,  378,  497,  479,  497,  357,  357,  477,  497,
     1011      499,  475,  499,  473,  470,  468,  499,  501,  466,  501,
     1012      464,   86,   86,  501,  388,   86,  388,  503,  396,  503,
     1013      395,  393,  391,  503,  390,  389,  390,  505,  268,  505,
     1014      263,  262,  385,  505,  392,  385,  392,  507,  250,  507,
     1015      375,  375,  238,  507,  394,  370,  394,   85,  364,  362,
     1016       85,  360,   85,   85,   85,   85,   85,  462,  462,  462,
     1017      462,  462,  462,  462,  462,  462,  462,  462,  462,  462,
     1018      571,  356,  571,  355,  353,  351,  571,  463,  347,  463,
     1019
     1020      573,  345,  573,  203,  199,   86,  573,  465,  275,  465,
     1021      575,  274,  575,  272,  268,  263,  575,  467,  266,  467,
     1022      577,  263,  577,  261,  260,  259,  577,  469,  238,  469,
     1023      579,  230,  579,   84,   84,   86,  579,  472,  203,  472,
     1024      581,  201,  581,   84,  121,  116,  581,  474,   86,  474,
     1025      476,  875,  476,   69,   69,  875,  476,  583,  875,  583,
     1026      875,  875,  875,  583,  478,  875,  478,  585,  875,  585,
     1027      875,  875,  875,  585,  480,  875,  480,  485,  875,  485,
     1028      875,  485,  875,  485,  378,  875,  378,  875,  875,  875,
     1029      378,  599,  875,  599,  875,  875,  875,  599,  497,  875,
     1030
     1031      497,  601,  875,  601,  875,  875,  875,  601,  499,  875,
     1032      499,  603,  875,  603,  875,  875,  875,  603,  501,  875,
     1033      501,  605,  875,  605,  875,  875,  875,  605,  503,  875,
     1034      503,  607,  875,  607,  875,  875,  875,  607,  505,  875,
     1035      505,  609,  875,  609,  875,  875,  875,  609,  507,  875,
     1036      507,   85,  875,  875,   85,  875,   85,   85,   85,   85,
     1037       85,  663,  663,  663,  663,  663,  663,  663,  663,  663,
     1038      663,  663,  663,  663,  665,  875,  665,  875,  875,  875,
     1039      665,  571,  875,  571,  667,  875,  667,  875,  875,  875,
     1040      667,  573,  875,  573,  669,  875,  669,  875,  875,  875,
     1041
     1042      669,  575,  875,  575,  671,  875,  671,  875,  875,  875,
     1043      671,  577,  875,  577,  673,  875,  673,  875,  875,  875,
     1044      673,  579,  875,  579,  675,  875,  675,  875,  875,  875,
     1045      675,  581,  875,  581,  677,  875,  677,  875,  875,  875,
     1046      677,  583,  875,  583,   85,  875,   85,  875,  875,  875,
     1047       85,  585,  875,  585,  485,  875,  485,  875,  875,  875,
     1048      485,  685,  875,  685,  875,  875,  875,  685,  599,  875,
     1049      599,  687,  875,  687,  875,  875,  875,  687,  601,  875,
     1050      601,  689,  875,  689,  875,  875,  875,  689,  603,  875,
     1051      603,  139,  875,  139,  875,  875,  875,  139,  605,  875,
     1052
     1053      605,  692,  875,  692,  607,  875,  607,   85,  875,  875,
     1054       85,  875,   85,   85,   85,   85,   85,  609,  875,  609,
     1055      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
     1056      663,  663,  663,  732,  875,  732,  875,  875,  875,  732,
     1057      665,  875,  665,  202,  875,  202,  875,  875,  875,  202,
     1058      667,  875,  667,  735,  875,  735,  669,  875,  669,  202,
     1059      875,  875,  202,  875,  202,  202,  202,  202,  202,  671,
     1060      875,  671,  736,  875,  736,  673,  875,  673,  675,  875,
     1061      675,  737,  875,  737,  677,  875,  677,   85,  875,   85,
     1062      739,  875,  739,  875,  875,  875,  739,  685,  875,  685,
     1063
     1064      267,  875,  267,  875,  875,  875,  267,  687,  875,  687,
     1065      742,  875,  742,  689,  875,  689,  139,  875,  139,  743,
     1066      875,  743,  875,  875,  875,  743,   85,  875,  875,   85,
     1067      875,   85,   85,   85,   85,   85,  776,  875,  776,  732,
     1068      875,  732,  202,  875,  202,  777,  875,  777,  875,  875,
     1069      875,  777,  779,  875,  779,  875,  875,  875,  779,  781,
     1070      875,  781,  875,  875,  875,  781,  783,  875,  783,  784,
     1071      875,  784,  875,  875,  875,  784,  786,  875,  786,  875,
     1072      875,  875,  786,  807,  875,  807,  875,  875,  875,  807,
     1073      809,  875,  809,  875,  875,  875,  809,  811,  875,  811,
     1074
     1075      875,  875,  875,  811,  813,  875,  813,  875,  875,  875,
     1076      813,  815,  875,  815,  875,  875,  875,  815,  817,  875,
     1077      817,  875,  875,  875,  817,  609,  875,  609,  875,  875,
     1078      875,  609,  836,  875,  836,  875,  875,  875,  836,  671,
     1079      875,  671,  875,  875,  875,  671,  675,  875,  675,  875,
     1080      875,  875,  675,   85,  875,   85,  875,  875,  875,   85,
     1081      841,  875,  841,  875,  875,  875,  841,  139,  875,  139,
     1082      875,  875,  875,  139,  202,  875,  202,  875,  875,  875,
     1083      202,   11,  875,  875,  875,  875,  875,  875,  875,  875,
     1084      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1085
     1086      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1087      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1088      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1089      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1090      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1091      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1092      875,  875,  875,  875,  875,  875
    11031093    } ;
    11041094
    1105 static yyconst flex_int16_t yy_chk[2908] =
     1095static yyconst flex_int16_t yy_chk[2867] =
    11061096    {   0,
    11071097        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     
    11131103        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    11141104        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,
     1105        1,    1,    1,    1,    2,   16,   24,   16,   24,    2,
     1106       19,   19,    2,    5,    5,    5,    5,    5,    5,    5,
    11171107
    11181108        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
     
    11231113        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
    11241114        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,
     1115        5,    5,    5,    5,    5,    5,    5,    7,    8,    9,
     1116       10,   37,   37,   20,   39,    9,   10,  874,    7,    8,
     1117       13,   13,   13,   13,   13,   13,   15,   15,   15,   15,
     1118
     1119       15,   15,   20,   25,   39,   42,   53,   28,   27,   28,
     1120       28,   28,   28,   28,   28,  108,  114,   25,   29,   25,
     1121       27,   27,   27,   29,   53,   35,    7,    8,    9,   10,
     1122       40,   42,   48,   29,   30,   40,   30,   30,   30,   30,
     1123       30,   30,   35,   61,   35,   35,   44,  869,   44,  108,
     1124      114,  868,   48,   30,   63,   61,   30,   56,   47,   45,
     1125       45,   45,   30,   30,   45,   45,   56,   45,   30,   55,
     1126       45,   45,   49,   40,   30,   45,   40,   49,   45,   47,
     1127       30,   47,   72,  125,   49,  125,   51,   55,   30,   86,
     1128       49,   30,   31,   55,   31,   31,   31,   31,   31,   31,
     1129
     1130       50,   51,  866,   51,   63,  153,   54,   58,   72,   50,
     1131       60,   31,   51,   50,   31,   86,   54,   57,   50,   58,
     1132       31,  153,   50,   54,  141,  156,   31,   58,   60,   57,
     1133       57,   59,   31,  126,   58,  126,   59,  156,   31,   57,
     1134       52,  865,   57,   67,   67,   52,   31,   38,   67,   59,
     1135      141,   38,   38,   52,   38,   52,   38,   38,   52,   38,
     1136      107,   38,   52,  113,   67,   67,   67,   67,   67,   67,
     1137       38,   38,   38,  128,   59,  128,  152,   59,   66,   66,
     1138       66,   66,   66,   66,  107,  152,   66,  113,  863,  862,
     1139       38,   59,  165,   38,   79,   79,   79,   79,   79,   79,
     1140
     1141       81,   81,   81,   81,   81,   81,   82,   82,   82,   82,
     1142       82,   82,  131,  165,  131,  103,  103,  103,  103,  106,
     1143       38,   38,   76,   76,  856,  106,  112,   76,  168,   76,
     1144      110,  133,  112,  133,   76,  102,  102,  102,  102,  102,
     1145      102,  130,  103,   76,   76,   76,   76,  103,  110,  168,
     1146      109,  106,  129,  130,   76,  130,  110,  104,  112,  104,
     1147      104,  104,  104,  104,  104,  149,  129,  102,  129,   76,
     1148      103,  136,   76,  136,  158,  115,  104,   76,   76,  109,
     1149      149,   76,   76,  155,  109,  132,  132,  149,  132,   76,
     1150      158,  104,   76,  115,   76,   76,   76,  104,   76,   84,
     1151
     1152      138,  115,  138,   84,   84,  155,  166,  109,   84,   84,
     1153      105,   84,  105,   84,  150,  105,  105,  105,  105,  105,
     1154      105,  151,   84,   84,   84,  134,  134,  134,  144,  166,
     1155      154,  157,  150,  144,  159,  167,  157,  157,  157,  151,
     1156      157,  157,   84,  161,  157,   84,  157,  105,  154,  160,
     1157      163,  157,  157,  157,  162,  157,  159,  855,  160,  162,
     1158      164,  169,  167,  170,  161,  161,  169,  163,  171,  172,
     1159      164,  144,  162,   84,   98,   98,   98,   98,   98,   98,
     1160      173,  174,  175,  171,  169,  170,  172,  179,  176,  185,
     1161       98,   98,  178,   98,   98,  180,  189,  182,  173,  187,
     1162
     1163      180,  174,  185,  186,  179,  188,   98,  178,  181,  175,
     1164      176,   98,   98,   98,  178,  182,   98,  183,   98,  181,
     1165      184,  191,  190,  186,  188,  184,  187,  528,  183,  181,
     1166      181,  192,  207,  207,  191,  190,  191,  207,  232,  189,
     1167      184,  203,  189,  190,  192,  183,  195,  195,  195,  195,
     1168      195,  195,  196,  196,  195,  528,  854,  196,  198,  198,
     1169      216,  232,  216,  198,  200,  200,  217,  203,  217,  200,
     1170      218,  200,  218,  196,  196,  196,  196,  196,  196,  198,
     1171      198,  198,  198,  198,  198,  200,  200,  200,  200,  200,
     1172      200,  210,  210,  210,  210,  219,  220,  221,  282,  221,
     1173
     1174      222,  222,  223,  222,  223,  224,  224,  224,  220,  219,
     1175      220,  219,  226,  227,  226,  227,  234,  235,  282,  233,
     1176      234,  233,  284,  210,  233,  233,  233,  233,  233,  233,
     1177      241,  239,  239,  277,  239,  239,  264,  234,  264,  234,
     1178      235,  265,  284,  265,  234,  242,  242,  242,  242,  242,
     1179      242,  277,  239,  239,  239,  246,  233,  239,  278,  239,
     1180      276,  280,  242,  279,  241,  243,  243,  243,  243,  243,
     1181      243,  254,  268,  276,  853,  281,  278,  242,  280,  279,
     1182      281,  246,  288,  242,  244,  244,  244,  244,  244,  244,
     1183      253,  253,  253,  253,  253,  253,  251,  254,  268,  287,
     1184
     1185      244,  283,  286,  244,  244,  245,  283,  245,  288,  295,
     1186      245,  245,  245,  245,  245,  245,  244,  287,  251,  849,
     1187      251,  244,  253,  244,  251,  286,  244,  295,  244,  289,
     1188      251,  258,  258,  258,  258,  258,  258,  285,  290,  292,
     1189      291,  294,  251,  293,  289,  291,  251,  297,  292,  301,
     1190      251,  299,  285,  303,  290,  290,  293,  298,  285,  285,
     1191      299,  302,  298,  258,  300,  297,  307,  304,  294,  301,
     1192      306,  300,  304,  305,  303,  303,  306,  308,  305,  302,
     1193      310,  309,  311,  312,  313,  307,  308,  309,  314,  313,
     1194      315,  311,  316,  314,  318,  315,  310,  317,  312,  320,
     1195
     1196      322,  321,  323,  324,  326,  325,  328,  318,  327,  329,
     1197      320,  316,  315,  322,  330,  317,  321,  327,  333,  331,
     1198      334,  326,  335,  337,  323,  325,  324,  333,  328,  336,
     1199      338,  337,  329,  339,  381,  338,  330,  331,  340,  340,
     1200      335,  341,  336,  340,  358,  340,  358,  341,  339,  348,
     1201      348,  348,  348,  349,  349,  349,  349,  359,  381,  359,
     1202      397,  846,  402,  334,  366,  366,  366,  366,  366,  366,
     1203      368,  397,  368,  402,  404,  368,  368,  368,  368,  368,
     1204      368,  348,  367,  367,  367,  367,  367,  367,  370,  370,
     1205      370,  370,  370,  370,  400,  398,  404,  435,  367,  376,
     1206
     1207      843,  367,  367,  371,  371,  371,  371,  371,  371,  376,
     1208      379,  398,  377,  400,  367,  378,  379,  435,  383,  367,
     1209      370,  367,  377,  412,  367,  376,  367,  372,  372,  372,
     1210      372,  372,  372,  399,  382,  371,  383,  378,  377,  378,
     1211      415,  412,  379,  378,  383,  380,  415,  380,  399,  378,
     1212      380,  380,  380,  380,  380,  380,  382,  401,  382,  372,
     1213      407,  378,  382,  403,  405,  378,  401,  408,  382,  378,
     1214      406,  411,  403,  405,  409,  410,  407,  416,  418,  414,
     1215      382,  413,  380,  406,  382,  417,  413,  409,  382,  408,
     1216      419,  410,  410,  411,  414,  421,  417,  418,  416,  423,
     1217
     1218      425,  414,  426,  427,  428,  419,  431,  429,  430,  421,
     1219      433,  423,  427,  429,  436,  431,  427,  437,  438,  439,
     1220      441,  425,  440,  430,  426,  433,  443,  428,  445,  441,
     1221      447,  446,  437,  448,  439,  449,  436,  450,  451,  455,
     1222      438,  452,  440,  443,  457,  633,  450,  460,  453,  458,
     1223      447,  445,  446,  448,  452,  453,  451,  449,  454,  456,
     1224      458,  457,  461,  633,  455,  454,  462,  456,  515,  460,
     1225      488,  461,  462,  471,  471,  471,  471,  456,  482,  482,
     1226      482,  482,  482,  482,  484,  484,  484,  484,  484,  484,
     1227      515,  513,  485,  487,  482,  489,  488,  482,  482,  486,
     1228
     1229      510,  486,  485,  487,  486,  486,  486,  486,  486,  486,
     1230      482,  513,  509,  510,  520,  482,  484,  482,  485,  487,
     1231      482,  489,  482,  491,  491,  491,  491,  491,  491,  509,
     1232      512,  514,  519,  516,  520,  519,  486,  492,  492,  492,
     1233      492,  492,  492,  517,  514,  512,  516,  521,  517,  525,
     1234      518,  522,  523,  492,  525,  842,  492,  492,  493,  841,
     1235      493,  518,  521,  493,  493,  493,  493,  493,  493,  492,
     1236      522,  524,  526,  523,  492,  527,  492,  529,  530,  492,
     1237      524,  492,  531,  526,  532,  533,  529,  536,  527,  535,
     1238      533,  538,  539,  532,  542,  535,  536,  540,  541,  531,
     1239
     1240      530,  544,  545,  542,  546,  547,  549,  554,  556,  539,
     1241      544,  561,  540,  541,  555,  552,  546,  538,  550,  545,
     1242      547,  549,  553,  550,  552,  556,  558,  555,  559,  554,
     1243      560,  553,  562,  561,  558,  563,  564,  560,  559,  565,
     1244      567,  563,  568,  613,  562,  564,  612,  617,  594,  565,
     1245      596,  698,  613,  612,  617,  568,  698,  567,  587,  587,
     1246      587,  587,  587,  587,  588,  588,  588,  588,  588,  588,
     1247      590,  594,  590,  596,  614,  590,  590,  590,  590,  590,
     1248      590,  593,  593,  593,  593,  593,  593,  614,  615,  616,
     1249      587,  589,  589,  589,  589,  589,  589,  595,  611,  622,
     1250
     1251      618,  595,  619,  611,  621,  615,  620,  589,  618,  620,
     1252      589,  589,  616,  593,  623,  624,  611,  621,  595,  619,
     1253      595,  622,  625,  589,  626,  595,  628,  629,  589,  623,
     1254      589,  627,  630,  589,  627,  589,  631,  624,  634,  625,
     1255      632,  635,  637,  628,  638,  644,  626,  630,  639,  632,
     1256      635,  645,  640,  650,  629,  647,  631,  696,  693,  651,
     1257      634,  640,  650,  659,  637,  644,  651,  638,  658,  662,
     1258      639,  661,  647,  659,  697,  840,  839,  658,  645,  693,
     1259      661,  697,  699,  696,  662,  680,  680,  680,  680,  680,
     1260      680,  684,  684,  684,  684,  684,  684,  694,  702,  705,
     1261
     1262      700,  680,  699,  700,  680,  680,  701,  694,  704,  701,
     1263      706,  708,  705,  709,  704,  707,  702,  680,  707,  706,
     1264      712,  711,  680,  684,  680,  710,  714,  680,  710,  680,
     1265      711,  713,  708,  718,  713,  715,  716,  717,  720,  714,
     1266      723,  709,  726,  715,  727,  712,  716,  720,  728,  730,
     1267      717,  731,  752,  751,  718,  753,  749,  730,  751,  754,
     1268      731,  750,  726,  723,  755,  753,  727,  752,  756,  728,
     1269      738,  738,  738,  738,  738,  738,  749,  757,  750,  758,
     1270      757,  755,  754,  759,  761,  763,  764,  761,  763,  767,
     1271      768,  773,  758,  764,  756,  765,  766,  788,  765,  766,
     1272
     1273      790,  791,  738,  792,  767,  793,  792,  797,  794,  795,
     1274      759,  794,  795,  768,  773,  798,  801,  799,  805,  791,
     1275      799,  790,  821,  802,  788,  797,  802,  793,  803,  806,
     1276      804,  803,  824,  823,  805,  822,  823,  825,  801,  804,
     1277      798,  824,  822,  821,  826,  806,  827,  826,  830,  833,
     1278      834,  830,  833,  835,  847,  825,  844,  847,  848,  834,
     1279      857,  845,  835,  827,  850,  844,  845,  850,  848,  851,
     1280      852,  858,  851,  852,  859,  860,  861,  859,  864,  861,
     1281      857,  867,  870,  871,  873,  860,  858,  838,  872,  837,
     1282      836,  870,  832,  831,  873,  829,  828,  820,  819,  818,
     1283
     1284      864,  817,  867,  816,  815,  871,  872,  876,  876,  876,
     1285      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
     1286      877,  877,  877,  877,  877,  877,  877,  877,  877,  877,
     1287      877,  877,  877,  878,  878,  878,  878,  878,  878,  878,
     1288      878,  878,  878,  878,  878,  878,  879,  814,  813,  879,
     1289      812,  879,  879,  879,  879,  879,  880,  811,  810,  809,
     1290      880,  880,  880,  880,  880,  880,  881,  881,  881,  881,
     1291      881,  881,  881,  881,  881,  881,  881,  881,  881,  882,
     1292      808,  807,  882,  800,  882,  882,  882,  882,  882,  883,
     1293      796,  883,  883,  789,  883,  883,  883,  883,  883,  883,
     1294
     1295      787,  883,  884,  786,  785,  884,  884,  884,  884,  884,
     1296      884,  884,  884,  784,  884,  885,  885,  885,  885,  885,
     1297      885,  885,  885,  885,  885,  885,  885,  885,  886,  886,
     1298      783,  886,  782,  781,  780,  886,  887,  779,  778,  887,
     1299      777,  887,  887,  887,  887,  887,  888,  776,  888,  775,
     1300      774,  772,  888,  889,  771,  889,  770,  769,  762,  889,
     1301      890,  760,  890,  748,  747,  746,  890,  891,  745,  891,
     1302      744,  743,  742,  891,  892,  741,  892,  740,  737,  736,
     1303      892,  893,  735,  893,  729,  725,  724,  893,  894,  722,
     1304      894,  721,  719,  703,  894,  895,  695,  895,  692,  687,
     1305
     1306      685,  895,  896,  681,  896,  671,  667,  665,  896,  897,
     1307      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
     1308      897,  897,  898,  663,  898,  899,  899,  660,  899,  899,
     1309      899,  657,  899,  900,  900,  656,  900,  901,  655,  901,
     1310      654,  653,  652,  901,  902,  649,  902,  648,  646,  643,
     1311      902,  903,  642,  903,  641,  636,  609,  903,  904,  605,
     1312      904,  905,  603,  905,  601,  599,  597,  905,  906,  591,
     1313      906,  907,  585,  583,  907,  581,  907,  907,  907,  907,
     1314      907,  908,  908,  908,  908,  908,  908,  908,  908,  908,
     1315      908,  908,  908,  908,  909,  909,  909,  909,  909,  909,
     1316
     1317      909,  909,  909,  909,  909,  909,  909,  910,  579,  910,
     1318      577,  575,  573,  910,  911,  571,  911,  570,  569,  566,
     1319      911,  912,  557,  912,  551,  548,  543,  912,  913,  537,
     1320      913,  914,  534,  914,  511,  507,  505,  914,  915,  503,
     1321      915,  916,  501,  916,  499,  497,  496,  916,  917,  495,
     1322      917,  918,  494,  918,  483,  480,  478,  918,  919,  477,
     1323      919,  920,  476,  920,  474,  472,  469,  920,  921,  467,
     1324      921,  922,  465,  922,  463,  459,  444,  922,  923,  442,
     1325      923,  924,  434,  924,  432,  424,  422,  924,  925,  420,
     1326      925,  926,  394,  926,  392,  926,  390,  926,  927,  388,
     1327
     1328      927,  387,  927,  386,  927,  928,  928,  373,  928,  928,
     1329      928,  363,  928,  929,  361,  929,  360,  356,  354,  929,
     1330      930,  352,  930,  350,  346,  344,  930,  931,  343,  931,
     1331      342,  332,  319,  931,  932,  296,  932,  933,  275,  933,
     1332      273,  271,  270,  933,  934,  269,  934,  935,  267,  935,
     1333      266,  261,  257,  935,  936,  256,  936,  937,  252,  937,
     1334      249,  248,  237,  937,  938,  236,  938,  939,  229,  228,
     1335      939,  225,  939,  939,  939,  939,  939,  940,  940,  940,
     1336      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     1337      941,  215,  941,  213,  212,  211,  941,  942,  205,  942,
     1338
     1339      943,  204,  943,  202,  197,  177,  943,  944,  148,  944,
     1340      945,  146,  945,  145,  139,  137,  945,  946,  135,  946,
     1341      947,  127,  947,  124,  123,  119,  947,  948,  100,  948,
     1342      949,   97,  949,   94,   92,   85,  949,  950,   71,  950,
     1343      951,   69,  951,   65,   36,   33,  951,  952,   18,  952,
     1344      953,   11,  953,    4,    3,    0,  953,  954,    0,  954,
     1345        0,    0,    0,  954,  955,    0,  955,  956,    0,  956,
     1346        0,    0,    0,  956,  957,    0,  957,  958,    0,  958,
     1347        0,  958,    0,  958,  959,    0,  959,    0,    0,    0,
     1348      959,  960,    0,  960,    0,    0,    0,  960,  961,    0,
     1349
     1350      961,  962,    0,  962,    0,    0,    0,  962,  963,    0,
     1351      963,  964,    0,  964,    0,    0,    0,  964,  965,    0,
     1352      965,  966,    0,  966,    0,    0,    0,  966,  967,    0,
     1353      967,  968,    0,  968,    0,    0,    0,  968,  969,    0,
     1354      969,  970,    0,  970,    0,    0,    0,  970,  971,    0,
     1355      971,  972,    0,    0,  972,    0,  972,  972,  972,  972,
     1356      972,  973,  973,  973,  973,  973,  973,  973,  973,  973,
     1357      973,  973,  973,  973,  974,    0,  974,    0,    0,    0,
     1358      974,  975,    0,  975,  976,    0,  976,    0,    0,    0,
     1359      976,  977,    0,  977,  978,    0,  978,    0,    0,    0,
     1360
     1361      978,  979,    0,  979,  980,    0,  980,    0,    0,    0,
     1362      980,  981,    0,  981,  982,    0,  982,    0,    0,    0,
     1363      982,  983,    0,  983,  984,    0,  984,    0,    0,    0,
     1364      984,  985,    0,  985,  986,    0,  986,    0,    0,    0,
    13731365      986,  987,    0,  987,  988,    0,  988,    0,    0,    0,
    13741366      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,
     1367      990,  991,    0,  991,    0,    0,    0,  991,  992,    0,
     1368      992,  993,    0,  993,    0,    0,    0,  993,  994,    0,
     1369      994,  995,    0,  995,    0,    0,    0,  995,  996,    0,
     1370      996,  997,    0,  997,    0,    0,    0,  997,  998,    0,
     1371
     1372      998,  999,    0,  999, 1000,    0, 1000, 1001,    0,    0,
     1373     1001,    0, 1001, 1001, 1001, 1001, 1001, 1002,    0, 1002,
     1374     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
     1375     1003, 1003, 1003, 1004,    0, 1004,    0,    0,    0, 1004,
     1376     1005,    0, 1005, 1006,    0, 1006,    0,    0,    0, 1006,
     1377     1007,    0, 1007, 1008,    0, 1008, 1009,    0, 1009, 1010,
     1378        0,    0, 1010,    0, 1010, 1010, 1010, 1010, 1010, 1011,
     1379        0, 1011, 1012,    0, 1012, 1013,    0, 1013, 1014,    0,
     1380     1014, 1015,    0, 1015, 1016,    0, 1016, 1017,    0, 1017,
     1381     1018,    0, 1018,    0,    0,    0, 1018, 1019,    0, 1019,
     1382
     1383     1020,    0, 1020,    0,    0,    0, 1020, 1021,    0, 1021,
     1384     1022,    0, 1022, 1023,    0, 1023, 1024,    0, 1024, 1025,
     1385        0, 1025,    0,    0,    0, 1025, 1026,    0,    0, 1026,
     1386        0, 1026, 1026, 1026, 1026, 1026, 1027,    0, 1027, 1028,
     1387        0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,    0,
     1388        0, 1030, 1031,    0, 1031,    0,    0,    0, 1031, 1032,
     1389        0, 1032,    0,    0,    0, 1032, 1033,    0, 1033, 1034,
     1390        0, 1034,    0,    0,    0, 1034, 1035,    0, 1035,    0,
     1391        0,    0, 1035, 1036,    0, 1036,    0,    0,    0, 1036,
     1392     1037,    0, 1037,    0,    0,    0, 1037, 1038,    0, 1038,
     1393
     1394        0,    0,    0, 1038, 1039,    0, 1039,    0,    0,    0,
     1395     1039, 1040,    0, 1040,    0,    0,    0, 1040, 1041,    0,
     1396     1041,    0,    0,    0, 1041, 1042,    0, 1042,    0,    0,
    14021397        0, 1042, 1043,    0, 1043,    0,    0,    0, 1043, 1044,
    1403 
    1404         0, 1044,    0,    0,    0, 1044, 1045,    0, 1045, 1046,
    1405         0, 1046,    0,    0,    0, 1046, 1047,    0, 1047,    0,
    1406         0,    0, 1047, 1048,    0, 1048,    0,    0,    0, 1048,
    1407      1049,    0, 1049,    0,    0,    0, 1049, 1050,    0, 1050,
    1408         0,    0,    0, 1050, 1051,    0, 1051,    0,    0,    0,
    1409      1051, 1052,    0, 1052,    0,    0,    0, 1052, 1053,    0,
    1410      1053,    0,    0,    0, 1053, 1054,    0, 1054,    0,    0,
    1411         0, 1054, 1055,    0, 1055,    0,    0,    0, 1055, 1056,
    1412         0, 1056,    0,    0,    0, 1056, 1057,    0, 1057,    0,
    1413         0,    0, 1057, 1058,    0, 1058,    0,    0,    0, 1058,
    1414 
    1415      1059,    0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,
    1416         0,    0,    0, 1060, 1061,    0, 1061,    0,    0,    0,
    1417      1061,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1418       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1419       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1420       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1421       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1422       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1423       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1424       887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
    1425 
    1426       887,  887,  887,  887,  887,  887,  887
     1398        0, 1044,    0,    0,    0, 1044, 1045,    0, 1045,    0,
     1399        0,    0, 1045, 1046,    0, 1046,    0,    0,    0, 1046,
     1400     1047,    0, 1047,    0,    0,    0, 1047, 1048,    0, 1048,
     1401        0,    0,    0, 1048, 1049,    0, 1049,    0,    0,    0,
     1402     1049,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1403      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1404
     1405      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1406      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1407      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1408      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1409      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1410      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
     1411      875,  875,  875,  875,  875,  875
    14271412    } ;
    14281413
    14291414/* Table of booleans, true if rule could match eol. */
    1430 static yyconst flex_int32_t yy_rule_can_match_eol[181] =
     1415static yyconst flex_int32_t yy_rule_can_match_eol[180] =
    14311416    {   0,
    143214171, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     
    14351420    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14361421    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1437     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1,
    1438     0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1422    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
     1423    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14391424    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    14401425    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    1441     0,     };
     1426        };
    14421427
    14431428static yy_state_type yy_last_accepting_state;
     
    14671452 * Created On       : Sat Sep 22 08:58:10 2001
    14681453 * Last Modified By : Peter A. Buhr
    1469  * Last Modified On : Mon Mar 21 23:33:46 2016
    1470  * Update Count     : 450
     1454 * Last Modified On : Tue Feb  2 15:06:54 2016
     1455 * Update Count     : 426
    14711456 */
    14721457#line 20 "lex.ll"
     
    14801465
    14811466#include "lex.h"
     1467#include "ParseNode.h"
    14821468#include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
    1483 #include "ParseNode.h"
    1484 #include "TypedefTable.h"
    14851469
    14861470char *yyfilename;
     
    14981482#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    14991483#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    1500 #define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
     1484#define IDENTIFIER_RETURN()     RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) )
    15011485#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
    15021486
     
    15181502// attribute identifier, GCC: $ in identifier
    15191503// 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]))
     1504// GCC: D (double), LD (long double) and iI (imaginary) suffixes
    15221505// character escape sequence, GCC: \e => esc character
    15231506// ' stop highlighting
     
    15281511
    15291512
    1530 #line 1531 "Parser/lex.cc"
     1513#line 1514 "Parser/lex.cc"
    15311514
    15321515#define INITIAL 0
     
    17201703        register int yy_act;
    17211704   
    1722 #line 139 "lex.ll"
     1705#line 137 "lex.ll"
    17231706
    17241707                                   /* line directives */
    1725 #line 1726 "Parser/lex.cc"
     1708#line 1709 "Parser/lex.cc"
    17261709
    17271710        if ( !(yy_init) )
     
    17771760                                {
    17781761                                yy_current_state = (int) yy_def[yy_current_state];
    1779                                 if ( yy_current_state >= 888 )
     1762                                if ( yy_current_state >= 876 )
    17801763                                        yy_c = yy_meta[(unsigned int) yy_c];
    17811764                                }
     
    17831766                        ++yy_cp;
    17841767                        }
    1785                 while ( yy_base[yy_current_state] != 2822 );
     1768                while ( yy_base[yy_current_state] != 2782 );
    17861769
    17871770yy_find_action:
     
    18201803/* rule 1 can match eol */
    18211804YY_RULE_SETUP
    1822 #line 141 "lex.ll"
     1805#line 139 "lex.ll"
    18231806{
    18241807        /* " stop highlighting */
     
    18471830/* rule 2 can match eol */
    18481831YY_RULE_SETUP
    1849 #line 164 "lex.ll"
     1832#line 162 "lex.ll"
    18501833;
    18511834        YY_BREAK
     
    18531836case 3:
    18541837YY_RULE_SETUP
    1855 #line 167 "lex.ll"
     1838#line 165 "lex.ll"
    18561839{ BEGIN COMMENT; }
    18571840        YY_BREAK
     
    18591842/* rule 4 can match eol */
    18601843YY_RULE_SETUP
    1861 #line 168 "lex.ll"
     1844#line 166 "lex.ll"
    18621845;
    18631846        YY_BREAK
    18641847case 5:
    18651848YY_RULE_SETUP
    1866 #line 169 "lex.ll"
     1849#line 167 "lex.ll"
    18671850{ BEGIN 0; }
    18681851        YY_BREAK
     
    18711854/* rule 6 can match eol */
    18721855YY_RULE_SETUP
    1873 #line 172 "lex.ll"
     1856#line 170 "lex.ll"
    18741857;
    18751858        YY_BREAK
     
    18771860case 7:
    18781861YY_RULE_SETUP
    1879 #line 175 "lex.ll"
     1862#line 173 "lex.ll"
    18801863{ WHITE_RETURN(' '); }
    18811864        YY_BREAK
    18821865case 8:
    18831866YY_RULE_SETUP
    1884 #line 176 "lex.ll"
     1867#line 174 "lex.ll"
    18851868{ WHITE_RETURN(' '); }
    18861869        YY_BREAK
     
    18881871/* rule 9 can match eol */
    18891872YY_RULE_SETUP
    1890 #line 177 "lex.ll"
     1873#line 175 "lex.ll"
    18911874{ NEWLINE_RETURN(); }
    18921875        YY_BREAK
     
    18941877case 10:
    18951878YY_RULE_SETUP
     1879#line 178 "lex.ll"
     1880{ KEYWORD_RETURN(ALIGNAS); }                    // C11
     1881        YY_BREAK
     1882case 11:
     1883YY_RULE_SETUP
     1884#line 179 "lex.ll"
     1885{ KEYWORD_RETURN(ALIGNOF); }                    // C11
     1886        YY_BREAK
     1887case 12:
     1888YY_RULE_SETUP
    18961889#line 180 "lex.ll"
    1897 { KEYWORD_RETURN(ALIGNAS); }                    // C11
    1898         YY_BREAK
    1899 case 11:
     1890{ KEYWORD_RETURN(ALIGNOF); }                    // GCC
     1891        YY_BREAK
     1892case 13:
    19001893YY_RULE_SETUP
    19011894#line 181 "lex.ll"
    1902 { KEYWORD_RETURN(ALIGNOF); }                    // C11
    1903         YY_BREAK
    1904 case 12:
     1895{ KEYWORD_RETURN(ALIGNOF); }                    // GCC
     1896        YY_BREAK
     1897case 14:
    19051898YY_RULE_SETUP
    19061899#line 182 "lex.ll"
    1907 { KEYWORD_RETURN(ALIGNOF); }                    // GCC
    1908         YY_BREAK
    1909 case 13:
     1900{ KEYWORD_RETURN(ASM); }
     1901        YY_BREAK
     1902case 15:
    19101903YY_RULE_SETUP
    19111904#line 183 "lex.ll"
    1912 { KEYWORD_RETURN(ALIGNOF); }                    // GCC
    1913         YY_BREAK
    1914 case 14:
     1905{ KEYWORD_RETURN(ASM); }                                // GCC
     1906        YY_BREAK
     1907case 16:
    19151908YY_RULE_SETUP
    19161909#line 184 "lex.ll"
    1917 { KEYWORD_RETURN(ASM); }
    1918         YY_BREAK
    1919 case 15:
     1910{ KEYWORD_RETURN(ASM); }                                // GCC
     1911        YY_BREAK
     1912case 17:
    19201913YY_RULE_SETUP
    19211914#line 185 "lex.ll"
    1922 { KEYWORD_RETURN(ASM); }                                // GCC
    1923         YY_BREAK
    1924 case 16:
     1915{ KEYWORD_RETURN(AT); }                                 // CFA
     1916        YY_BREAK
     1917case 18:
    19251918YY_RULE_SETUP
    19261919#line 186 "lex.ll"
    1927 { KEYWORD_RETURN(ASM); }                                // GCC
    1928         YY_BREAK
    1929 case 17:
     1920{ KEYWORD_RETURN(ATOMIC); }                             // C11
     1921        YY_BREAK
     1922case 19:
    19301923YY_RULE_SETUP
    19311924#line 187 "lex.ll"
    1932 { KEYWORD_RETURN(AT); }                                 // CFA
    1933         YY_BREAK
    1934 case 18:
     1925{ KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
     1926        YY_BREAK
     1927case 20:
    19351928YY_RULE_SETUP
    19361929#line 188 "lex.ll"
    1937 { KEYWORD_RETURN(ATOMIC); }                             // C11
    1938         YY_BREAK
    1939 case 19:
     1930{ KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
     1931        YY_BREAK
     1932case 21:
    19401933YY_RULE_SETUP
    19411934#line 189 "lex.ll"
    1942 { KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    1943         YY_BREAK
    1944 case 20:
     1935{ KEYWORD_RETURN(AUTO); }
     1936        YY_BREAK
     1937case 22:
    19451938YY_RULE_SETUP
    19461939#line 190 "lex.ll"
    1947 { KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    1948         YY_BREAK
    1949 case 21:
     1940{ KEYWORD_RETURN(BOOL); }                               // C99
     1941        YY_BREAK
     1942case 23:
    19501943YY_RULE_SETUP
    19511944#line 191 "lex.ll"
    1952 { KEYWORD_RETURN(AUTO); }
    1953         YY_BREAK
    1954 case 22:
     1945{ KEYWORD_RETURN(BREAK); }
     1946        YY_BREAK
     1947case 24:
    19551948YY_RULE_SETUP
    19561949#line 192 "lex.ll"
    1957 { KEYWORD_RETURN(BOOL); }                               // C99
    1958         YY_BREAK
    1959 case 23:
     1950{ KEYWORD_RETURN(CASE); }
     1951        YY_BREAK
     1952case 25:
    19601953YY_RULE_SETUP
    19611954#line 193 "lex.ll"
    1962 { KEYWORD_RETURN(BREAK); }
    1963         YY_BREAK
    1964 case 24:
     1955{ KEYWORD_RETURN(CATCH); }                              // CFA
     1956        YY_BREAK
     1957case 26:
    19651958YY_RULE_SETUP
    19661959#line 194 "lex.ll"
    1967 { KEYWORD_RETURN(CASE); }
    1968         YY_BREAK
    1969 case 25:
     1960{ KEYWORD_RETURN(CATCHRESUME); }                // CFA
     1961        YY_BREAK
     1962case 27:
    19701963YY_RULE_SETUP
    19711964#line 195 "lex.ll"
    1972 { KEYWORD_RETURN(CATCH); }                              // CFA
    1973         YY_BREAK
    1974 case 26:
     1965{ KEYWORD_RETURN(CHAR); }
     1966        YY_BREAK
     1967case 28:
    19751968YY_RULE_SETUP
    19761969#line 196 "lex.ll"
    1977 { KEYWORD_RETURN(CATCHRESUME); }                // CFA
    1978         YY_BREAK
    1979 case 27:
     1970{ KEYWORD_RETURN(CHOOSE); }                             // CFA
     1971        YY_BREAK
     1972case 29:
    19801973YY_RULE_SETUP
    19811974#line 197 "lex.ll"
    1982 { KEYWORD_RETURN(CHAR); }
    1983         YY_BREAK
    1984 case 28:
     1975{ KEYWORD_RETURN(COMPLEX); }                    // C99
     1976        YY_BREAK
     1977case 30:
    19851978YY_RULE_SETUP
    19861979#line 198 "lex.ll"
    1987 { KEYWORD_RETURN(CHOOSE); }                             // CFA
    1988         YY_BREAK
    1989 case 29:
     1980{ KEYWORD_RETURN(COMPLEX); }                    // GCC
     1981        YY_BREAK
     1982case 31:
    19901983YY_RULE_SETUP
    19911984#line 199 "lex.ll"
    1992 { KEYWORD_RETURN(COMPLEX); }                    // C99
    1993         YY_BREAK
    1994 case 30:
     1985{ KEYWORD_RETURN(COMPLEX); }                    // GCC
     1986        YY_BREAK
     1987case 32:
    19951988YY_RULE_SETUP
    19961989#line 200 "lex.ll"
    1997 { KEYWORD_RETURN(COMPLEX); }                    // GCC
    1998         YY_BREAK
    1999 case 31:
     1990{ KEYWORD_RETURN(CONST); }
     1991        YY_BREAK
     1992case 33:
    20001993YY_RULE_SETUP
    20011994#line 201 "lex.ll"
    2002 { KEYWORD_RETURN(COMPLEX); }                    // GCC
    2003         YY_BREAK
    2004 case 32:
     1995{ KEYWORD_RETURN(CONST); }                              // GCC
     1996        YY_BREAK
     1997case 34:
    20051998YY_RULE_SETUP
    20061999#line 202 "lex.ll"
    2007 { KEYWORD_RETURN(CONST); }
    2008         YY_BREAK
    2009 case 33:
     2000{ KEYWORD_RETURN(CONST); }                              // GCC
     2001        YY_BREAK
     2002case 35:
    20102003YY_RULE_SETUP
    20112004#line 203 "lex.ll"
    2012 { KEYWORD_RETURN(CONST); }                              // GCC
    2013         YY_BREAK
    2014 case 34:
     2005{ KEYWORD_RETURN(CONTEXT); }                    // CFA
     2006        YY_BREAK
     2007case 36:
    20152008YY_RULE_SETUP
    20162009#line 204 "lex.ll"
    2017 { KEYWORD_RETURN(CONST); }                              // GCC
    2018         YY_BREAK
    2019 case 35:
     2010{ KEYWORD_RETURN(CONTINUE); }
     2011        YY_BREAK
     2012case 37:
    20202013YY_RULE_SETUP
    20212014#line 205 "lex.ll"
    2022 { KEYWORD_RETURN(CONTINUE); }
    2023         YY_BREAK
    2024 case 36:
     2015{ KEYWORD_RETURN(DEFAULT); }
     2016        YY_BREAK
     2017case 38:
    20252018YY_RULE_SETUP
    20262019#line 206 "lex.ll"
    2027 { KEYWORD_RETURN(DEFAULT); }
    2028         YY_BREAK
    2029 case 37:
     2020{ KEYWORD_RETURN(DISABLE); }                    // CFA
     2021        YY_BREAK
     2022case 39:
    20302023YY_RULE_SETUP
    20312024#line 207 "lex.ll"
    2032 { KEYWORD_RETURN(DISABLE); }                    // CFA
    2033         YY_BREAK
    2034 case 38:
     2025{ KEYWORD_RETURN(DO); }
     2026        YY_BREAK
     2027case 40:
    20352028YY_RULE_SETUP
    20362029#line 208 "lex.ll"
    2037 { KEYWORD_RETURN(DO); }
    2038         YY_BREAK
    2039 case 39:
     2030{ KEYWORD_RETURN(DOUBLE); }
     2031        YY_BREAK
     2032case 41:
    20402033YY_RULE_SETUP
    20412034#line 209 "lex.ll"
    2042 { KEYWORD_RETURN(DOUBLE); }
    2043         YY_BREAK
    2044 case 40:
     2035{ KEYWORD_RETURN(DTYPE); }                              // CFA
     2036        YY_BREAK
     2037case 42:
    20452038YY_RULE_SETUP
    20462039#line 210 "lex.ll"
    2047 { KEYWORD_RETURN(DTYPE); }                              // CFA
    2048         YY_BREAK
    2049 case 41:
     2040{ KEYWORD_RETURN(ELSE); }
     2041        YY_BREAK
     2042case 43:
    20502043YY_RULE_SETUP
    20512044#line 211 "lex.ll"
    2052 { KEYWORD_RETURN(ELSE); }
    2053         YY_BREAK
    2054 case 42:
     2045{ KEYWORD_RETURN(ENABLE); }                             // CFA
     2046        YY_BREAK
     2047case 44:
    20552048YY_RULE_SETUP
    20562049#line 212 "lex.ll"
    2057 { KEYWORD_RETURN(ENABLE); }                             // CFA
    2058         YY_BREAK
    2059 case 43:
     2050{ KEYWORD_RETURN(ENUM); }
     2051        YY_BREAK
     2052case 45:
    20602053YY_RULE_SETUP
    20612054#line 213 "lex.ll"
    2062 { KEYWORD_RETURN(ENUM); }
    2063         YY_BREAK
    2064 case 44:
     2055{ KEYWORD_RETURN(EXTENSION); }                  // GCC
     2056        YY_BREAK
     2057case 46:
    20652058YY_RULE_SETUP
    20662059#line 214 "lex.ll"
    2067 { KEYWORD_RETURN(EXTENSION); }                  // GCC
    2068         YY_BREAK
    2069 case 45:
     2060{ KEYWORD_RETURN(EXTERN); }
     2061        YY_BREAK
     2062case 47:
    20702063YY_RULE_SETUP
    20712064#line 215 "lex.ll"
    2072 { KEYWORD_RETURN(EXTERN); }
    2073         YY_BREAK
    2074 case 46:
     2065{ KEYWORD_RETURN(FALLTHRU); }                   // CFA
     2066        YY_BREAK
     2067case 48:
    20752068YY_RULE_SETUP
    20762069#line 216 "lex.ll"
    2077 { KEYWORD_RETURN(FALLTHRU); }                   // CFA
    2078         YY_BREAK
    2079 case 47:
     2070{ KEYWORD_RETURN(FINALLY); }                    // CFA
     2071        YY_BREAK
     2072case 49:
    20802073YY_RULE_SETUP
    20812074#line 217 "lex.ll"
    2082 { KEYWORD_RETURN(FINALLY); }                    // CFA
    2083         YY_BREAK
    2084 case 48:
     2075{ KEYWORD_RETURN(FLOAT); }
     2076        YY_BREAK
     2077case 50:
    20852078YY_RULE_SETUP
    20862079#line 218 "lex.ll"
    2087 { KEYWORD_RETURN(FLOAT); }
    2088         YY_BREAK
    2089 case 49:
     2080{ KEYWORD_RETURN(FLOAT); }                              // GCC
     2081        YY_BREAK
     2082case 51:
    20902083YY_RULE_SETUP
    20912084#line 219 "lex.ll"
    2092 { KEYWORD_RETURN(FLOAT); }                              // GCC
    2093         YY_BREAK
    2094 case 50:
     2085{ KEYWORD_RETURN(FOR); }
     2086        YY_BREAK
     2087case 52:
    20952088YY_RULE_SETUP
    20962089#line 220 "lex.ll"
    2097 { KEYWORD_RETURN(FOR); }
    2098         YY_BREAK
    2099 case 51:
     2090{ KEYWORD_RETURN(FORALL); }                             // CFA
     2091        YY_BREAK
     2092case 53:
    21002093YY_RULE_SETUP
    21012094#line 221 "lex.ll"
    2102 { KEYWORD_RETURN(FORALL); }                             // CFA
    2103         YY_BREAK
    2104 case 52:
     2095{ KEYWORD_RETURN(FORTRAN); }
     2096        YY_BREAK
     2097case 54:
    21052098YY_RULE_SETUP
    21062099#line 222 "lex.ll"
    2107 { KEYWORD_RETURN(FORTRAN); }
    2108         YY_BREAK
    2109 case 53:
     2100{ KEYWORD_RETURN(FTYPE); }                              // CFA
     2101        YY_BREAK
     2102case 55:
    21102103YY_RULE_SETUP
    21112104#line 223 "lex.ll"
    2112 { KEYWORD_RETURN(FTYPE); }                              // CFA
    2113         YY_BREAK
    2114 case 54:
     2105{ KEYWORD_RETURN(GENERIC); }                    // C11
     2106        YY_BREAK
     2107case 56:
    21152108YY_RULE_SETUP
    21162109#line 224 "lex.ll"
    2117 { KEYWORD_RETURN(GENERIC); }                    // C11
    2118         YY_BREAK
    2119 case 55:
     2110{ KEYWORD_RETURN(GOTO); }
     2111        YY_BREAK
     2112case 57:
    21202113YY_RULE_SETUP
    21212114#line 225 "lex.ll"
    2122 { KEYWORD_RETURN(GOTO); }
    2123         YY_BREAK
    2124 case 56:
     2115{ KEYWORD_RETURN(IF); }
     2116        YY_BREAK
     2117case 58:
    21252118YY_RULE_SETUP
    21262119#line 226 "lex.ll"
    2127 { KEYWORD_RETURN(IF); }
    2128         YY_BREAK
    2129 case 57:
     2120{ KEYWORD_RETURN(IMAGINARY); }                  // C99
     2121        YY_BREAK
     2122case 59:
    21302123YY_RULE_SETUP
    21312124#line 227 "lex.ll"
    2132 { KEYWORD_RETURN(IMAGINARY); }                  // C99
    2133         YY_BREAK
    2134 case 58:
     2125{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
     2126        YY_BREAK
     2127case 60:
    21352128YY_RULE_SETUP
    21362129#line 228 "lex.ll"
    21372130{ KEYWORD_RETURN(IMAGINARY); }                  // GCC
    21382131        YY_BREAK
    2139 case 59:
     2132case 61:
    21402133YY_RULE_SETUP
    21412134#line 229 "lex.ll"
    2142 { KEYWORD_RETURN(IMAGINARY); }                  // GCC
    2143         YY_BREAK
    2144 case 60:
     2135{ KEYWORD_RETURN(INLINE); }                             // C99
     2136        YY_BREAK
     2137case 62:
    21452138YY_RULE_SETUP
    21462139#line 230 "lex.ll"
    2147 { KEYWORD_RETURN(INLINE); }                             // C99
    2148         YY_BREAK
    2149 case 61:
     2140{ KEYWORD_RETURN(INLINE); }                             // GCC
     2141        YY_BREAK
     2142case 63:
    21502143YY_RULE_SETUP
    21512144#line 231 "lex.ll"
    21522145{ KEYWORD_RETURN(INLINE); }                             // GCC
    21532146        YY_BREAK
    2154 case 62:
     2147case 64:
    21552148YY_RULE_SETUP
    21562149#line 232 "lex.ll"
    2157 { KEYWORD_RETURN(INLINE); }                             // GCC
    2158         YY_BREAK
    2159 case 63:
     2150{ KEYWORD_RETURN(INT); }
     2151        YY_BREAK
     2152case 65:
    21602153YY_RULE_SETUP
    21612154#line 233 "lex.ll"
    2162 { KEYWORD_RETURN(INT); }
    2163         YY_BREAK
    2164 case 64:
     2155{ KEYWORD_RETURN(INT); }                                // GCC
     2156        YY_BREAK
     2157case 66:
    21652158YY_RULE_SETUP
    21662159#line 234 "lex.ll"
    2167 { KEYWORD_RETURN(INT); }                                // GCC
    2168         YY_BREAK
    2169 case 65:
     2160{ KEYWORD_RETURN(LABEL); }                              // GCC
     2161        YY_BREAK
     2162case 67:
    21702163YY_RULE_SETUP
    21712164#line 235 "lex.ll"
    2172 { KEYWORD_RETURN(LABEL); }                              // GCC
    2173         YY_BREAK
    2174 case 66:
     2165{ KEYWORD_RETURN(LONG); }
     2166        YY_BREAK
     2167case 68:
    21752168YY_RULE_SETUP
    21762169#line 236 "lex.ll"
    2177 { KEYWORD_RETURN(LONG); }
    2178         YY_BREAK
    2179 case 67:
     2170{ KEYWORD_RETURN(LVALUE); }                             // CFA
     2171        YY_BREAK
     2172case 69:
    21802173YY_RULE_SETUP
    21812174#line 237 "lex.ll"
    2182 { KEYWORD_RETURN(LVALUE); }                             // CFA
    2183         YY_BREAK
    2184 case 68:
     2175{ KEYWORD_RETURN(NORETURN); }                   // C11
     2176        YY_BREAK
     2177case 70:
    21852178YY_RULE_SETUP
    21862179#line 238 "lex.ll"
    2187 { KEYWORD_RETURN(NORETURN); }                   // C11
    2188         YY_BREAK
    2189 case 69:
     2180{ KEYWORD_RETURN(OFFSETOF); }           // GCC
     2181        YY_BREAK
     2182case 71:
    21902183YY_RULE_SETUP
    21912184#line 239 "lex.ll"
    2192 { KEYWORD_RETURN(OFFSETOF); }           // GCC
    2193         YY_BREAK
    2194 case 70:
     2185{ KEYWORD_RETURN(REGISTER); }
     2186        YY_BREAK
     2187case 72:
    21952188YY_RULE_SETUP
    21962189#line 240 "lex.ll"
    2197 { KEYWORD_RETURN(OTYPE); }                              // CFA
    2198         YY_BREAK
    2199 case 71:
     2190{ KEYWORD_RETURN(RESTRICT); }                   // C99
     2191        YY_BREAK
     2192case 73:
    22002193YY_RULE_SETUP
    22012194#line 241 "lex.ll"
    2202 { KEYWORD_RETURN(REGISTER); }
    2203         YY_BREAK
    2204 case 72:
     2195{ KEYWORD_RETURN(RESTRICT); }                   // GCC
     2196        YY_BREAK
     2197case 74:
    22052198YY_RULE_SETUP
    22062199#line 242 "lex.ll"
    2207 { KEYWORD_RETURN(RESTRICT); }                   // C99
    2208         YY_BREAK
    2209 case 73:
     2200{ KEYWORD_RETURN(RESTRICT); }                   // GCC
     2201        YY_BREAK
     2202case 75:
    22102203YY_RULE_SETUP
    22112204#line 243 "lex.ll"
    2212 { KEYWORD_RETURN(RESTRICT); }                   // GCC
    2213         YY_BREAK
    2214 case 74:
     2205{ KEYWORD_RETURN(RETURN); }
     2206        YY_BREAK
     2207case 76:
    22152208YY_RULE_SETUP
    22162209#line 244 "lex.ll"
    2217 { KEYWORD_RETURN(RESTRICT); }                   // GCC
    2218         YY_BREAK
    2219 case 75:
     2210{ KEYWORD_RETURN(SHORT); }
     2211        YY_BREAK
     2212case 77:
    22202213YY_RULE_SETUP
    22212214#line 245 "lex.ll"
    2222 { KEYWORD_RETURN(RETURN); }
    2223         YY_BREAK
    2224 case 76:
     2215{ KEYWORD_RETURN(SIGNED); }
     2216        YY_BREAK
     2217case 78:
    22252218YY_RULE_SETUP
    22262219#line 246 "lex.ll"
    2227 { KEYWORD_RETURN(SHORT); }
    2228         YY_BREAK
    2229 case 77:
     2220{ KEYWORD_RETURN(SIGNED); }                             // GCC
     2221        YY_BREAK
     2222case 79:
    22302223YY_RULE_SETUP
    22312224#line 247 "lex.ll"
    2232 { KEYWORD_RETURN(SIGNED); }
    2233         YY_BREAK
    2234 case 78:
     2225{ KEYWORD_RETURN(SIGNED); }                             // GCC
     2226        YY_BREAK
     2227case 80:
    22352228YY_RULE_SETUP
    22362229#line 248 "lex.ll"
    2237 { KEYWORD_RETURN(SIGNED); }                             // GCC
    2238         YY_BREAK
    2239 case 79:
     2230{ KEYWORD_RETURN(SIZEOF); }
     2231        YY_BREAK
     2232case 81:
    22402233YY_RULE_SETUP
    22412234#line 249 "lex.ll"
    2242 { KEYWORD_RETURN(SIGNED); }                             // GCC
    2243         YY_BREAK
    2244 case 80:
     2235{ KEYWORD_RETURN(STATIC); }
     2236        YY_BREAK
     2237case 82:
    22452238YY_RULE_SETUP
    22462239#line 250 "lex.ll"
    2247 { KEYWORD_RETURN(SIZEOF); }
    2248         YY_BREAK
    2249 case 81:
     2240{ KEYWORD_RETURN(STATICASSERT); }               // C11
     2241        YY_BREAK
     2242case 83:
    22502243YY_RULE_SETUP
    22512244#line 251 "lex.ll"
    2252 { KEYWORD_RETURN(STATIC); }
    2253         YY_BREAK
    2254 case 82:
     2245{ KEYWORD_RETURN(STRUCT); }
     2246        YY_BREAK
     2247case 84:
    22552248YY_RULE_SETUP
    22562249#line 252 "lex.ll"
    2257 { KEYWORD_RETURN(STATICASSERT); }               // C11
    2258         YY_BREAK
    2259 case 83:
     2250{ KEYWORD_RETURN(SWITCH); }
     2251        YY_BREAK
     2252case 85:
    22602253YY_RULE_SETUP
    22612254#line 253 "lex.ll"
    2262 { KEYWORD_RETURN(STRUCT); }
    2263         YY_BREAK
    2264 case 84:
     2255{ KEYWORD_RETURN(THREADLOCAL); }                // C11
     2256        YY_BREAK
     2257case 86:
    22652258YY_RULE_SETUP
    22662259#line 254 "lex.ll"
    2267 { KEYWORD_RETURN(SWITCH); }
    2268         YY_BREAK
    2269 case 85:
     2260{ KEYWORD_RETURN(THROW); }                              // CFA
     2261        YY_BREAK
     2262case 87:
    22702263YY_RULE_SETUP
    22712264#line 255 "lex.ll"
    2272 { KEYWORD_RETURN(THREADLOCAL); }                // C11
    2273         YY_BREAK
    2274 case 86:
     2265{ KEYWORD_RETURN(THROWRESUME); }                // CFA
     2266        YY_BREAK
     2267case 88:
    22752268YY_RULE_SETUP
    22762269#line 256 "lex.ll"
    2277 { KEYWORD_RETURN(THROW); }                              // CFA
    2278         YY_BREAK
    2279 case 87:
     2270{ KEYWORD_RETURN(TRY); }                                // CFA
     2271        YY_BREAK
     2272case 89:
    22802273YY_RULE_SETUP
    22812274#line 257 "lex.ll"
    2282 { KEYWORD_RETURN(THROWRESUME); }                // CFA
    2283         YY_BREAK
    2284 case 88:
     2275{ KEYWORD_RETURN(TYPE); }                               // CFA
     2276        YY_BREAK
     2277case 90:
    22852278YY_RULE_SETUP
    22862279#line 258 "lex.ll"
    2287 { KEYWORD_RETURN(TRAIT); }                              // CFA
    2288         YY_BREAK
    2289 case 89:
     2280{ KEYWORD_RETURN(TYPEDEF); }
     2281        YY_BREAK
     2282case 91:
    22902283YY_RULE_SETUP
    22912284#line 259 "lex.ll"
    2292 { KEYWORD_RETURN(TRY); }                                // CFA
    2293         YY_BREAK
    2294 case 90:
     2285{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2286        YY_BREAK
     2287case 92:
    22952288YY_RULE_SETUP
    22962289#line 260 "lex.ll"
    2297 { KEYWORD_RETURN(TYPEDEF); }
    2298         YY_BREAK
    2299 case 91:
     2290{ KEYWORD_RETURN(TYPEOF); }                             // GCC
     2291        YY_BREAK
     2292case 93:
    23002293YY_RULE_SETUP
    23012294#line 261 "lex.ll"
    23022295{ KEYWORD_RETURN(TYPEOF); }                             // GCC
    23032296        YY_BREAK
    2304 case 92:
     2297case 94:
    23052298YY_RULE_SETUP
    23062299#line 262 "lex.ll"
    2307 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    2308         YY_BREAK
    2309 case 93:
     2300{ KEYWORD_RETURN(UNION); }
     2301        YY_BREAK
     2302case 95:
    23102303YY_RULE_SETUP
    23112304#line 263 "lex.ll"
    2312 { KEYWORD_RETURN(TYPEOF); }                             // GCC
    2313         YY_BREAK
    2314 case 94:
     2305{ KEYWORD_RETURN(UNSIGNED); }
     2306        YY_BREAK
     2307case 96:
    23152308YY_RULE_SETUP
    23162309#line 264 "lex.ll"
    2317 { KEYWORD_RETURN(UNION); }
    2318         YY_BREAK
    2319 case 95:
     2310{ KEYWORD_RETURN(VOID); }
     2311        YY_BREAK
     2312case 97:
    23202313YY_RULE_SETUP
    23212314#line 265 "lex.ll"
    2322 { KEYWORD_RETURN(UNSIGNED); }
    2323         YY_BREAK
    2324 case 96:
     2315{ KEYWORD_RETURN(VOLATILE); }
     2316        YY_BREAK
     2317case 98:
    23252318YY_RULE_SETUP
    23262319#line 266 "lex.ll"
    2327 { KEYWORD_RETURN(VALIST); }                     // GCC
    2328         YY_BREAK
    2329 case 97:
     2320{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2321        YY_BREAK
     2322case 99:
    23302323YY_RULE_SETUP
    23312324#line 267 "lex.ll"
    2332 { KEYWORD_RETURN(VOID); }
    2333         YY_BREAK
    2334 case 98:
     2325{ KEYWORD_RETURN(VOLATILE); }                   // GCC
     2326        YY_BREAK
     2327case 100:
    23352328YY_RULE_SETUP
    23362329#line 268 "lex.ll"
    2337 { KEYWORD_RETURN(VOLATILE); }
    2338         YY_BREAK
    2339 case 99:
    2340 YY_RULE_SETUP
    2341 #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
     2330{ KEYWORD_RETURN(WHILE); }
     2331        YY_BREAK
     2332/* identifier */
    23492333case 101:
    23502334YY_RULE_SETUP
    23512335#line 271 "lex.ll"
    2352 { KEYWORD_RETURN(WHILE); }
    2353         YY_BREAK
    2354 /* identifier */
     2336{ IDENTIFIER_RETURN(); }
     2337        YY_BREAK
    23552338case 102:
     2339YY_RULE_SETUP
     2340#line 272 "lex.ll"
     2341{ ATTRIBUTE_RETURN(); }
     2342        YY_BREAK
     2343case 103:
     2344YY_RULE_SETUP
     2345#line 273 "lex.ll"
     2346{ BEGIN BKQUOTE; }
     2347        YY_BREAK
     2348case 104:
    23562349YY_RULE_SETUP
    23572350#line 274 "lex.ll"
    23582351{ IDENTIFIER_RETURN(); }
    23592352        YY_BREAK
    2360 case 103:
     2353case 105:
    23612354YY_RULE_SETUP
    23622355#line 275 "lex.ll"
    2363 { ATTRIBUTE_RETURN(); }
    2364         YY_BREAK
    2365 case 104:
    2366 YY_RULE_SETUP
    2367 #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
     2356{ BEGIN 0; }
     2357        YY_BREAK
     2358/* numeric constants */
    23752359case 106:
    23762360YY_RULE_SETUP
    23772361#line 278 "lex.ll"
    2378 { BEGIN 0; }
    2379         YY_BREAK
    2380 /* numeric constants */
     2362{ NUMERIC_RETURN(ZERO); }                               // CFA
     2363        YY_BREAK
    23812364case 107:
    23822365YY_RULE_SETUP
     2366#line 279 "lex.ll"
     2367{ NUMERIC_RETURN(ONE); }                                // CFA
     2368        YY_BREAK
     2369case 108:
     2370YY_RULE_SETUP
     2371#line 280 "lex.ll"
     2372{ NUMERIC_RETURN(INTEGERconstant); }
     2373        YY_BREAK
     2374case 109:
     2375YY_RULE_SETUP
    23832376#line 281 "lex.ll"
    2384 { NUMERIC_RETURN(ZERO); }                               // CFA
    2385         YY_BREAK
    2386 case 108:
     2377{ NUMERIC_RETURN(INTEGERconstant); }
     2378        YY_BREAK
     2379case 110:
    23872380YY_RULE_SETUP
    23882381#line 282 "lex.ll"
    2389 { NUMERIC_RETURN(ONE); }                                // CFA
    2390         YY_BREAK
    2391 case 109:
     2382{ NUMERIC_RETURN(INTEGERconstant); }
     2383        YY_BREAK
     2384case 111:
    23922385YY_RULE_SETUP
    23932386#line 283 "lex.ll"
    2394 { NUMERIC_RETURN(INTEGERconstant); }
    2395         YY_BREAK
    2396 case 110:
     2387{ NUMERIC_RETURN(FLOATINGconstant); }
     2388        YY_BREAK
     2389case 112:
    23972390YY_RULE_SETUP
    23982391#line 284 "lex.ll"
    2399 { NUMERIC_RETURN(INTEGERconstant); }
    2400         YY_BREAK
    2401 case 111:
    2402 YY_RULE_SETUP
    2403 #line 285 "lex.ll"
    2404 { NUMERIC_RETURN(INTEGERconstant); }
    2405         YY_BREAK
    2406 case 112:
    2407 YY_RULE_SETUP
    2408 #line 286 "lex.ll"
    24092392{ NUMERIC_RETURN(FLOATINGconstant); }
    24102393        YY_BREAK
     2394/* character constant, allows empty value */
    24112395case 113:
    24122396YY_RULE_SETUP
    24132397#line 287 "lex.ll"
    2414 { NUMERIC_RETURN(FLOATINGconstant); }
    2415         YY_BREAK
    2416 /* character constant, allows empty value */
     2398{ BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
     2399        YY_BREAK
    24172400case 114:
    24182401YY_RULE_SETUP
    2419 #line 290 "lex.ll"
    2420 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
     2402#line 288 "lex.ll"
     2403{ *strtext += std::string( yytext ); }
    24212404        YY_BREAK
    24222405case 115:
    2423 YY_RULE_SETUP
    2424 #line 291 "lex.ll"
    2425 { *strtext += std::string( yytext ); }
    2426         YY_BREAK
    2427 case 116:
    2428 /* rule 116 can match eol */
    2429 YY_RULE_SETUP
    2430 #line 292 "lex.ll"
     2406/* rule 115 can match eol */
     2407YY_RULE_SETUP
     2408#line 289 "lex.ll"
    24312409{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
    24322410        YY_BREAK
    24332411/* ' stop highlighting */
    24342412/* string constant */
     2413case 116:
     2414YY_RULE_SETUP
     2415#line 293 "lex.ll"
     2416{ BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
     2417        YY_BREAK
    24352418case 117:
    24362419YY_RULE_SETUP
    2437 #line 296 "lex.ll"
    2438 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
     2420#line 294 "lex.ll"
     2421{ *strtext += std::string( yytext ); }
    24392422        YY_BREAK
    24402423case 118:
    2441 YY_RULE_SETUP
    2442 #line 297 "lex.ll"
    2443 { *strtext += std::string( yytext ); }
    2444         YY_BREAK
    2445 case 119:
    2446 /* rule 119 can match eol */
    2447 YY_RULE_SETUP
    2448 #line 298 "lex.ll"
     2424/* rule 118 can match eol */
     2425YY_RULE_SETUP
     2426#line 295 "lex.ll"
    24492427{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
    24502428        YY_BREAK
    24512429/* " stop highlighting */
    24522430/* common character/string constant */
     2431case 119:
     2432YY_RULE_SETUP
     2433#line 299 "lex.ll"
     2434{ rm_underscore(); *strtext += std::string( yytext ); }
     2435        YY_BREAK
    24532436case 120:
    2454 YY_RULE_SETUP
    2455 #line 302 "lex.ll"
    2456 { rm_underscore(); *strtext += std::string( yytext ); }
     2437/* rule 120 can match eol */
     2438YY_RULE_SETUP
     2439#line 300 "lex.ll"
     2440{}                                              // continuation (ALSO HANDLED BY CPP)
    24572441        YY_BREAK
    24582442case 121:
    2459 /* rule 121 can match eol */
    2460 YY_RULE_SETUP
    2461 #line 303 "lex.ll"
    2462 {}                                              // continuation (ALSO HANDLED BY CPP)
    2463         YY_BREAK
     2443YY_RULE_SETUP
     2444#line 301 "lex.ll"
     2445{ *strtext += std::string( yytext ); } // unknown escape character
     2446        YY_BREAK
     2447/* punctuation */
    24642448case 122:
    24652449YY_RULE_SETUP
    24662450#line 304 "lex.ll"
    2467 { *strtext += std::string( yytext ); } // unknown escape character
    2468         YY_BREAK
    2469 /* punctuation */
     2451{ ASCIIOP_RETURN(); }
     2452        YY_BREAK
    24702453case 123:
     2454YY_RULE_SETUP
     2455#line 305 "lex.ll"
     2456{ ASCIIOP_RETURN(); }
     2457        YY_BREAK
     2458case 124:
     2459YY_RULE_SETUP
     2460#line 306 "lex.ll"
     2461{ ASCIIOP_RETURN(); }
     2462        YY_BREAK
     2463case 125:
    24712464YY_RULE_SETUP
    24722465#line 307 "lex.ll"
    24732466{ ASCIIOP_RETURN(); }
    24742467        YY_BREAK
    2475 case 124:
     2468case 126:
    24762469YY_RULE_SETUP
    24772470#line 308 "lex.ll"
    24782471{ ASCIIOP_RETURN(); }
    24792472        YY_BREAK
    2480 case 125:
     2473case 127:
    24812474YY_RULE_SETUP
    24822475#line 309 "lex.ll"
    24832476{ ASCIIOP_RETURN(); }
    24842477        YY_BREAK
    2485 case 126:
     2478case 128:
    24862479YY_RULE_SETUP
    24872480#line 310 "lex.ll"
    2488 { ASCIIOP_RETURN(); }
    2489         YY_BREAK
    2490 case 127:
     2481{ ASCIIOP_RETURN(); }                                   // also operator
     2482        YY_BREAK
     2483case 129:
    24912484YY_RULE_SETUP
    24922485#line 311 "lex.ll"
    24932486{ ASCIIOP_RETURN(); }
    24942487        YY_BREAK
    2495 case 128:
     2488case 130:
    24962489YY_RULE_SETUP
    24972490#line 312 "lex.ll"
    24982491{ ASCIIOP_RETURN(); }
    24992492        YY_BREAK
    2500 case 129:
     2493case 131:
    25012494YY_RULE_SETUP
    25022495#line 313 "lex.ll"
    25032496{ ASCIIOP_RETURN(); }                                   // also operator
    25042497        YY_BREAK
    2505 case 130:
     2498case 132:
    25062499YY_RULE_SETUP
    25072500#line 314 "lex.ll"
     2501{ NAMEDOP_RETURN(ELLIPSIS); }
     2502        YY_BREAK
     2503/* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
     2504case 133:
     2505YY_RULE_SETUP
     2506#line 317 "lex.ll"
     2507{ RETURN_VAL('['); }
     2508        YY_BREAK
     2509case 134:
     2510YY_RULE_SETUP
     2511#line 318 "lex.ll"
     2512{ RETURN_VAL(']'); }
     2513        YY_BREAK
     2514case 135:
     2515YY_RULE_SETUP
     2516#line 319 "lex.ll"
     2517{ RETURN_VAL('{'); }
     2518        YY_BREAK
     2519case 136:
     2520YY_RULE_SETUP
     2521#line 320 "lex.ll"
     2522{ RETURN_VAL('}'); }
     2523        YY_BREAK
     2524/* operators */
     2525case 137:
     2526YY_RULE_SETUP
     2527#line 323 "lex.ll"
    25082528{ ASCIIOP_RETURN(); }
    25092529        YY_BREAK
    2510 case 131:
    2511 YY_RULE_SETUP
    2512 #line 315 "lex.ll"
     2530case 138:
     2531YY_RULE_SETUP
     2532#line 324 "lex.ll"
    25132533{ ASCIIOP_RETURN(); }
    25142534        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"
    2523 { NAMEDOP_RETURN(ELLIPSIS); }
    2524         YY_BREAK
    2525 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
    2526 case 134:
    2527 YY_RULE_SETUP
    2528 #line 320 "lex.ll"
    2529 { RETURN_VAL('['); }
    2530         YY_BREAK
    2531 case 135:
    2532 YY_RULE_SETUP
    2533 #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"
    2544 { RETURN_VAL('}'); }
    2545         YY_BREAK
    2546 /* operators */
    2547 case 138:
     2535case 139:
     2536YY_RULE_SETUP
     2537#line 325 "lex.ll"
     2538{ ASCIIOP_RETURN(); }
     2539        YY_BREAK
     2540case 140:
    25482541YY_RULE_SETUP
    25492542#line 326 "lex.ll"
    25502543{ ASCIIOP_RETURN(); }
    25512544        YY_BREAK
    2552 case 139:
     2545case 141:
    25532546YY_RULE_SETUP
    25542547#line 327 "lex.ll"
    25552548{ ASCIIOP_RETURN(); }
    25562549        YY_BREAK
    2557 case 140:
     2550case 142:
    25582551YY_RULE_SETUP
    25592552#line 328 "lex.ll"
    25602553{ ASCIIOP_RETURN(); }
    25612554        YY_BREAK
    2562 case 141:
     2555case 143:
    25632556YY_RULE_SETUP
    25642557#line 329 "lex.ll"
    25652558{ ASCIIOP_RETURN(); }
    25662559        YY_BREAK
    2567 case 142:
     2560case 144:
    25682561YY_RULE_SETUP
    25692562#line 330 "lex.ll"
    25702563{ ASCIIOP_RETURN(); }
    25712564        YY_BREAK
    2572 case 143:
     2565case 145:
    25732566YY_RULE_SETUP
    25742567#line 331 "lex.ll"
    25752568{ ASCIIOP_RETURN(); }
    25762569        YY_BREAK
    2577 case 144:
     2570case 146:
    25782571YY_RULE_SETUP
    25792572#line 332 "lex.ll"
    25802573{ ASCIIOP_RETURN(); }
    25812574        YY_BREAK
    2582 case 145:
     2575case 147:
    25832576YY_RULE_SETUP
    25842577#line 333 "lex.ll"
    25852578{ ASCIIOP_RETURN(); }
    25862579        YY_BREAK
    2587 case 146:
     2580case 148:
    25882581YY_RULE_SETUP
    25892582#line 334 "lex.ll"
    25902583{ ASCIIOP_RETURN(); }
    25912584        YY_BREAK
    2592 case 147:
     2585case 149:
    25932586YY_RULE_SETUP
    25942587#line 335 "lex.ll"
    25952588{ ASCIIOP_RETURN(); }
    25962589        YY_BREAK
    2597 case 148:
     2590case 150:
    25982591YY_RULE_SETUP
    25992592#line 336 "lex.ll"
    26002593{ ASCIIOP_RETURN(); }
    26012594        YY_BREAK
    2602 case 149:
    2603 YY_RULE_SETUP
    2604 #line 337 "lex.ll"
    2605 { ASCIIOP_RETURN(); }
    2606         YY_BREAK
    2607 case 150:
     2595case 151:
    26082596YY_RULE_SETUP
    26092597#line 338 "lex.ll"
    2610 { ASCIIOP_RETURN(); }
    2611         YY_BREAK
    2612 case 151:
     2598{ NAMEDOP_RETURN(ICR); }
     2599        YY_BREAK
     2600case 152:
    26132601YY_RULE_SETUP
    26142602#line 339 "lex.ll"
    2615 { ASCIIOP_RETURN(); }
    2616         YY_BREAK
    2617 case 152:
     2603{ NAMEDOP_RETURN(DECR); }
     2604        YY_BREAK
     2605case 153:
     2606YY_RULE_SETUP
     2607#line 340 "lex.ll"
     2608{ NAMEDOP_RETURN(EQ); }
     2609        YY_BREAK
     2610case 154:
    26182611YY_RULE_SETUP
    26192612#line 341 "lex.ll"
    2620 { NAMEDOP_RETURN(ICR); }
    2621         YY_BREAK
    2622 case 153:
     2613{ NAMEDOP_RETURN(NE); }
     2614        YY_BREAK
     2615case 155:
    26232616YY_RULE_SETUP
    26242617#line 342 "lex.ll"
    2625 { NAMEDOP_RETURN(DECR); }
    2626         YY_BREAK
    2627 case 154:
     2618{ NAMEDOP_RETURN(LS); }
     2619        YY_BREAK
     2620case 156:
    26282621YY_RULE_SETUP
    26292622#line 343 "lex.ll"
    2630 { NAMEDOP_RETURN(EQ); }
    2631         YY_BREAK
    2632 case 155:
     2623{ NAMEDOP_RETURN(RS); }
     2624        YY_BREAK
     2625case 157:
    26332626YY_RULE_SETUP
    26342627#line 344 "lex.ll"
    2635 { NAMEDOP_RETURN(NE); }
    2636         YY_BREAK
    2637 case 156:
     2628{ NAMEDOP_RETURN(LE); }
     2629        YY_BREAK
     2630case 158:
    26382631YY_RULE_SETUP
    26392632#line 345 "lex.ll"
    2640 { NAMEDOP_RETURN(LS); }
    2641         YY_BREAK
    2642 case 157:
     2633{ NAMEDOP_RETURN(GE); }
     2634        YY_BREAK
     2635case 159:
    26432636YY_RULE_SETUP
    26442637#line 346 "lex.ll"
    2645 { NAMEDOP_RETURN(RS); }
    2646         YY_BREAK
    2647 case 158:
     2638{ NAMEDOP_RETURN(ANDAND); }
     2639        YY_BREAK
     2640case 160:
    26482641YY_RULE_SETUP
    26492642#line 347 "lex.ll"
    2650 { NAMEDOP_RETURN(LE); }
    2651         YY_BREAK
    2652 case 159:
     2643{ NAMEDOP_RETURN(OROR); }
     2644        YY_BREAK
     2645case 161:
    26532646YY_RULE_SETUP
    26542647#line 348 "lex.ll"
    2655 { NAMEDOP_RETURN(GE); }
    2656         YY_BREAK
    2657 case 160:
     2648{ NAMEDOP_RETURN(ARROW); }
     2649        YY_BREAK
     2650case 162:
    26582651YY_RULE_SETUP
    26592652#line 349 "lex.ll"
    2660 { NAMEDOP_RETURN(ANDAND); }
    2661         YY_BREAK
    2662 case 161:
     2653{ NAMEDOP_RETURN(PLUSassign); }
     2654        YY_BREAK
     2655case 163:
    26632656YY_RULE_SETUP
    26642657#line 350 "lex.ll"
    2665 { NAMEDOP_RETURN(OROR); }
    2666         YY_BREAK
    2667 case 162:
     2658{ NAMEDOP_RETURN(MINUSassign); }
     2659        YY_BREAK
     2660case 164:
    26682661YY_RULE_SETUP
    26692662#line 351 "lex.ll"
    2670 { NAMEDOP_RETURN(ARROW); }
    2671         YY_BREAK
    2672 case 163:
     2663{ NAMEDOP_RETURN(MULTassign); }
     2664        YY_BREAK
     2665case 165:
    26732666YY_RULE_SETUP
    26742667#line 352 "lex.ll"
    2675 { NAMEDOP_RETURN(PLUSassign); }
    2676         YY_BREAK
    2677 case 164:
     2668{ NAMEDOP_RETURN(DIVassign); }
     2669        YY_BREAK
     2670case 166:
    26782671YY_RULE_SETUP
    26792672#line 353 "lex.ll"
    2680 { NAMEDOP_RETURN(MINUSassign); }
    2681         YY_BREAK
    2682 case 165:
     2673{ NAMEDOP_RETURN(MODassign); }
     2674        YY_BREAK
     2675case 167:
    26832676YY_RULE_SETUP
    26842677#line 354 "lex.ll"
    2685 { NAMEDOP_RETURN(MULTassign); }
    2686         YY_BREAK
    2687 case 166:
     2678{ NAMEDOP_RETURN(ANDassign); }
     2679        YY_BREAK
     2680case 168:
    26882681YY_RULE_SETUP
    26892682#line 355 "lex.ll"
    2690 { NAMEDOP_RETURN(DIVassign); }
    2691         YY_BREAK
    2692 case 167:
     2683{ NAMEDOP_RETURN(ORassign); }
     2684        YY_BREAK
     2685case 169:
    26932686YY_RULE_SETUP
    26942687#line 356 "lex.ll"
    2695 { NAMEDOP_RETURN(MODassign); }
    2696         YY_BREAK
    2697 case 168:
     2688{ NAMEDOP_RETURN(ERassign); }
     2689        YY_BREAK
     2690case 170:
    26982691YY_RULE_SETUP
    26992692#line 357 "lex.ll"
    2700 { NAMEDOP_RETURN(ANDassign); }
    2701         YY_BREAK
    2702 case 169:
     2693{ NAMEDOP_RETURN(LSassign); }
     2694        YY_BREAK
     2695case 171:
    27032696YY_RULE_SETUP
    27042697#line 358 "lex.ll"
    2705 { NAMEDOP_RETURN(ORassign); }
    2706         YY_BREAK
    2707 case 170:
    2708 YY_RULE_SETUP
    2709 #line 359 "lex.ll"
    2710 { NAMEDOP_RETURN(ERassign); }
    2711         YY_BREAK
    2712 case 171:
     2698{ NAMEDOP_RETURN(RSassign); }
     2699        YY_BREAK
     2700case 172:
    27132701YY_RULE_SETUP
    27142702#line 360 "lex.ll"
    2715 { NAMEDOP_RETURN(LSassign); }
    2716         YY_BREAK
    2717 case 172:
    2718 YY_RULE_SETUP
    2719 #line 361 "lex.ll"
    2720 { NAMEDOP_RETURN(RSassign); }
    2721         YY_BREAK
     2703{ NAMEDOP_RETURN(ATassign); }
     2704        YY_BREAK
     2705/* CFA, operator identifier */
    27222706case 173:
    27232707YY_RULE_SETUP
    27242708#line 363 "lex.ll"
    2725 { NAMEDOP_RETURN(ATassign); }
    2726         YY_BREAK
    2727 /* CFA, operator identifier */
     2709{ IDENTIFIER_RETURN(); }                                // unary
     2710        YY_BREAK
    27282711case 174:
    27292712YY_RULE_SETUP
     2713#line 364 "lex.ll"
     2714{ IDENTIFIER_RETURN(); }
     2715        YY_BREAK
     2716case 175:
     2717YY_RULE_SETUP
     2718#line 365 "lex.ll"
     2719{ IDENTIFIER_RETURN(); }
     2720        YY_BREAK
     2721case 176:
     2722YY_RULE_SETUP
    27302723#line 366 "lex.ll"
    2731 { IDENTIFIER_RETURN(); }                                // unary
    2732         YY_BREAK
    2733 case 175:
    2734 YY_RULE_SETUP
    2735 #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"
    27462724{ IDENTIFIER_RETURN(); }                // binary
    27472725        YY_BREAK
     
    27722750          an argument list.
    27732751        */
    2774 case 178:
    2775 YY_RULE_SETUP
    2776 #line 396 "lex.ll"
     2752case 177:
     2753YY_RULE_SETUP
     2754#line 393 "lex.ll"
    27772755{
    27782756        // 1 or 2 character unary operator ?
     
    27872765        YY_BREAK
    27882766/* unknown characters */
     2767case 178:
     2768YY_RULE_SETUP
     2769#line 405 "lex.ll"
     2770{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
     2771        YY_BREAK
    27892772case 179:
    27902773YY_RULE_SETUP
    2791 #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"
     2774#line 407 "lex.ll"
    27972775ECHO;
    27982776        YY_BREAK
    2799 #line 2800 "Parser/lex.cc"
     2777#line 2778 "Parser/lex.cc"
    28002778case YY_STATE_EOF(INITIAL):
    28012779case YY_STATE_EOF(COMMENT):
     
    30943072                        {
    30953073                        yy_current_state = (int) yy_def[yy_current_state];
    3096                         if ( yy_current_state >= 888 )
     3074                        if ( yy_current_state >= 876 )
    30973075                                yy_c = yy_meta[(unsigned int) yy_c];
    30983076                        }
     
    31223100                {
    31233101                yy_current_state = (int) yy_def[yy_current_state];
    3124                 if ( yy_current_state >= 888 )
     3102                if ( yy_current_state >= 876 )
    31253103                        yy_c = yy_meta[(unsigned int) yy_c];
    31263104                }
    31273105        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
    3128         yy_is_jam = (yy_current_state == 887);
     3106        yy_is_jam = (yy_current_state == 875);
    31293107
    31303108        return yy_is_jam ? 0 : yy_current_state;
     
    37723750#define YYTABLES_NAME "yytables"
    37733751
    3774 #line 410 "lex.ll"
     3752#line 407 "lex.ll"
    37753753
    37763754
  • src/Parser/lex.h

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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 : Tue Feb  2 15:06:54 2016
     13 * Update Count     : 426
    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
     
    139137%%
    140138                                   /* line directives */
    141 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
     139^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["][^\n]*"\n" {
    142140        /* " stop highlighting */
    143141        char *end_num;
     
    203201__const                 { KEYWORD_RETURN(CONST); }                              // GCC
    204202__const__               { KEYWORD_RETURN(CONST); }                              // GCC
     203context                 { KEYWORD_RETURN(CONTEXT); }                    // CFA
    205204continue                { KEYWORD_RETURN(CONTINUE); }
    206205default                 { KEYWORD_RETURN(DEFAULT); }
     
    238237_Noreturn               { KEYWORD_RETURN(NORETURN); }                   // C11
    239238__builtin_offsetof { KEYWORD_RETURN(OFFSETOF); }                // GCC
    240 otype                   { KEYWORD_RETURN(OTYPE); }                              // CFA
    241239register                { KEYWORD_RETURN(REGISTER); }
    242240restrict                { KEYWORD_RETURN(RESTRICT); }                   // C99
     
    256254throw                   { KEYWORD_RETURN(THROW); }                              // CFA
    257255throwResume             { KEYWORD_RETURN(THROWRESUME); }                // CFA
    258 trait                   { KEYWORD_RETURN(TRAIT); }                              // CFA
    259256try                             { KEYWORD_RETURN(TRY); }                                // CFA
     257type                    { KEYWORD_RETURN(TYPE); }                               // CFA
    260258typedef                 { KEYWORD_RETURN(TYPEDEF); }
    261259typeof                  { KEYWORD_RETURN(TYPEOF); }                             // GCC
     
    264262union                   { KEYWORD_RETURN(UNION); }
    265263unsigned                { KEYWORD_RETURN(UNSIGNED); }
    266 __builtin_va_list { KEYWORD_RETURN(VALIST); }                   // GCC
    267264void                    { KEYWORD_RETURN(VOID); }
    268265volatile                { KEYWORD_RETURN(VOLATILE); }
  • src/Parser/parser.cc

    r0f9e4403 rc5833e8  
    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.  */
     
    139138     SIGNED = 277,
    140139     UNSIGNED = 278,
    141      VALIST = 279,
    142      BOOL = 280,
    143      COMPLEX = 281,
    144      IMAGINARY = 282,
    145      TYPEOF = 283,
    146      LABEL = 284,
    147      ENUM = 285,
    148      STRUCT = 286,
    149      UNION = 287,
    150      OTYPE = 288,
    151      FTYPE = 289,
    152      DTYPE = 290,
    153      TRAIT = 291,
    154      SIZEOF = 292,
    155      OFFSETOF = 293,
    156      ATTRIBUTE = 294,
    157      EXTENSION = 295,
    158      IF = 296,
    159      ELSE = 297,
    160      SWITCH = 298,
    161      CASE = 299,
    162      DEFAULT = 300,
    163      DO = 301,
    164      WHILE = 302,
    165      FOR = 303,
    166      BREAK = 304,
    167      CONTINUE = 305,
    168      GOTO = 306,
    169      RETURN = 307,
    170      CHOOSE = 308,
    171      DISABLE = 309,
    172      ENABLE = 310,
    173      FALLTHRU = 311,
    174      TRY = 312,
    175      CATCH = 313,
    176      CATCHRESUME = 314,
    177      FINALLY = 315,
    178      THROW = 316,
    179      THROWRESUME = 317,
    180      AT = 318,
    181      ASM = 319,
    182      ALIGNAS = 320,
    183      ALIGNOF = 321,
    184      ATOMIC = 322,
    185      GENERIC = 323,
    186      NORETURN = 324,
    187      STATICASSERT = 325,
    188      THREADLOCAL = 326,
    189      IDENTIFIER = 327,
    190      QUOTED_IDENTIFIER = 328,
    191      TYPEDEFname = 329,
    192      TYPEGENname = 330,
    193      ATTR_IDENTIFIER = 331,
    194      ATTR_TYPEDEFname = 332,
    195      ATTR_TYPEGENname = 333,
    196      INTEGERconstant = 334,
    197      FLOATINGconstant = 335,
    198      CHARACTERconstant = 336,
    199      STRINGliteral = 337,
    200      ZERO = 338,
    201      ONE = 339,
    202      ARROW = 340,
    203      ICR = 341,
    204      DECR = 342,
    205      LS = 343,
    206      RS = 344,
    207      LE = 345,
    208      GE = 346,
    209      EQ = 347,
    210      NE = 348,
    211      ANDAND = 349,
    212      OROR = 350,
    213      ELLIPSIS = 351,
    214      MULTassign = 352,
    215      DIVassign = 353,
    216      MODassign = 354,
    217      PLUSassign = 355,
    218      MINUSassign = 356,
    219      LSassign = 357,
    220      RSassign = 358,
    221      ANDassign = 359,
    222      ERassign = 360,
    223      ORassign = 361,
    224      ATassign = 362,
    225      THEN = 363
     140     BOOL = 279,
     141     COMPLEX = 280,
     142     IMAGINARY = 281,
     143     TYPEOF = 282,
     144     LABEL = 283,
     145     ENUM = 284,
     146     STRUCT = 285,
     147     UNION = 286,
     148     TYPE = 287,
     149     FTYPE = 288,
     150     DTYPE = 289,
     151     CONTEXT = 290,
     152     SIZEOF = 291,
     153     OFFSETOF = 292,
     154     ATTRIBUTE = 293,
     155     EXTENSION = 294,
     156     IF = 295,
     157     ELSE = 296,
     158     SWITCH = 297,
     159     CASE = 298,
     160     DEFAULT = 299,
     161     DO = 300,
     162     WHILE = 301,
     163     FOR = 302,
     164     BREAK = 303,
     165     CONTINUE = 304,
     166     GOTO = 305,
     167     RETURN = 306,
     168     CHOOSE = 307,
     169     DISABLE = 308,
     170     ENABLE = 309,
     171     FALLTHRU = 310,
     172     TRY = 311,
     173     CATCH = 312,
     174     CATCHRESUME = 313,
     175     FINALLY = 314,
     176     THROW = 315,
     177     THROWRESUME = 316,
     178     AT = 317,
     179     ASM = 318,
     180     ALIGNAS = 319,
     181     ALIGNOF = 320,
     182     ATOMIC = 321,
     183     GENERIC = 322,
     184     NORETURN = 323,
     185     STATICASSERT = 324,
     186     THREADLOCAL = 325,
     187     IDENTIFIER = 326,
     188     QUOTED_IDENTIFIER = 327,
     189     TYPEDEFname = 328,
     190     TYPEGENname = 329,
     191     ATTR_IDENTIFIER = 330,
     192     ATTR_TYPEDEFname = 331,
     193     ATTR_TYPEGENname = 332,
     194     INTEGERconstant = 333,
     195     FLOATINGconstant = 334,
     196     CHARACTERconstant = 335,
     197     STRINGliteral = 336,
     198     ZERO = 337,
     199     ONE = 338,
     200     ARROW = 339,
     201     ICR = 340,
     202     DECR = 341,
     203     LS = 342,
     204     RS = 343,
     205     LE = 344,
     206     GE = 345,
     207     EQ = 346,
     208     NE = 347,
     209     ANDAND = 348,
     210     OROR = 349,
     211     ELLIPSIS = 350,
     212     MULTassign = 351,
     213     DIVassign = 352,
     214     MODassign = 353,
     215     PLUSassign = 354,
     216     MINUSassign = 355,
     217     LSassign = 356,
     218     RSassign = 357,
     219     ANDassign = 358,
     220     ERassign = 359,
     221     ORassign = 360,
     222     ATassign = 361,
     223     THEN = 362
    226224   };
    227225#endif
     
    248246#define SIGNED 277
    249247#define UNSIGNED 278
    250 #define VALIST 279
    251 #define BOOL 280
    252 #define COMPLEX 281
    253 #define IMAGINARY 282
    254 #define TYPEOF 283
    255 #define LABEL 284
    256 #define ENUM 285
    257 #define STRUCT 286
    258 #define UNION 287
    259 #define OTYPE 288
    260 #define FTYPE 289
    261 #define DTYPE 290
    262 #define TRAIT 291
    263 #define SIZEOF 292
    264 #define OFFSETOF 293
    265 #define ATTRIBUTE 294
    266 #define EXTENSION 295
    267 #define IF 296
    268 #define ELSE 297
    269 #define SWITCH 298
    270 #define CASE 299
    271 #define DEFAULT 300
    272 #define DO 301
    273 #define WHILE 302
    274 #define FOR 303
    275 #define BREAK 304
    276 #define CONTINUE 305
    277 #define GOTO 306
    278 #define RETURN 307
    279 #define CHOOSE 308
    280 #define DISABLE 309
    281 #define ENABLE 310
    282 #define FALLTHRU 311
    283 #define TRY 312
    284 #define CATCH 313
    285 #define CATCHRESUME 314
    286 #define FINALLY 315
    287 #define THROW 316
    288 #define THROWRESUME 317
    289 #define AT 318
    290 #define ASM 319
    291 #define ALIGNAS 320
    292 #define ALIGNOF 321
    293 #define ATOMIC 322
    294 #define GENERIC 323
    295 #define NORETURN 324
    296 #define STATICASSERT 325
    297 #define THREADLOCAL 326
    298 #define IDENTIFIER 327
    299 #define QUOTED_IDENTIFIER 328
    300 #define TYPEDEFname 329
    301 #define TYPEGENname 330
    302 #define ATTR_IDENTIFIER 331
    303 #define ATTR_TYPEDEFname 332
    304 #define ATTR_TYPEGENname 333
    305 #define INTEGERconstant 334
    306 #define FLOATINGconstant 335
    307 #define CHARACTERconstant 336
    308 #define STRINGliteral 337
    309 #define ZERO 338
    310 #define ONE 339
    311 #define ARROW 340
    312 #define ICR 341
    313 #define DECR 342
    314 #define LS 343
    315 #define RS 344
    316 #define LE 345
    317 #define GE 346
    318 #define EQ 347
    319 #define NE 348
    320 #define ANDAND 349
    321 #define OROR 350
    322 #define ELLIPSIS 351
    323 #define MULTassign 352
    324 #define DIVassign 353
    325 #define MODassign 354
    326 #define PLUSassign 355
    327 #define MINUSassign 356
    328 #define LSassign 357
    329 #define RSassign 358
    330 #define ANDassign 359
    331 #define ERassign 360
    332 #define ORassign 361
    333 #define ATassign 362
    334 #define THEN 363
     248#define BOOL 279
     249#define COMPLEX 280
     250#define IMAGINARY 281
     251#define TYPEOF 282
     252#define LABEL 283
     253#define ENUM 284
     254#define STRUCT 285
     255#define UNION 286
     256#define TYPE 287
     257#define FTYPE 288
     258#define DTYPE 289
     259#define CONTEXT 290
     260#define SIZEOF 291
     261#define OFFSETOF 292
     262#define ATTRIBUTE 293
     263#define EXTENSION 294
     264#define IF 295
     265#define ELSE 296
     266#define SWITCH 297
     267#define CASE 298
     268#define DEFAULT 299
     269#define DO 300
     270#define WHILE 301
     271#define FOR 302
     272#define BREAK 303
     273#define CONTINUE 304
     274#define GOTO 305
     275#define RETURN 306
     276#define CHOOSE 307
     277#define DISABLE 308
     278#define ENABLE 309
     279#define FALLTHRU 310
     280#define TRY 311
     281#define CATCH 312
     282#define CATCHRESUME 313
     283#define FINALLY 314
     284#define THROW 315
     285#define THROWRESUME 316
     286#define AT 317
     287#define ASM 318
     288#define ALIGNAS 319
     289#define ALIGNOF 320
     290#define ATOMIC 321
     291#define GENERIC 322
     292#define NORETURN 323
     293#define STATICASSERT 324
     294#define THREADLOCAL 325
     295#define IDENTIFIER 326
     296#define QUOTED_IDENTIFIER 327
     297#define TYPEDEFname 328
     298#define TYPEGENname 329
     299#define ATTR_IDENTIFIER 330
     300#define ATTR_TYPEDEFname 331
     301#define ATTR_TYPEGENname 332
     302#define INTEGERconstant 333
     303#define FLOATINGconstant 334
     304#define CHARACTERconstant 335
     305#define STRINGliteral 336
     306#define ZERO 337
     307#define ONE 338
     308#define ARROW 339
     309#define ICR 340
     310#define DECR 341
     311#define LS 342
     312#define RS 343
     313#define LE 344
     314#define GE 345
     315#define EQ 346
     316#define NE 347
     317#define ANDAND 348
     318#define OROR 349
     319#define ELLIPSIS 350
     320#define MULTassign 351
     321#define DIVassign 352
     322#define MODassign 353
     323#define PLUSassign 354
     324#define MINUSassign 355
     325#define LSassign 356
     326#define RSassign 357
     327#define ANDassign 358
     328#define ERassign 359
     329#define ORassign 360
     330#define ATassign 361
     331#define THEN 362
    335332
    336333
     
    342339
    343340/* Line 293 of yacc.c  */
    344 #line 112 "parser.yy"
     341#line 110 "parser.yy"
    345342
    346343        Token tok;
     
    359356
    360357/* Line 293 of yacc.c  */
    361 #line 362 "Parser/parser.cc"
     358#line 359 "Parser/parser.cc"
    362359} YYSTYPE;
    363360# define YYSTYPE_IS_TRIVIAL 1
     
    371368
    372369/* Line 343 of yacc.c  */
    373 #line 374 "Parser/parser.cc"
     370#line 371 "Parser/parser.cc"
    374371
    375372#ifdef short
     
    588585
    589586/* YYFINAL -- State number of the termination state.  */
    590 #define YYFINAL  249
     587#define YYFINAL  248
    591588/* YYLAST -- Last index in YYTABLE.  */
    592 #define YYLAST   11449
     589#define YYLAST   11042
    593590
    594591/* YYNTOKENS -- Number of terminals.  */
    595 #define YYNTOKENS  133
     592#define YYNTOKENS  132
    596593/* YYNNTS -- Number of nonterminals.  */
    597 #define YYNNTS  240
     594#define YYNNTS  238
    598595/* YYNRULES -- Number of rules.  */
    599 #define YYNRULES  754
     596#define YYNRULES  751
    600597/* YYNRULES -- Number of states.  */
    601 #define YYNSTATES  1581
     598#define YYNSTATES  1578
    602599
    603600/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
    604601#define YYUNDEFTOK  2
    605 #define YYMAXUTOK   363
     602#define YYMAXUTOK   362
    606603
    607604#define YYTRANSLATE(YYX)                                                \
     
    614611       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    615612       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    616        2,     2,     2,   118,     2,     2,     2,   125,   120,     2,
    617      109,   110,   119,   121,   116,   122,   113,   124,     2,     2,
    618        2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
    619      126,   131,   127,   130,     2,     2,     2,     2,     2,     2,
     613       2,     2,     2,   117,     2,     2,     2,   124,   119,     2,
     614     108,   109,   118,   120,   115,   121,   112,   123,     2,     2,
     615       2,     2,     2,     2,     2,     2,     2,     2,   116,   131,
     616     125,   130,   126,   129,     2,     2,     2,     2,     2,     2,
    620617       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    621618       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    622        2,   111,     2,   112,   128,     2,     2,     2,     2,     2,
     619       2,   110,     2,   111,   127,     2,     2,     2,     2,     2,
    623620       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    624621       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    625        2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
     622       2,     2,     2,   113,   128,   114,   122,     2,     2,     2,
    626623       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    627624       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     
    647644      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    648645      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    649      105,   106,   107,   108
     646     105,   106,   107
    650647};
    651648
     
    688685    1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
    689686    1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,  1195,
    690     1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,  1221,
    691     1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
    692     1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
    693     1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1311,  1318,
    694     1326,  1329,  1332,  1335,  1337,  1340,  1343,  1347,  1350,  1354,
    695     1356,  1359,  1363,  1366,  1369,  1374,  1375,  1377,  1380,  1383,
    696     1385,  1386,  1388,  1391,  1394,  1400,  1403,  1404,  1412,  1415,
    697     1420,  1421,  1424,  1425,  1427,  1429,  1431,  1437,  1443,  1449,
    698     1451,  1457,  1463,  1473,  1475,  1481,  1482,  1484,  1486,  1492,
    699     1494,  1496,  1502,  1508,  1510,  1514,  1518,  1523,  1525,  1527,
    700     1529,  1531,  1534,  1536,  1540,  1544,  1546,  1549,  1551,  1555,
    701     1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1575,
    702     1577,  1580,  1582,  1584,  1586,  1589,  1590,  1593,  1596,  1598,
    703     1603,  1604,  1606,  1609,  1613,  1618,  1621,  1624,  1626,  1629,
    704     1631,  1634,  1640,  1646,  1654,  1661,  1663,  1666,  1669,  1673,
    705     1675,  1678,  1681,  1686,  1689,  1694,  1695,  1700,  1703,  1705,
    706     1707,  1709,  1710,  1713,  1719,  1725,  1739,  1741,  1743,  1747,
    707     1751,  1754,  1758,  1762,  1765,  1770,  1772,  1779,  1789,  1790,
    708     1802,  1804,  1808,  1812,  1816,  1818,  1820,  1826,  1829,  1835,
    709     1836,  1838,  1840,  1844,  1845,  1847,  1849,  1851,  1853,  1854,
    710     1861,  1864,  1866,  1869,  1874,  1877,  1881,  1885,  1889,  1894,
    711     1900,  1906,  1912,  1919,  1921,  1923,  1925,  1929,  1930,  1936,
    712     1937,  1939,  1941,  1944,  1951,  1953,  1957,  1958,  1960,  1965,
    713     1967,  1969,  1971,  1973,  1976,  1978,  1981,  1984,  1986,  1990,
    714     1993,  1997,  2001,  2004,  2009,  2014,  2018,  2027,  2031,  2034,
    715     2036,  2039,  2046,  2055,  2059,  2062,  2066,  2070,  2075,  2080,
    716     2084,  2086,  2088,  2090,  2095,  2102,  2106,  2109,  2113,  2117,
    717     2122,  2127,  2131,  2134,  2136,  2139,  2142,  2144,  2148,  2151,
    718     2155,  2159,  2162,  2167,  2172,  2176,  2183,  2192,  2196,  2199,
    719     2201,  2204,  2207,  2210,  2214,  2218,  2221,  2226,  2231,  2235,
    720     2242,  2251,  2255,  2258,  2260,  2263,  2266,  2268,  2270,  2273,
    721     2277,  2281,  2284,  2289,  2296,  2305,  2307,  2310,  2313,  2315,
    722     2318,  2321,  2325,  2329,  2331,  2336,  2341,  2345,  2351,  2360,
    723     2364,  2367,  2371,  2373,  2379,  2385,  2392,  2399,  2401,  2404,
    724     2407,  2409,  2412,  2415,  2419,  2423,  2425,  2430,  2435,  2439,
    725     2445,  2454,  2458,  2460,  2463,  2465,  2468,  2475,  2481,  2488,
    726     2496,  2504,  2506,  2509,  2512,  2514,  2517,  2520,  2524,  2528,
    727     2530,  2535,  2540,  2544,  2553,  2557,  2559,  2561,  2564,  2566,
    728     2568,  2571,  2575,  2578,  2582,  2585,  2589,  2593,  2596,  2601,
    729     2605,  2608,  2612,  2615,  2620,  2624,  2627,  2634,  2641,  2648,
    730     2656,  2658,  2661,  2663,  2665,  2667,  2670,  2674,  2677,  2681,
    731     2684,  2688,  2692,  2697,  2700,  2704,  2709,  2712,  2718,  2724,
    732     2731,  2738,  2739,  2741,  2742
     687    1197,  1199,  1201,  1203,  1205,  1208,  1211,  1215,  1219,  1221,
     688    1225,  1227,  1230,  1233,  1236,  1241,  1246,  1251,  1256,  1258,
     689    1261,  1264,  1268,  1270,  1273,  1276,  1278,  1281,  1284,  1288,
     690    1290,  1293,  1296,  1298,  1300,  1305,  1308,  1314,  1322,  1325,
     691    1328,  1331,  1333,  1336,  1339,  1343,  1346,  1350,  1352,  1355,
     692    1359,  1362,  1365,  1370,  1371,  1373,  1376,  1379,  1381,  1382,
     693    1384,  1387,  1390,  1396,  1403,  1406,  1409,  1414,  1415,  1418,
     694    1419,  1421,  1423,  1425,  1431,  1437,  1443,  1445,  1451,  1457,
     695    1467,  1469,  1475,  1476,  1478,  1480,  1486,  1488,  1490,  1496,
     696    1502,  1504,  1508,  1512,  1517,  1519,  1521,  1523,  1525,  1528,
     697    1530,  1534,  1538,  1540,  1543,  1545,  1549,  1551,  1553,  1555,
     698    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1574,  1576,
     699    1578,  1580,  1583,  1584,  1587,  1590,  1592,  1597,  1598,  1600,
     700    1603,  1607,  1612,  1615,  1618,  1620,  1623,  1625,  1628,  1634,
     701    1640,  1648,  1655,  1657,  1660,  1663,  1667,  1669,  1672,  1675,
     702    1680,  1683,  1688,  1689,  1694,  1697,  1699,  1701,  1703,  1704,
     703    1707,  1713,  1719,  1733,  1735,  1737,  1741,  1745,  1748,  1752,
     704    1756,  1759,  1764,  1766,  1773,  1783,  1784,  1796,  1798,  1802,
     705    1806,  1810,  1812,  1814,  1820,  1823,  1829,  1830,  1832,  1834,
     706    1838,  1839,  1841,  1843,  1845,  1847,  1848,  1855,  1858,  1860,
     707    1863,  1868,  1871,  1875,  1879,  1883,  1888,  1894,  1900,  1906,
     708    1913,  1915,  1917,  1919,  1923,  1924,  1930,  1931,  1933,  1935,
     709    1938,  1945,  1947,  1951,  1952,  1954,  1959,  1961,  1963,  1965,
     710    1967,  1970,  1972,  1975,  1978,  1980,  1984,  1987,  1991,  1995,
     711    1998,  2003,  2008,  2012,  2021,  2025,  2028,  2030,  2033,  2040,
     712    2049,  2053,  2056,  2060,  2064,  2069,  2074,  2078,  2080,  2082,
     713    2084,  2089,  2096,  2100,  2103,  2107,  2111,  2116,  2121,  2125,
     714    2128,  2130,  2133,  2136,  2138,  2142,  2145,  2149,  2153,  2156,
     715    2161,  2166,  2170,  2177,  2186,  2190,  2193,  2195,  2198,  2201,
     716    2204,  2208,  2212,  2215,  2220,  2225,  2229,  2236,  2245,  2249,
     717    2252,  2254,  2257,  2260,  2262,  2264,  2267,  2271,  2275,  2278,
     718    2283,  2290,  2299,  2301,  2304,  2307,  2309,  2312,  2315,  2319,
     719    2323,  2325,  2330,  2335,  2339,  2345,  2354,  2358,  2361,  2365,
     720    2367,  2373,  2379,  2386,  2393,  2395,  2398,  2401,  2403,  2406,
     721    2409,  2413,  2417,  2419,  2424,  2429,  2433,  2439,  2448,  2452,
     722    2454,  2457,  2459,  2462,  2469,  2475,  2482,  2490,  2498,  2500,
     723    2503,  2506,  2508,  2511,  2514,  2518,  2522,  2524,  2529,  2534,
     724    2538,  2547,  2551,  2553,  2555,  2558,  2560,  2562,  2565,  2569,
     725    2572,  2576,  2579,  2583,  2587,  2590,  2595,  2599,  2602,  2606,
     726    2609,  2614,  2618,  2621,  2628,  2635,  2642,  2650,  2652,  2655,
     727    2657,  2659,  2661,  2664,  2668,  2671,  2675,  2678,  2682,  2686,
     728    2691,  2694,  2698,  2703,  2706,  2712,  2718,  2725,  2732,  2733,
     729    2735,  2736
    733730};
    734731
     
    736733static const yytype_int16 yyrhs[] =
    737734{
    738      301,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
    739       -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
    740       -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
    741       -1,   141,    82,    -1,    72,    -1,   140,    -1,   109,   168,
    742      110,    -1,   109,   172,   110,    -1,   142,    -1,   143,   111,
    743      134,   163,   135,   112,    -1,   143,   109,   144,   110,    -1,
    744      143,   113,   139,    -1,   143,   113,   111,   134,   146,   135,
    745      112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
    746      146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
    747      109,   274,   110,   114,   278,   371,   115,    -1,   143,   114,
    748      144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
    749      163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
    750      112,   117,   163,    -1,   111,   134,   163,   116,   166,   135,
    751      112,   117,   163,    -1,   147,    -1,   146,   116,   147,    -1,
    752      139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
    753      146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
    754      111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
    755      141,    -1,    86,   148,    -1,    87,   148,    -1,    40,   150,
    756       -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
    757       37,   148,    -1,    37,   109,   274,   110,    -1,    38,   109,
    758      274,   116,   139,   110,    -1,    76,    -1,    76,   109,   275,
    759      110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
    760       66,   109,   274,   110,    -1,    94,   139,    -1,   120,    -1,
    761      121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   274,
    762      110,   150,    -1,   109,   274,   110,   165,    -1,   150,    -1,
    763      151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
    764      150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
    765      151,    -1,   152,    -1,   153,    88,   152,    -1,   153,    89,
    766      152,    -1,   153,    -1,   154,   126,   153,    -1,   154,   127,
    767      153,    -1,   154,    90,   153,    -1,   154,    91,   153,    -1,
    768      154,    -1,   155,    92,   154,    -1,   155,    93,   154,    -1,
    769      155,    -1,   156,   120,   155,    -1,   156,    -1,   157,   128,
    770      156,    -1,   157,    -1,   158,   129,   157,    -1,   158,    -1,
    771      159,    94,   158,    -1,   159,    -1,   160,    95,   159,    -1,
    772      160,    -1,   160,   130,   168,   117,   161,    -1,   160,   130,
    773      117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
    774       -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
    775       -1,   165,   372,    -1,    -1,   163,    -1,   111,   112,    -1,
    776      111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
    777      135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
    778       -1,   164,    -1,   166,   116,   164,    -1,    97,    -1,    98,
    779       -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
    780       -1,   104,    -1,   105,    -1,   106,    -1,   163,    -1,   168,
    781      116,   163,    -1,    -1,   168,    -1,   171,    -1,   172,    -1,
    782      176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
    783      197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
    784      117,   311,   170,    -1,   114,   115,    -1,   114,   134,   134,
    785      208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
    786       -1,   211,    -1,    40,   211,    -1,   307,    -1,   170,   135,
    787       -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
    788      109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
    789       42,   170,    -1,    43,   109,   168,   110,   182,    -1,    43,
    790      109,   168,   110,   114,   134,   204,   183,   115,    -1,    53,
    791      109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
    792      134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
    793       -1,   309,    -1,   178,    -1,   179,   116,   178,    -1,    44,
    794      179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
    795       -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
    796      184,   181,   175,    -1,    -1,   186,    -1,   181,   188,    -1,
    797      181,   175,   187,    -1,   186,   181,   188,    -1,   186,   181,
    798      175,   187,    -1,    -1,   188,    -1,    56,    -1,    56,   132,
    799       -1,    47,   109,   168,   110,   170,    -1,    46,   170,    47,
    800      109,   168,   110,   132,    -1,    48,   109,   134,   190,   110,
    801      170,    -1,   169,   135,   132,   169,   132,   169,    -1,   211,
    802      169,   132,   169,    -1,    51,   139,   132,    -1,    51,   119,
    803      168,   132,    -1,    50,   132,    -1,    50,   139,   132,    -1,
    804       49,   132,    -1,    49,   139,   132,    -1,    52,   169,   132,
    805       -1,    61,   164,   132,    -1,    62,   164,   132,    -1,    62,
    806      164,    63,   163,   132,    -1,    57,   172,   193,    -1,    57,
    807      172,   195,    -1,    57,   172,   193,   195,    -1,   194,    -1,
    808       58,   109,    96,   110,   172,    -1,   194,    58,   109,    96,
    809      110,   172,    -1,    59,   109,    96,   110,   172,    -1,   194,
    810       59,   109,    96,   110,   172,    -1,    58,   109,   134,   134,
    811      196,   135,   110,   172,   135,    -1,   194,    58,   109,   134,
    812      134,   196,   135,   110,   172,   135,    -1,    59,   109,   134,
    813      134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
    814      134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
    815       -1,   224,    -1,   224,   308,    -1,   224,   356,    -1,   365,
    816      139,    -1,   365,    -1,    64,   198,   109,   141,   110,   132,
    817       -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
    818       64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
    819       -1,    64,   198,   109,   141,   117,   199,   117,   199,   117,
    820      202,   110,   132,    -1,    64,   198,    51,   109,   141,   117,
    821      117,   199,   117,   202,   117,   203,   110,   132,    -1,    -1,
    822       11,    -1,    -1,   200,    -1,   201,    -1,   200,   116,   201,
    823       -1,   141,   109,   162,   110,    -1,   111,   162,   112,   141,
    824      109,   162,   110,    -1,    -1,   141,    -1,   202,   116,   141,
    825       -1,   139,    -1,   203,   116,   139,    -1,   135,    -1,   205,
    826       -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
    827       -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
    828       29,   210,   132,    -1,   209,    29,   210,   132,    -1,   273,
    829       -1,   210,   116,   273,    -1,   212,    -1,   221,    -1,   213,
    830      135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
    831       -1,   292,   135,   132,    -1,   295,   135,   132,    -1,   214,
    832      276,    -1,   230,   214,   276,    -1,   213,   135,   116,   134,
    833      271,   276,    -1,   366,   271,   310,    -1,   369,   271,   310,
    834       -1,   226,   369,   271,   310,    -1,   216,    -1,   226,   216,
    835       -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
    836      116,   134,   271,    -1,   111,   112,   271,   109,   134,   259,
    837      135,   110,    -1,   369,   271,   109,   134,   259,   135,   110,
    838       -1,   217,   271,   109,   134,   259,   135,   110,    -1,   111,
    839      134,   261,   135,   112,    -1,   111,   134,   261,   135,   116,
    840      134,   262,   135,   112,    -1,     3,   214,    -1,     3,   216,
    841       -1,   218,   135,   116,   134,   139,    -1,     3,   224,   308,
    842       -1,   219,   135,   116,   134,   308,    -1,   226,     3,   224,
    843      308,    -1,   224,     3,   308,    -1,   224,     3,   226,   308,
    844       -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
    845      139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
    846      132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
    847      223,   308,   310,   276,    -1,   222,   116,   311,   308,   310,
    848      276,    -1,   235,    -1,   239,    -1,   241,    -1,   282,    -1,
    849      236,    -1,   240,    -1,   242,    -1,   283,    -1,    -1,   226,
    850       -1,   227,    -1,   226,   227,    -1,   228,    -1,   313,    -1,
    851       10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
    852       -1,    13,   109,   229,   285,   110,    -1,   231,    -1,   226,
    853      231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
    854       -1,   233,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
    855       -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
     735     298,     0,    -1,    -1,    -1,    78,    -1,    79,    -1,    80,
     736      -1,    71,    -1,    75,    -1,   139,    -1,    71,    -1,    75,
     737      -1,    71,    -1,   139,    -1,    82,    -1,    83,    -1,    81,
     738      -1,   140,    81,    -1,    71,    -1,   139,    -1,   108,   167,
     739     109,    -1,   108,   171,   109,    -1,   141,    -1,   142,   110,
     740     133,   162,   134,   111,    -1,   142,   108,   143,   109,    -1,
     741     142,   112,   138,    -1,   142,   112,   110,   133,   145,   134,
     742     111,    -1,   142,    84,   138,    -1,   142,    84,   110,   133,
     743     145,   134,   111,    -1,   142,    85,    -1,   142,    86,    -1,
     744     108,   271,   109,   113,   275,   368,   114,    -1,   142,   113,
     745     143,   114,    -1,   144,    -1,   143,   115,   144,    -1,    -1,
     746     162,    -1,   138,   116,   162,    -1,   110,   133,   162,   134,
     747     111,   116,   162,    -1,   110,   133,   162,   115,   165,   134,
     748     111,   116,   162,    -1,   146,    -1,   145,   115,   146,    -1,
     749     138,    -1,   138,   112,   146,    -1,   138,   112,   110,   133,
     750     145,   134,   111,    -1,   138,    84,   146,    -1,   138,    84,
     751     110,   133,   145,   134,   111,    -1,   142,    -1,   135,    -1,
     752     140,    -1,    85,   147,    -1,    86,   147,    -1,    39,   149,
     753      -1,   148,   149,    -1,   117,   149,    -1,   118,   149,    -1,
     754      36,   147,    -1,    36,   108,   271,   109,    -1,    37,   108,
     755     271,   115,   138,   109,    -1,    75,    -1,    75,   108,   272,
     756     109,    -1,    75,   108,   144,   109,    -1,    65,   147,    -1,
     757      65,   108,   271,   109,    -1,    93,   138,    -1,   119,    -1,
     758     120,    -1,   121,    -1,   122,    -1,   147,    -1,   108,   271,
     759     109,   149,    -1,   108,   271,   109,   164,    -1,   149,    -1,
     760     150,   118,   149,    -1,   150,   123,   149,    -1,   150,   124,
     761     149,    -1,   150,    -1,   151,   120,   150,    -1,   151,   121,
     762     150,    -1,   151,    -1,   152,    87,   151,    -1,   152,    88,
     763     151,    -1,   152,    -1,   153,   125,   152,    -1,   153,   126,
     764     152,    -1,   153,    89,   152,    -1,   153,    90,   152,    -1,
     765     153,    -1,   154,    91,   153,    -1,   154,    92,   153,    -1,
     766     154,    -1,   155,   119,   154,    -1,   155,    -1,   156,   127,
     767     155,    -1,   156,    -1,   157,   128,   156,    -1,   157,    -1,
     768     158,    93,   157,    -1,   158,    -1,   159,    94,   158,    -1,
     769     159,    -1,   159,   129,   167,   116,   160,    -1,   159,   129,
     770     116,   160,    -1,   159,   129,   167,   116,   164,    -1,   160,
     771      -1,   160,    -1,   147,   130,   162,    -1,   147,   166,   162,
     772      -1,   164,   369,    -1,    -1,   162,    -1,   110,   111,    -1,
     773     110,   133,   162,   134,   111,    -1,   110,   133,   115,   165,
     774     134,   111,    -1,   110,   133,   162,   115,   165,   134,   111,
     775      -1,   163,    -1,   165,   115,   163,    -1,    96,    -1,    97,
     776      -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
     777      -1,   103,    -1,   104,    -1,   105,    -1,   162,    -1,   167,
     778     115,   162,    -1,    -1,   167,    -1,   170,    -1,   171,    -1,
     779     175,    -1,   176,    -1,   188,    -1,   190,    -1,   191,    -1,
     780     196,    -1,   127,   142,   113,   143,   114,   131,    -1,   138,
     781     116,   308,   169,    -1,   113,   114,    -1,   113,   133,   133,
     782     207,   172,   134,   114,    -1,   173,    -1,   172,   133,   173,
     783      -1,   210,    -1,    39,   210,    -1,   304,    -1,   169,   134,
     784      -1,   169,    -1,   174,   169,    -1,   168,   131,    -1,    40,
     785     108,   167,   109,   169,    -1,    40,   108,   167,   109,   169,
     786      41,   169,    -1,    42,   108,   167,   109,   181,    -1,    42,
     787     108,   167,   109,   113,   133,   203,   182,   114,    -1,    52,
     788     108,   167,   109,   181,    -1,    52,   108,   167,   109,   113,
     789     133,   203,   184,   114,    -1,   161,    -1,   161,    95,   161,
     790      -1,   306,    -1,   177,    -1,   178,   115,   177,    -1,    43,
     791     178,   116,    -1,    44,   116,    -1,   179,    -1,   180,   179,
     792      -1,   180,   169,    -1,    -1,   183,    -1,   180,   174,    -1,
     793     183,   180,   174,    -1,    -1,   185,    -1,   180,   187,    -1,
     794     180,   174,   186,    -1,   185,   180,   187,    -1,   185,   180,
     795     174,   186,    -1,    -1,   187,    -1,    55,    -1,    55,   131,
     796      -1,    46,   108,   167,   109,   169,    -1,    45,   169,    46,
     797     108,   167,   109,   131,    -1,    47,   108,   133,   189,   109,
     798     169,    -1,   168,   134,   131,   168,   131,   168,    -1,   210,
     799     168,   131,   168,    -1,    50,   138,   131,    -1,    50,   118,
     800     167,   131,    -1,    49,   131,    -1,    49,   138,   131,    -1,
     801      48,   131,    -1,    48,   138,   131,    -1,    51,   168,   131,
     802      -1,    60,   163,   131,    -1,    61,   163,   131,    -1,    61,
     803     163,    62,   162,   131,    -1,    56,   171,   192,    -1,    56,
     804     171,   194,    -1,    56,   171,   192,   194,    -1,   193,    -1,
     805      57,   108,    95,   109,   171,    -1,   193,    57,   108,    95,
     806     109,   171,    -1,    58,   108,    95,   109,   171,    -1,   193,
     807      58,   108,    95,   109,   171,    -1,    57,   108,   133,   133,
     808     195,   134,   109,   171,   134,    -1,   193,    57,   108,   133,
     809     133,   195,   134,   109,   171,   134,    -1,    58,   108,   133,
     810     133,   195,   134,   109,   171,   134,    -1,   193,    58,   108,
     811     133,   133,   195,   134,   109,   171,   134,    -1,    59,   171,
     812      -1,   223,    -1,   223,   305,    -1,   223,   353,    -1,   362,
     813     138,    -1,   362,    -1,    63,   197,   108,   140,   109,   131,
     814      -1,    63,   197,   108,   140,   116,   198,   109,   131,    -1,
     815      63,   197,   108,   140,   116,   198,   116,   198,   109,   131,
     816      -1,    63,   197,   108,   140,   116,   198,   116,   198,   116,
     817     201,   109,   131,    -1,    63,   197,    50,   108,   140,   116,
     818     116,   198,   116,   201,   116,   202,   109,   131,    -1,    -1,
     819      11,    -1,    -1,   199,    -1,   200,    -1,   199,   115,   200,
     820      -1,   140,   108,   161,   109,    -1,   110,   161,   111,   140,
     821     108,   161,   109,    -1,    -1,   140,    -1,   201,   115,   140,
     822      -1,   138,    -1,   202,   115,   138,    -1,   134,    -1,   204,
     823      -1,   210,    -1,   204,   133,   210,    -1,   134,    -1,   206,
     824      -1,   220,    -1,   206,   133,   220,    -1,    -1,   208,    -1,
     825      28,   209,   131,    -1,   208,    28,   209,   131,    -1,   270,
     826      -1,   209,   115,   270,    -1,   211,    -1,   220,    -1,   212,
     827     134,   131,    -1,   217,   134,   131,    -1,   214,   134,   131,
     828      -1,   289,   134,   131,    -1,   292,   134,   131,    -1,   213,
     829     273,    -1,   229,   213,   273,    -1,   212,   134,   115,   133,
     830     268,   273,    -1,   363,   268,   307,    -1,   366,   268,   307,
     831      -1,   225,   366,   268,   307,    -1,   215,    -1,   225,   215,
     832      -1,   229,   215,    -1,   229,   225,   215,    -1,   214,   134,
     833     115,   133,   268,    -1,   110,   111,   268,   108,   133,   256,
     834     134,   109,    -1,   366,   268,   108,   133,   256,   134,   109,
     835      -1,   216,   268,   108,   133,   256,   134,   109,    -1,   110,
     836     133,   258,   134,   111,    -1,   110,   133,   258,   134,   115,
     837     133,   259,   134,   111,    -1,     3,   213,    -1,     3,   215,
     838      -1,   217,   134,   115,   133,   138,    -1,     3,   223,   305,
     839      -1,   218,   134,   115,   133,   305,    -1,   225,     3,   223,
     840     305,    -1,   223,     3,   305,    -1,   223,     3,   225,   305,
     841      -1,     3,   138,   130,   162,    -1,   219,   134,   115,   133,
     842     138,   130,   162,    -1,   221,   134,   131,    -1,   218,   134,
     843     131,    -1,   219,   134,   131,    -1,   238,   134,   131,    -1,
     844     222,   305,   307,   273,    -1,   221,   115,   308,   305,   307,
     845     273,    -1,   234,    -1,   238,    -1,   240,    -1,   279,    -1,
     846     235,    -1,   239,    -1,   241,    -1,   280,    -1,    -1,   225,
     847      -1,   226,    -1,   225,   226,    -1,   227,    -1,   310,    -1,
     848      10,    -1,    12,    -1,    11,    -1,    14,    -1,    66,    -1,
     849      -1,    13,   108,   228,   282,   109,    -1,   230,    -1,   225,
     850     230,    -1,   229,   225,   230,    -1,   231,    -1,   230,   231,
     851      -1,   232,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
     852      -1,     8,    -1,     9,    -1,    68,    -1,    70,    -1,    16,
    856853      -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
    857       -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
    858       -1,    27,    -1,    24,    -1,   236,    -1,   230,   236,    -1,
    859      235,   232,    -1,   235,   232,   226,    -1,   235,   232,   236,
    860       -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
    861      234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
    862      275,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
    863      275,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
    864      230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
    865      243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
    866      230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
    867       74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
    868      255,    -1,   246,   114,   247,   115,    -1,   246,   273,    -1,
    869       -1,   246,   273,   245,   114,   247,   115,    -1,   246,   109,
    870      291,   110,   114,   247,   115,    -1,   246,   284,    -1,    31,
    871      311,    -1,    32,   311,    -1,   248,    -1,   247,   248,    -1,
    872      249,   132,    -1,    40,   249,   132,    -1,   250,   132,    -1,
    873       40,   250,   132,    -1,   365,    -1,   365,   273,    -1,   249,
    874      116,   273,    -1,   249,   116,    -1,   224,   251,    -1,   250,
    875      116,   311,   251,    -1,    -1,   253,    -1,   317,   252,    -1,
    876      330,   252,    -1,   356,    -1,    -1,   253,    -1,   117,   162,
    877       -1,    30,   311,    -1,   254,   114,   257,   371,   115,    -1,
    878      254,   273,    -1,    -1,   254,   273,   256,   114,   257,   371,
    879      115,    -1,   273,   258,    -1,   257,   116,   273,   258,    -1,
    880       -1,   131,   162,    -1,    -1,   260,    -1,   262,    -1,   261,
    881       -1,   261,   135,   116,   134,   262,    -1,   262,   135,   116,
    882      134,    96,    -1,   261,   135,   116,   134,    96,    -1,   266,
    883       -1,   262,   135,   116,   134,   266,    -1,   261,   135,   116,
    884      134,   266,    -1,   261,   135,   116,   134,   262,   135,   116,
    885      134,   266,    -1,   267,    -1,   262,   135,   116,   134,   267,
    886       -1,    -1,   264,    -1,   265,    -1,   265,   135,   116,   134,
    887       96,    -1,   269,    -1,   268,    -1,   265,   135,   116,   134,
    888      269,    -1,   265,   135,   116,   134,   268,    -1,   268,    -1,
    889      361,   271,   372,    -1,   369,   271,   372,    -1,   226,   369,
    890      271,   372,    -1,   216,    -1,   269,    -1,   361,    -1,   369,
    891       -1,   226,   369,    -1,   370,    -1,   223,   335,   372,    -1,
    892      223,   339,   372,    -1,   223,    -1,   223,   350,    -1,   139,
    893       -1,   270,   116,   139,    -1,   137,    -1,    74,    -1,    75,
    894       -1,   138,    -1,    74,    -1,    75,    -1,   139,    -1,    74,
    895       -1,    75,    -1,   365,    -1,   224,    -1,   224,   356,    -1,
    896      365,    -1,   370,    -1,   224,    -1,   224,   344,    -1,    -1,
    897      131,   277,    -1,   107,   277,    -1,   163,    -1,   114,   278,
    898      371,   115,    -1,    -1,   277,    -1,   279,   277,    -1,   278,
    899      116,   277,    -1,   278,   116,   279,   277,    -1,   280,   117,
    900       -1,   273,   117,    -1,   281,    -1,   280,   281,    -1,    80,
    901       -1,   113,   273,    -1,   111,   134,   163,   135,   112,    -1,
    902      111,   134,   309,   135,   112,    -1,   111,   134,   162,    96,
    903      162,   135,   112,    -1,   113,   111,   134,   146,   135,   112,
    904       -1,   283,    -1,   230,   283,    -1,   282,   232,    -1,   282,
    905      232,   226,    -1,   284,    -1,   226,   284,    -1,   283,   227,
    906       -1,    75,   109,   291,   110,    -1,   286,   372,    -1,   285,
    907      116,   286,   372,    -1,    -1,   288,   273,   287,   289,    -1,
    908      224,   335,    -1,    33,    -1,    35,    -1,    34,    -1,    -1,
    909      289,   290,    -1,   129,   273,   109,   291,   110,    -1,   129,
    910      114,   134,   297,   115,    -1,   129,   109,   134,   285,   135,
    911      110,   114,   134,   297,   115,   109,   291,   110,    -1,   275,
    912       -1,   163,    -1,   291,   116,   275,    -1,   291,   116,   163,
    913       -1,    33,   293,    -1,   231,    33,   293,    -1,   292,   116,
    914      293,    -1,   294,   289,    -1,   294,   289,   131,   275,    -1,
    915      273,    -1,   272,   109,   134,   285,   135,   110,    -1,    36,
    916      273,   109,   134,   285,   135,   110,   114,   115,    -1,    -1,
    917       36,   273,   109,   134,   285,   135,   110,   114,   296,   297,
    918      115,    -1,   298,    -1,   297,   134,   298,    -1,   299,   135,
    919      132,    -1,   300,   135,   132,    -1,   214,    -1,   216,    -1,
    920      299,   135,   116,   134,   271,    -1,   224,   308,    -1,   300,
    921      135,   116,   134,   308,    -1,    -1,   302,    -1,   304,    -1,
    922      302,   134,   304,    -1,    -1,   302,    -1,   211,    -1,   306,
    923       -1,   197,    -1,    -1,     5,    82,   305,   114,   303,   115,
    924       -1,    40,   304,    -1,   307,    -1,   322,   172,    -1,   326,
    925      134,   206,   172,    -1,   215,   172,    -1,   223,   322,   172,
    926       -1,   226,   322,   172,    -1,   230,   322,   172,    -1,   230,
    927      226,   322,   172,    -1,   223,   326,   134,   206,   172,    -1,
    928      226,   326,   134,   206,   172,    -1,   230,   326,   134,   206,
    929      172,    -1,   230,   226,   326,   134,   206,   172,    -1,   317,
    930       -1,   322,    -1,   330,    -1,   162,   123,   162,    -1,    -1,
    931       64,   109,   141,   110,   311,    -1,    -1,   312,    -1,   313,
    932       -1,   312,   313,    -1,    39,   109,   109,   314,   110,   110,
    933       -1,   315,    -1,   314,   116,   315,    -1,    -1,   316,    -1,
    934      316,   109,   169,   110,    -1,   271,    -1,   233,    -1,   234,
    935       -1,   227,    -1,   318,   311,    -1,   319,    -1,   320,   311,
    936       -1,   321,   311,    -1,   137,    -1,   109,   318,   110,    -1,
    937      119,   317,    -1,   119,   226,   317,    -1,   109,   319,   110,
    938       -1,   318,   348,    -1,   109,   319,   110,   348,    -1,   109,
    939      320,   110,   349,    -1,   109,   320,   110,    -1,   109,   319,
    940      110,   109,   134,   263,   135,   110,    -1,   109,   321,   110,
    941       -1,   323,   311,    -1,   324,    -1,   325,   311,    -1,   318,
    942      109,   134,   263,   135,   110,    -1,   109,   324,   110,   109,
    943      134,   263,   135,   110,    -1,   109,   323,   110,    -1,   119,
    944      322,    -1,   119,   226,   322,    -1,   109,   324,   110,    -1,
    945      109,   324,   110,   348,    -1,   109,   325,   110,   349,    -1,
    946      109,   325,   110,    -1,   327,    -1,   328,    -1,   329,    -1,
    947      318,   109,   270,   110,    -1,   109,   328,   110,   109,   270,
    948      110,    -1,   109,   327,   110,    -1,   119,   326,    -1,   119,
    949      226,   326,    -1,   109,   328,   110,    -1,   109,   328,   110,
    950      348,    -1,   109,   329,   110,   349,    -1,   109,   329,   110,
    951       -1,   331,   311,    -1,   332,    -1,   333,   311,    -1,   334,
    952      311,    -1,   340,    -1,   109,   331,   110,    -1,   119,   330,
    953       -1,   119,   226,   330,    -1,   109,   332,   110,    -1,   331,
    954      348,    -1,   109,   332,   110,   348,    -1,   109,   333,   110,
    955      349,    -1,   109,   333,   110,    -1,   331,   109,   134,   263,
    956      135,   110,    -1,   109,   332,   110,   109,   134,   263,   135,
    957      110,    -1,   109,   334,   110,    -1,   318,   311,    -1,   336,
    958       -1,   337,   311,    -1,   338,   311,    -1,   119,   335,    -1,
    959      119,   226,   335,    -1,   109,   336,   110,    -1,   318,   354,
    960       -1,   109,   336,   110,   348,    -1,   109,   337,   110,   349,
    961       -1,   109,   337,   110,    -1,   318,   109,   134,   263,   135,
    962      110,    -1,   109,   336,   110,   109,   134,   263,   135,   110,
    963       -1,   109,   338,   110,    -1,   340,   311,    -1,   341,    -1,
    964      342,   311,    -1,   343,   311,    -1,    74,    -1,    75,    -1,
    965      119,   339,    -1,   119,   226,   339,    -1,   109,   341,   110,
    966       -1,   340,   354,    -1,   109,   341,   110,   354,    -1,   340,
    967      109,   134,   263,   135,   110,    -1,   109,   341,   110,   109,
    968      134,   263,   135,   110,    -1,   345,    -1,   346,   311,    -1,
    969      347,   311,    -1,   119,    -1,   119,   226,    -1,   119,   344,
    970       -1,   119,   226,   344,    -1,   109,   345,   110,    -1,   348,
    971       -1,   109,   345,   110,   348,    -1,   109,   346,   110,   349,
    972       -1,   109,   346,   110,    -1,   109,   134,   263,   135,   110,
    973       -1,   109,   345,   110,   109,   134,   263,   135,   110,    -1,
    974      109,   347,   110,    -1,   111,   112,    -1,   111,   112,   349,
    975       -1,   349,    -1,   111,   134,   163,   135,   112,    -1,   111,
    976      134,   119,   135,   112,    -1,   349,   111,   134,   163,   135,
    977      112,    -1,   349,   111,   134,   119,   135,   112,    -1,   351,
    978       -1,   352,   311,    -1,   353,   311,    -1,   119,    -1,   119,
    979      226,    -1,   119,   350,    -1,   119,   226,   350,    -1,   109,
    980      351,   110,    -1,   354,    -1,   109,   351,   110,   354,    -1,
    981      109,   352,   110,   349,    -1,   109,   352,   110,    -1,   109,
    982      134,   263,   135,   110,    -1,   109,   351,   110,   109,   134,
    983      263,   135,   110,    -1,   109,   353,   110,    -1,   355,    -1,
    984      355,   349,    -1,   349,    -1,   111,   112,    -1,   111,   134,
    985      226,   119,   135,   112,    -1,   111,   134,   226,   135,   112,
    986       -1,   111,   134,   226,   163,   135,   112,    -1,   111,   134,
    987        7,   225,   163,   135,   112,    -1,   111,   134,   226,     7,
    988      163,   135,   112,    -1,   357,    -1,   358,   311,    -1,   359,
    989      311,    -1,   119,    -1,   119,   226,    -1,   119,   356,    -1,
    990      119,   226,   356,    -1,   109,   357,   110,    -1,   348,    -1,
    991      109,   357,   110,   348,    -1,   109,   358,   110,   349,    -1,
    992      109,   358,   110,    -1,   109,   357,   110,   109,   134,   263,
    993      135,   110,    -1,   109,   359,   110,    -1,   361,    -1,   369,
    994       -1,   226,   369,    -1,   362,    -1,   363,    -1,   119,   224,
    995       -1,   226,   119,   224,    -1,   119,   370,    -1,   226,   119,
    996      370,    -1,   119,   360,    -1,   226,   119,   360,    -1,   111,
    997      112,   224,    -1,   364,   224,    -1,   111,   112,   349,   224,
    998       -1,   364,   349,   224,    -1,   349,   224,    -1,   111,   112,
    999      362,    -1,   364,   362,    -1,   111,   112,   349,   362,    -1,
    1000      364,   349,   362,    -1,   349,   362,    -1,   111,   134,   226,
    1001      119,   135,   112,    -1,   111,   134,   226,   163,   135,   112,
    1002       -1,   111,   134,   230,   163,   135,   112,    -1,   111,   134,
    1003      230,   226,   163,   135,   112,    -1,   369,    -1,   226,   369,
    1004       -1,   366,    -1,   367,    -1,   368,    -1,   119,   224,    -1,
    1005      226,   119,   224,    -1,   119,   370,    -1,   226,   119,   370,
    1006       -1,   119,   365,    -1,   226,   119,   365,    -1,   111,   112,
    1007      224,    -1,   111,   112,   349,   224,    -1,   349,   224,    -1,
    1008      111,   112,   367,    -1,   111,   112,   349,   367,    -1,   349,
    1009      367,    -1,   111,   134,   262,   135,   112,    -1,   111,   112,
    1010      109,   259,   110,    -1,   369,   109,   134,   259,   135,   110,
    1011       -1,   217,   109,   134,   259,   135,   110,    -1,    -1,   116,
    1012       -1,    -1,   131,   163,    -1
     854      -1,    22,    -1,    23,    -1,    15,    -1,    24,    -1,    25,
     855      -1,    26,    -1,   235,    -1,   229,   235,    -1,   234,   231,
     856      -1,   234,   231,   225,    -1,   234,   231,   235,    -1,   236,
     857      -1,   224,   237,   224,    -1,   233,    -1,   225,   233,    -1,
     858     236,   226,    -1,   236,   233,    -1,    27,   108,   272,   109,
     859      -1,    27,   108,   167,   109,    -1,    77,   108,   272,   109,
     860      -1,    77,   108,   167,   109,    -1,   239,    -1,   229,   239,
     861      -1,   238,   231,    -1,   238,   231,   225,    -1,   242,    -1,
     862     225,   242,    -1,   239,   226,    -1,   241,    -1,   229,   241,
     863      -1,   240,   231,    -1,   240,   231,   225,    -1,    73,    -1,
     864     225,    73,    -1,   241,   226,    -1,   243,    -1,   253,    -1,
     865     244,   113,   245,   114,    -1,   244,   270,    -1,   244,   270,
     866     113,   245,   114,    -1,   244,   108,   288,   109,   113,   245,
     867     114,    -1,   244,   281,    -1,    30,   308,    -1,    31,   308,
     868      -1,   246,    -1,   245,   246,    -1,   247,   131,    -1,    39,
     869     247,   131,    -1,   248,   131,    -1,    39,   248,   131,    -1,
     870     362,    -1,   362,   270,    -1,   247,   115,   270,    -1,   247,
     871     115,    -1,   223,   249,    -1,   248,   115,   308,   249,    -1,
     872      -1,   251,    -1,   314,   250,    -1,   327,   250,    -1,   353,
     873      -1,    -1,   251,    -1,   116,   161,    -1,    29,   308,    -1,
     874     252,   113,   254,   368,   114,    -1,   252,   270,   113,   254,
     875     368,   114,    -1,   252,   270,    -1,   270,   255,    -1,   254,
     876     115,   270,   255,    -1,    -1,   130,   161,    -1,    -1,   257,
     877      -1,   259,    -1,   258,    -1,   258,   134,   115,   133,   259,
     878      -1,   259,   134,   115,   133,    95,    -1,   258,   134,   115,
     879     133,    95,    -1,   263,    -1,   259,   134,   115,   133,   263,
     880      -1,   258,   134,   115,   133,   263,    -1,   258,   134,   115,
     881     133,   259,   134,   115,   133,   263,    -1,   264,    -1,   259,
     882     134,   115,   133,   264,    -1,    -1,   261,    -1,   262,    -1,
     883     262,   134,   115,   133,    95,    -1,   266,    -1,   265,    -1,
     884     262,   134,   115,   133,   266,    -1,   262,   134,   115,   133,
     885     265,    -1,   265,    -1,   358,   268,   369,    -1,   366,   268,
     886     369,    -1,   225,   366,   268,   369,    -1,   215,    -1,   266,
     887      -1,   358,    -1,   366,    -1,   225,   366,    -1,   367,    -1,
     888     222,   332,   369,    -1,   222,   336,   369,    -1,   222,    -1,
     889     222,   347,    -1,   138,    -1,   267,   115,   138,    -1,   136,
     890      -1,    73,    -1,    74,    -1,   137,    -1,    73,    -1,    74,
     891      -1,   138,    -1,    73,    -1,    74,    -1,   362,    -1,   223,
     892      -1,   223,   353,    -1,   362,    -1,   367,    -1,   223,    -1,
     893     223,   341,    -1,    -1,   130,   274,    -1,   106,   274,    -1,
     894     162,    -1,   113,   275,   368,   114,    -1,    -1,   274,    -1,
     895     276,   274,    -1,   275,   115,   274,    -1,   275,   115,   276,
     896     274,    -1,   277,   116,    -1,   270,   116,    -1,   278,    -1,
     897     277,   278,    -1,    79,    -1,   112,   270,    -1,   110,   133,
     898     162,   134,   111,    -1,   110,   133,   306,   134,   111,    -1,
     899     110,   133,   161,    95,   161,   134,   111,    -1,   112,   110,
     900     133,   145,   134,   111,    -1,   280,    -1,   229,   280,    -1,
     901     279,   231,    -1,   279,   231,   225,    -1,   281,    -1,   225,
     902     281,    -1,   280,   226,    -1,    74,   108,   288,   109,    -1,
     903     283,   369,    -1,   282,   115,   283,   369,    -1,    -1,   285,
     904     270,   284,   286,    -1,   223,   332,    -1,    32,    -1,    34,
     905      -1,    33,    -1,    -1,   286,   287,    -1,   128,   270,   108,
     906     288,   109,    -1,   128,   113,   133,   294,   114,    -1,   128,
     907     108,   133,   282,   134,   109,   113,   133,   294,   114,   108,
     908     288,   109,    -1,   272,    -1,   162,    -1,   288,   115,   272,
     909      -1,   288,   115,   162,    -1,    32,   290,    -1,   230,    32,
     910     290,    -1,   289,   115,   290,    -1,   291,   286,    -1,   291,
     911     286,   130,   272,    -1,   270,    -1,   269,   108,   133,   282,
     912     134,   109,    -1,    35,   270,   108,   133,   282,   134,   109,
     913     113,   114,    -1,    -1,    35,   270,   108,   133,   282,   134,
     914     109,   113,   293,   294,   114,    -1,   295,    -1,   294,   133,
     915     295,    -1,   296,   134,   131,    -1,   297,   134,   131,    -1,
     916     213,    -1,   215,    -1,   296,   134,   115,   133,   268,    -1,
     917     223,   305,    -1,   297,   134,   115,   133,   305,    -1,    -1,
     918     299,    -1,   301,    -1,   299,   133,   301,    -1,    -1,   299,
     919      -1,   210,    -1,   303,    -1,   196,    -1,    -1,     5,    81,
     920     302,   113,   300,   114,    -1,    39,   301,    -1,   304,    -1,
     921     319,   171,    -1,   323,   133,   205,   171,    -1,   214,   171,
     922      -1,   222,   319,   171,    -1,   225,   319,   171,    -1,   229,
     923     319,   171,    -1,   229,   225,   319,   171,    -1,   222,   323,
     924     133,   205,   171,    -1,   225,   323,   133,   205,   171,    -1,
     925     229,   323,   133,   205,   171,    -1,   229,   225,   323,   133,
     926     205,   171,    -1,   314,    -1,   319,    -1,   327,    -1,   161,
     927     122,   161,    -1,    -1,    63,   108,   140,   109,   308,    -1,
     928      -1,   309,    -1,   310,    -1,   309,   310,    -1,    38,   108,
     929     108,   311,   109,   109,    -1,   312,    -1,   311,   115,   312,
     930      -1,    -1,   313,    -1,   313,   108,   168,   109,    -1,   268,
     931      -1,   232,    -1,   233,    -1,   226,    -1,   315,   308,    -1,
     932     316,    -1,   317,   308,    -1,   318,   308,    -1,   136,    -1,
     933     108,   315,   109,    -1,   118,   314,    -1,   118,   225,   314,
     934      -1,   108,   316,   109,    -1,   315,   345,    -1,   108,   316,
     935     109,   345,    -1,   108,   317,   109,   346,    -1,   108,   317,
     936     109,    -1,   108,   316,   109,   108,   133,   260,   134,   109,
     937      -1,   108,   318,   109,    -1,   320,   308,    -1,   321,    -1,
     938     322,   308,    -1,   315,   108,   133,   260,   134,   109,    -1,
     939     108,   321,   109,   108,   133,   260,   134,   109,    -1,   108,
     940     320,   109,    -1,   118,   319,    -1,   118,   225,   319,    -1,
     941     108,   321,   109,    -1,   108,   321,   109,   345,    -1,   108,
     942     322,   109,   346,    -1,   108,   322,   109,    -1,   324,    -1,
     943     325,    -1,   326,    -1,   315,   108,   267,   109,    -1,   108,
     944     325,   109,   108,   267,   109,    -1,   108,   324,   109,    -1,
     945     118,   323,    -1,   118,   225,   323,    -1,   108,   325,   109,
     946      -1,   108,   325,   109,   345,    -1,   108,   326,   109,   346,
     947      -1,   108,   326,   109,    -1,   328,   308,    -1,   329,    -1,
     948     330,   308,    -1,   331,   308,    -1,   337,    -1,   108,   328,
     949     109,    -1,   118,   327,    -1,   118,   225,   327,    -1,   108,
     950     329,   109,    -1,   328,   345,    -1,   108,   329,   109,   345,
     951      -1,   108,   330,   109,   346,    -1,   108,   330,   109,    -1,
     952     328,   108,   133,   260,   134,   109,    -1,   108,   329,   109,
     953     108,   133,   260,   134,   109,    -1,   108,   331,   109,    -1,
     954     315,   308,    -1,   333,    -1,   334,   308,    -1,   335,   308,
     955      -1,   118,   332,    -1,   118,   225,   332,    -1,   108,   333,
     956     109,    -1,   315,   351,    -1,   108,   333,   109,   345,    -1,
     957     108,   334,   109,   346,    -1,   108,   334,   109,    -1,   315,
     958     108,   133,   260,   134,   109,    -1,   108,   333,   109,   108,
     959     133,   260,   134,   109,    -1,   108,   335,   109,    -1,   337,
     960     308,    -1,   338,    -1,   339,   308,    -1,   340,   308,    -1,
     961      73,    -1,    74,    -1,   118,   336,    -1,   118,   225,   336,
     962      -1,   108,   338,   109,    -1,   337,   351,    -1,   108,   338,
     963     109,   351,    -1,   337,   108,   133,   260,   134,   109,    -1,
     964     108,   338,   109,   108,   133,   260,   134,   109,    -1,   342,
     965      -1,   343,   308,    -1,   344,   308,    -1,   118,    -1,   118,
     966     225,    -1,   118,   341,    -1,   118,   225,   341,    -1,   108,
     967     342,   109,    -1,   345,    -1,   108,   342,   109,   345,    -1,
     968     108,   343,   109,   346,    -1,   108,   343,   109,    -1,   108,
     969     133,   260,   134,   109,    -1,   108,   342,   109,   108,   133,
     970     260,   134,   109,    -1,   108,   344,   109,    -1,   110,   111,
     971      -1,   110,   111,   346,    -1,   346,    -1,   110,   133,   162,
     972     134,   111,    -1,   110,   133,   118,   134,   111,    -1,   346,
     973     110,   133,   162,   134,   111,    -1,   346,   110,   133,   118,
     974     134,   111,    -1,   348,    -1,   349,   308,    -1,   350,   308,
     975      -1,   118,    -1,   118,   225,    -1,   118,   347,    -1,   118,
     976     225,   347,    -1,   108,   348,   109,    -1,   351,    -1,   108,
     977     348,   109,   351,    -1,   108,   349,   109,   346,    -1,   108,
     978     349,   109,    -1,   108,   133,   260,   134,   109,    -1,   108,
     979     348,   109,   108,   133,   260,   134,   109,    -1,   108,   350,
     980     109,    -1,   352,    -1,   352,   346,    -1,   346,    -1,   110,
     981     111,    -1,   110,   133,   225,   118,   134,   111,    -1,   110,
     982     133,   225,   134,   111,    -1,   110,   133,   225,   162,   134,
     983     111,    -1,   110,   133,     7,   224,   162,   134,   111,    -1,
     984     110,   133,   225,     7,   162,   134,   111,    -1,   354,    -1,
     985     355,   308,    -1,   356,   308,    -1,   118,    -1,   118,   225,
     986      -1,   118,   353,    -1,   118,   225,   353,    -1,   108,   354,
     987     109,    -1,   345,    -1,   108,   354,   109,   345,    -1,   108,
     988     355,   109,   346,    -1,   108,   355,   109,    -1,   108,   354,
     989     109,   108,   133,   260,   134,   109,    -1,   108,   356,   109,
     990      -1,   358,    -1,   366,    -1,   225,   366,    -1,   359,    -1,
     991     360,    -1,   118,   223,    -1,   225,   118,   223,    -1,   118,
     992     367,    -1,   225,   118,   367,    -1,   118,   357,    -1,   225,
     993     118,   357,    -1,   110,   111,   223,    -1,   361,   223,    -1,
     994     110,   111,   346,   223,    -1,   361,   346,   223,    -1,   346,
     995     223,    -1,   110,   111,   359,    -1,   361,   359,    -1,   110,
     996     111,   346,   359,    -1,   361,   346,   359,    -1,   346,   359,
     997      -1,   110,   133,   225,   118,   134,   111,    -1,   110,   133,
     998     225,   162,   134,   111,    -1,   110,   133,   229,   162,   134,
     999     111,    -1,   110,   133,   229,   225,   162,   134,   111,    -1,
     1000     366,    -1,   225,   366,    -1,   363,    -1,   364,    -1,   365,
     1001      -1,   118,   223,    -1,   225,   118,   223,    -1,   118,   367,
     1002      -1,   225,   118,   367,    -1,   118,   362,    -1,   225,   118,
     1003     362,    -1,   110,   111,   223,    -1,   110,   111,   346,   223,
     1004      -1,   346,   223,    -1,   110,   111,   364,    -1,   110,   111,
     1005     346,   364,    -1,   346,   364,    -1,   110,   133,   259,   134,
     1006     111,    -1,   110,   111,   108,   256,   109,    -1,   366,   108,
     1007     133,   256,   134,   109,    -1,   216,   108,   133,   256,   134,
     1008     109,    -1,    -1,   115,    -1,    -1,   130,   162,    -1
    10131009};
    10141010
     
    10161012static const yytype_uint16 yyrline[] =
    10171013{
    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,  1445,  1444,  1448,
    1055     1450,  1455,  1457,  1462,  1464,  1469,  1470,  1472,  1473,  1478,
    1056     1479,  1481,  1483,  1488,  1490,  1496,  1497,  1499,  1502,  1505,
    1057     1510,  1511,  1516,  1521,  1525,  1527,  1533,  1532,  1539,  1541,
    1058     1547,  1548,  1556,  1557,  1561,  1562,  1563,  1565,  1567,  1574,
    1059     1575,  1577,  1579,  1584,  1585,  1591,  1592,  1596,  1597,  1602,
    1060     1603,  1604,  1606,  1614,  1615,  1617,  1620,  1622,  1626,  1627,
    1061     1628,  1630,  1632,  1636,  1641,  1649,  1650,  1659,  1661,  1666,
    1062     1667,  1668,  1672,  1673,  1674,  1678,  1679,  1680,  1684,  1685,
    1063     1686,  1691,  1692,  1693,  1694,  1700,  1701,  1703,  1708,  1709,
    1064     1714,  1715,  1716,  1717,  1718,  1733,  1734,  1739,  1740,  1748,
    1065     1750,  1752,  1755,  1757,  1759,  1782,  1783,  1785,  1787,  1792,
    1066     1793,  1795,  1800,  1805,  1806,  1812,  1811,  1815,  1819,  1821,
    1067     1823,  1829,  1830,  1835,  1840,  1842,  1847,  1849,  1850,  1852,
    1068     1857,  1859,  1861,  1866,  1868,  1873,  1878,  1886,  1892,  1891,
    1069     1905,  1906,  1911,  1912,  1916,  1921,  1926,  1934,  1939,  1950,
    1070     1951,  1962,  1963,  1969,  1970,  1974,  1975,  1976,  1979,  1978,
    1071     1989,  1994,  1999,  2005,  2014,  2020,  2026,  2032,  2038,  2046,
    1072     2052,  2060,  2066,  2075,  2076,  2077,  2081,  2085,  2087,  2092,
    1073     2093,  2097,  2098,  2103,  2109,  2110,  2113,  2115,  2116,  2120,
    1074     2121,  2122,  2123,  2157,  2159,  2160,  2162,  2167,  2172,  2177,
    1075     2179,  2181,  2186,  2188,  2190,  2192,  2197,  2199,  2209,  2211,
    1076     2212,  2217,  2219,  2221,  2226,  2228,  2230,  2235,  2237,  2239,
    1077     2248,  2249,  2250,  2254,  2256,  2258,  2263,  2265,  2267,  2272,
    1078     2274,  2276,  2291,  2293,  2294,  2296,  2301,  2302,  2307,  2309,
    1079     2311,  2316,  2318,  2320,  2322,  2327,  2329,  2331,  2341,  2343,
    1080     2344,  2346,  2351,  2353,  2355,  2360,  2362,  2364,  2366,  2371,
    1081     2373,  2375,  2406,  2408,  2409,  2411,  2416,  2421,  2429,  2431,
    1082     2433,  2438,  2440,  2445,  2447,  2461,  2462,  2464,  2469,  2471,
    1083     2473,  2475,  2477,  2482,  2483,  2485,  2487,  2492,  2494,  2496,
    1084     2502,  2504,  2506,  2510,  2512,  2514,  2516,  2530,  2531,  2533,
    1085     2538,  2540,  2542,  2544,  2546,  2551,  2552,  2554,  2556,  2561,
    1086     2563,  2565,  2571,  2572,  2574,  2583,  2586,  2588,  2591,  2593,
    1087     2595,  2608,  2609,  2611,  2616,  2618,  2620,  2622,  2624,  2629,
    1088     2630,  2632,  2634,  2639,  2641,  2649,  2650,  2651,  2656,  2657,
    1089     2661,  2663,  2665,  2667,  2669,  2671,  2678,  2680,  2682,  2684,
    1090     2686,  2688,  2690,  2692,  2694,  2696,  2701,  2703,  2705,  2710,
    1091     2736,  2737,  2739,  2743,  2744,  2748,  2750,  2752,  2754,  2756,
    1092     2758,  2765,  2767,  2769,  2771,  2773,  2775,  2780,  2785,  2787,
    1093     2789,  2807,  2809,  2814,  2815
     1014       0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
     1015     317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
     1016     343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
     1017     369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
     1018     402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
     1019     429,   431,   433,   435,   437,   439,   445,   447,   449,   451,
     1020     453,   455,   457,   459,   461,   466,   467,   468,   469,   473,
     1021     474,   476,   481,   482,   484,   486,   491,   492,   494,   499,
     1022     500,   502,   507,   508,   510,   512,   514,   519,   520,   522,
     1023     527,   528,   533,   534,   539,   540,   545,   546,   551,   552,
     1024     557,   558,   560,   562,   567,   572,   573,   575,   577,   583,
     1025     584,   590,   592,   594,   596,   601,   602,   607,   608,   609,
     1026     610,   611,   612,   613,   614,   615,   616,   620,   621,   627,
     1027     628,   634,   635,   636,   637,   638,   639,   640,   641,   642,
     1028     651,   658,   660,   670,   671,   676,   678,   680,   682,   686,
     1029     687,   692,   697,   700,   702,   704,   709,   711,   719,   720,
     1030     722,   726,   727,   732,   733,   738,   739,   743,   748,   749,
     1031     753,   755,   761,   762,   766,   768,   770,   772,   778,   779,
     1032     783,   784,   788,   790,   792,   797,   799,   804,   806,   810,
     1033     813,   817,   820,   824,   826,   830,   832,   839,   841,   843,
     1034     852,   854,   856,   858,   860,   865,   867,   869,   871,   876,
     1035     889,   890,   895,   897,   902,   906,   908,   910,   912,   914,
     1036     920,   921,   927,   928,   932,   933,   938,   940,   946,   947,
     1037     949,   954,   956,   963,   965,   969,   970,   975,   977,   981,
     1038     982,   986,   988,   992,   993,   997,   998,  1002,  1003,  1018,
     1039    1019,  1020,  1021,  1022,  1026,  1031,  1038,  1048,  1053,  1058,
     1040    1066,  1071,  1076,  1081,  1086,  1094,  1116,  1121,  1128,  1130,
     1041    1137,  1142,  1147,  1158,  1163,  1168,  1173,  1178,  1187,  1192,
     1042    1200,  1201,  1202,  1203,  1209,  1214,  1222,  1223,  1224,  1225,
     1043    1229,  1230,  1231,  1232,  1237,  1238,  1247,  1248,  1253,  1254,
     1044    1259,  1261,  1263,  1265,  1267,  1270,  1269,  1281,  1282,  1284,
     1045    1294,  1295,  1300,  1304,  1306,  1308,  1310,  1312,  1314,  1316,
     1046    1318,  1323,  1325,  1327,  1329,  1331,  1333,  1335,  1337,  1339,
     1047    1341,  1343,  1345,  1351,  1352,  1354,  1356,  1358,  1363,  1364,
     1048    1370,  1371,  1373,  1375,  1380,  1382,  1384,  1386,  1391,  1392,
     1049    1394,  1396,  1401,  1402,  1404,  1409,  1410,  1412,  1414,  1419,
     1050    1421,  1423,  1428,  1429,  1433,  1435,  1437,  1439,  1441,  1446,
     1051    1448,  1453,  1455,  1460,  1461,  1463,  1464,  1469,  1470,  1472,
     1052    1474,  1479,  1481,  1487,  1488,  1490,  1493,  1496,  1501,  1502,
     1053    1507,  1512,  1516,  1518,  1520,  1525,  1527,  1533,  1534,  1542,
     1054    1543,  1547,  1548,  1549,  1551,  1553,  1560,  1561,  1563,  1565,
     1055    1570,  1571,  1577,  1578,  1582,  1583,  1588,  1589,  1590,  1592,
     1056    1600,  1601,  1603,  1606,  1608,  1612,  1613,  1614,  1616,  1618,
     1057    1622,  1627,  1635,  1636,  1645,  1647,  1652,  1653,  1654,  1658,
     1058    1659,  1660,  1664,  1665,  1666,  1670,  1671,  1672,  1677,  1678,
     1059    1679,  1680,  1686,  1687,  1689,  1694,  1695,  1700,  1701,  1702,
     1060    1703,  1704,  1719,  1720,  1725,  1726,  1734,  1736,  1738,  1741,
     1061    1743,  1745,  1768,  1769,  1771,  1773,  1778,  1779,  1781,  1786,
     1062    1791,  1792,  1798,  1797,  1801,  1805,  1807,  1809,  1815,  1816,
     1063    1821,  1826,  1828,  1833,  1835,  1836,  1838,  1843,  1845,  1847,
     1064    1852,  1854,  1859,  1864,  1872,  1878,  1877,  1891,  1892,  1897,
     1065    1898,  1902,  1907,  1912,  1920,  1925,  1936,  1937,  1948,  1949,
     1066    1955,  1956,  1960,  1961,  1962,  1965,  1964,  1975,  1980,  1985,
     1067    1991,  2000,  2006,  2012,  2018,  2024,  2032,  2038,  2046,  2052,
     1068    2061,  2062,  2063,  2067,  2071,  2073,  2078,  2079,  2083,  2084,
     1069    2089,  2095,  2096,  2099,  2101,  2102,  2106,  2107,  2108,  2109,
     1070    2143,  2145,  2146,  2148,  2153,  2158,  2163,  2165,  2167,  2172,
     1071    2174,  2176,  2178,  2183,  2185,  2195,  2197,  2198,  2203,  2205,
     1072    2207,  2212,  2214,  2216,  2221,  2223,  2225,  2234,  2235,  2236,
     1073    2240,  2242,  2244,  2249,  2251,  2253,  2258,  2260,  2262,  2277,
     1074    2279,  2280,  2282,  2287,  2288,  2293,  2295,  2297,  2302,  2304,
     1075    2306,  2308,  2313,  2315,  2317,  2327,  2329,  2330,  2332,  2337,
     1076    2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2392,
     1077    2394,  2395,  2397,  2402,  2407,  2415,  2417,  2419,  2424,  2426,
     1078    2431,  2433,  2447,  2448,  2450,  2455,  2457,  2459,  2461,  2463,
     1079    2468,  2469,  2471,  2473,  2478,  2480,  2482,  2488,  2490,  2492,
     1080    2496,  2498,  2500,  2502,  2516,  2517,  2519,  2524,  2526,  2528,
     1081    2530,  2532,  2537,  2538,  2540,  2542,  2547,  2549,  2551,  2557,
     1082    2558,  2560,  2569,  2572,  2574,  2577,  2579,  2581,  2594,  2595,
     1083    2597,  2602,  2604,  2606,  2608,  2610,  2615,  2616,  2618,  2620,
     1084    2625,  2627,  2635,  2636,  2637,  2642,  2643,  2647,  2649,  2651,
     1085    2653,  2655,  2657,  2664,  2666,  2668,  2670,  2672,  2674,  2676,
     1086    2678,  2680,  2682,  2687,  2689,  2691,  2696,  2722,  2723,  2725,
     1087    2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,  2751,  2753,
     1088    2755,  2757,  2759,  2761,  2766,  2771,  2773,  2775,  2793,  2795,
     1089    2800,  2801
    10941090};
    10951091#endif
     
    11031099  "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL",
    11041100  "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE",
    1105   "SIGNED", "UNSIGNED", "VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF",
    1106   "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT",
    1107   "SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH",
    1108   "CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO",
    1109   "RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH",
    1110   "CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS",
    1111   "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",
    1112   "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",
    1113   "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
     1101  "SIGNED", "UNSIGNED", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", "LABEL",
     1102  "ENUM", "STRUCT", "UNION", "TYPE", "FTYPE", "DTYPE", "CONTEXT", "SIZEOF",
     1103  "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE",
     1104  "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN",
     1105  "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME",
     1106  "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF",
     1107  "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL",
     1108  "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname",
     1109  "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
    11141110  "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant",
    11151111  "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE",
     
    11561152  "sue_declaration_specifier", "sue_type_specifier",
    11571153  "typedef_declaration_specifier", "typedef_type_specifier",
    1158   "elaborated_type_name", "aggregate_name", "$@2", "aggregate_key",
     1154  "elaborated_type_name", "aggregate_name", "aggregate_key",
    11591155  "field_declaration_list", "field_declaration",
    11601156  "new_field_declaring_list", "field_declaring_list", "field_declarator",
    11611157  "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name",
    1162   "$@3", "enumerator_list", "enumerator_value_opt",
    1163   "new_parameter_type_list_opt", "new_parameter_type_list",
    1164   "new_parameter_list", "new_abstract_parameter_list",
    1165   "parameter_type_list_opt", "parameter_type_list", "parameter_list",
    1166   "new_parameter_declaration", "new_abstract_parameter_declaration",
    1167   "parameter_declaration", "abstract_parameter_declaration",
    1168   "identifier_list", "identifier_or_type_name",
    1169   "no_01_identifier_or_type_name", "no_attr_identifier_or_type_name",
    1170   "type_name_no_function", "type_name", "initializer_opt", "initializer",
    1171   "initializer_list", "designation", "designator_list", "designator",
    1172   "typegen_declaration_specifier", "typegen_type_specifier",
    1173   "typegen_name", "type_parameter_list", "type_parameter", "$@4",
    1174   "type_class", "assertion_list_opt", "assertion", "type_name_list",
    1175   "type_declaring_list", "type_declarator", "type_declarator_name",
    1176   "trait_specifier", "$@5", "trait_declaration_list", "trait_declaration",
    1177   "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
    1178   "external_definition_list", "external_definition_list_opt",
    1179   "external_definition", "$@6", "external_function_definition",
    1180   "function_definition", "declarator", "subrange", "asm_name_opt",
    1181   "attribute_list_opt", "attribute_list", "attribute",
    1182   "attribute_parameter_list", "attrib", "any_word", "variable_declarator",
    1183   "paren_identifier", "variable_ptr", "variable_array",
    1184   "variable_function", "function_declarator", "function_no_ptr",
    1185   "function_ptr", "function_array", "old_function_declarator",
    1186   "old_function_no_ptr", "old_function_ptr", "old_function_array",
    1187   "type_redeclarator", "paren_type", "type_ptr", "type_array",
    1188   "type_function", "identifier_parameter_declarator",
     1158  "enumerator_list", "enumerator_value_opt", "new_parameter_type_list_opt",
     1159  "new_parameter_type_list", "new_parameter_list",
     1160  "new_abstract_parameter_list", "parameter_type_list_opt",
     1161  "parameter_type_list", "parameter_list", "new_parameter_declaration",
     1162  "new_abstract_parameter_declaration", "parameter_declaration",
     1163  "abstract_parameter_declaration", "identifier_list",
     1164  "identifier_or_type_name", "no_01_identifier_or_type_name",
     1165  "no_attr_identifier_or_type_name", "type_name_no_function", "type_name",
     1166  "initializer_opt", "initializer", "initializer_list", "designation",
     1167  "designator_list", "designator", "typegen_declaration_specifier",
     1168  "typegen_type_specifier", "typegen_name", "type_parameter_list",
     1169  "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
     1170  "type_name_list", "type_declaring_list", "type_declarator",
     1171  "type_declarator_name", "context_specifier", "$@3",
     1172  "context_declaration_list", "context_declaration",
     1173  "new_context_declaring_list", "context_declaring_list",
     1174  "translation_unit", "external_definition_list",
     1175  "external_definition_list_opt", "external_definition", "$@4",
     1176  "external_function_definition", "function_definition", "declarator",
     1177  "subrange", "asm_name_opt", "attribute_list_opt", "attribute_list",
     1178  "attribute", "attribute_parameter_list", "attrib", "any_word",
     1179  "variable_declarator", "paren_identifier", "variable_ptr",
     1180  "variable_array", "variable_function", "function_declarator",
     1181  "function_no_ptr", "function_ptr", "function_array",
     1182  "old_function_declarator", "old_function_no_ptr", "old_function_ptr",
     1183  "old_function_array", "type_redeclarator", "paren_type", "type_ptr",
     1184  "type_array", "type_function", "identifier_parameter_declarator",
    11891185  "identifier_parameter_ptr", "identifier_parameter_array",
    11901186  "identifier_parameter_function", "type_parameter_redeclarator",
     
    12231219     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
    12241220     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    1225      355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
    1226       41,    91,    93,    46,   123,   125,    44,    58,    33,    42,
    1227       38,    43,    45,   126,    47,    37,    60,    62,    94,   124,
    1228       63,    61,    59
     1221     355,   356,   357,   358,   359,   360,   361,   362,    40,    41,
     1222      91,    93,    46,   123,   125,    44,    58,    33,    42,    38,
     1223      43,    45,   126,    47,    37,    60,    62,    94,   124,    63,
     1224      61,    59
    12291225};
    12301226# endif
     
    12331229static const yytype_uint16 yyr1[] =
    12341230{
    1235        0,   133,   134,   135,   136,   136,   136,   137,   137,   137,
    1236      138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
    1237      142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
    1238      143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
    1239      146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
    1240      148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
    1241      148,   148,   148,   148,   148,   149,   149,   149,   149,   150,
    1242      150,   150,   151,   151,   151,   151,   152,   152,   152,   153,
    1243      153,   153,   154,   154,   154,   154,   154,   155,   155,   155,
    1244      156,   156,   157,   157,   158,   158,   159,   159,   160,   160,
    1245      161,   161,   161,   161,   162,   163,   163,   163,   163,   164,
    1246      164,   165,   165,   165,   165,   166,   166,   167,   167,   167,
    1247      167,   167,   167,   167,   167,   167,   167,   168,   168,   169,
    1248      169,   170,   170,   170,   170,   170,   170,   170,   170,   170,
    1249      171,   172,   172,   173,   173,   174,   174,   174,   174,   175,
    1250      175,   176,   177,   177,   177,   177,   177,   177,   178,   178,
    1251      178,   179,   179,   180,   180,   181,   181,   182,   183,   183,
    1252      184,   184,   185,   185,   186,   186,   186,   186,   187,   187,
    1253      188,   188,   189,   189,   189,   190,   190,   191,   191,   191,
    1254      191,   191,   191,   191,   191,   191,   191,   192,   192,   192,
    1255      193,   193,   193,   193,   193,   194,   194,   194,   194,   195,
    1256      196,   196,   196,   196,   196,   197,   197,   197,   197,   197,
    1257      198,   198,   199,   199,   200,   200,   201,   201,   202,   202,
    1258      202,   203,   203,   204,   204,   205,   205,   206,   206,   207,
    1259      207,   208,   208,   209,   209,   210,   210,   211,   211,   212,
    1260      212,   212,   212,   212,   213,   213,   213,   214,   214,   214,
    1261      215,   215,   215,   215,   215,   216,   216,   216,   217,   217,
    1262      218,   218,   218,   219,   219,   219,   219,   219,   220,   220,
    1263      221,   221,   221,   221,   222,   222,   223,   223,   223,   223,
    1264      224,   224,   224,   224,   225,   225,   226,   226,   227,   227,
    1265      228,   228,   228,   228,   228,   229,   228,   230,   230,   230,
    1266      231,   231,   232,   233,   233,   233,   233,   233,   233,   233,
    1267      233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
    1268      234,   234,   234,   234,   235,   235,   235,   235,   235,   236,
    1269      236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
    1270      239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
    1271      242,   242,   242,   243,   243,   244,   244,   245,   244,   244,
    1272      244,   246,   246,   247,   247,   248,   248,   248,   248,   249,
    1273      249,   249,   249,   250,   250,   251,   251,   251,   251,   251,
    1274      252,   252,   253,   254,   255,   255,   256,   255,   257,   257,
    1275      258,   258,   259,   259,   260,   260,   260,   260,   260,   261,
    1276      261,   261,   261,   262,   262,   263,   263,   264,   264,   265,
    1277      265,   265,   265,   266,   266,   266,   266,   266,   267,   267,
    1278      267,   267,   267,   268,   268,   269,   269,   270,   270,   271,
    1279      271,   271,   272,   272,   272,   273,   273,   273,   274,   274,
    1280      274,   275,   275,   275,   275,   276,   276,   276,   277,   277,
    1281      278,   278,   278,   278,   278,   279,   279,   280,   280,   281,
    1282      281,   281,   281,   281,   281,   282,   282,   282,   282,   283,
    1283      283,   283,   284,   285,   285,   287,   286,   286,   288,   288,
    1284      288,   289,   289,   290,   290,   290,   291,   291,   291,   291,
    1285      292,   292,   292,   293,   293,   294,   294,   295,   296,   295,
    1286      297,   297,   298,   298,   299,   299,   299,   300,   300,   301,
    1287      301,   302,   302,   303,   303,   304,   304,   304,   305,   304,
    1288      304,   306,   306,   306,   307,   307,   307,   307,   307,   307,
    1289      307,   307,   307,   308,   308,   308,   309,   310,   310,   311,
    1290      311,   312,   312,   313,   314,   314,   315,   315,   315,   316,
    1291      316,   316,   316,   317,   317,   317,   317,   318,   318,   319,
    1292      319,   319,   320,   320,   320,   320,   321,   321,   322,   322,
    1293      322,   323,   323,   323,   324,   324,   324,   325,   325,   325,
    1294      326,   326,   326,   327,   327,   327,   328,   328,   328,   329,
    1295      329,   329,   330,   330,   330,   330,   331,   331,   332,   332,
    1296      332,   333,   333,   333,   333,   334,   334,   334,   335,   335,
    1297      335,   335,   336,   336,   336,   337,   337,   337,   337,   338,
    1298      338,   338,   339,   339,   339,   339,   340,   340,   341,   341,
    1299      341,   342,   342,   343,   343,   344,   344,   344,   345,   345,
    1300      345,   345,   345,   346,   346,   346,   346,   347,   347,   347,
    1301      348,   348,   348,   349,   349,   349,   349,   350,   350,   350,
    1302      351,   351,   351,   351,   351,   352,   352,   352,   352,   353,
    1303      353,   353,   354,   354,   354,   355,   355,   355,   355,   355,
    1304      355,   356,   356,   356,   357,   357,   357,   357,   357,   358,
    1305      358,   358,   358,   359,   359,   360,   360,   360,   361,   361,
    1306      362,   362,   362,   362,   362,   362,   363,   363,   363,   363,
    1307      363,   363,   363,   363,   363,   363,   364,   364,   364,   364,
    1308      365,   365,   365,   366,   366,   367,   367,   367,   367,   367,
    1309      367,   368,   368,   368,   368,   368,   368,   369,   370,   370,
    1310      370,   371,   371,   372,   372
     1231       0,   132,   133,   134,   135,   135,   135,   136,   136,   136,
     1232     137,   137,   138,   138,   139,   139,   140,   140,   141,   141,
     1233     141,   141,   142,   142,   142,   142,   142,   142,   142,   142,
     1234     142,   142,   142,   143,   143,   144,   144,   144,   144,   144,
     1235     145,   145,   146,   146,   146,   146,   146,   147,   147,   147,
     1236     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
     1237     147,   147,   147,   147,   147,   148,   148,   148,   148,   149,
     1238     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
     1239     152,   152,   153,   153,   153,   153,   153,   154,   154,   154,
     1240     155,   155,   156,   156,   157,   157,   158,   158,   159,   159,
     1241     160,   160,   160,   160,   161,   162,   162,   162,   162,   163,
     1242     163,   164,   164,   164,   164,   165,   165,   166,   166,   166,
     1243     166,   166,   166,   166,   166,   166,   166,   167,   167,   168,
     1244     168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
     1245     170,   171,   171,   172,   172,   173,   173,   173,   173,   174,
     1246     174,   175,   176,   176,   176,   176,   176,   176,   177,   177,
     1247     177,   178,   178,   179,   179,   180,   180,   181,   182,   182,
     1248     183,   183,   184,   184,   185,   185,   185,   185,   186,   186,
     1249     187,   187,   188,   188,   188,   189,   189,   190,   190,   190,
     1250     190,   190,   190,   190,   190,   190,   190,   191,   191,   191,
     1251     192,   192,   192,   192,   192,   193,   193,   193,   193,   194,
     1252     195,   195,   195,   195,   195,   196,   196,   196,   196,   196,
     1253     197,   197,   198,   198,   199,   199,   200,   200,   201,   201,
     1254     201,   202,   202,   203,   203,   204,   204,   205,   205,   206,
     1255     206,   207,   207,   208,   208,   209,   209,   210,   210,   211,
     1256     211,   211,   211,   211,   212,   212,   212,   213,   213,   213,
     1257     214,   214,   214,   214,   214,   215,   215,   215,   216,   216,
     1258     217,   217,   217,   218,   218,   218,   218,   218,   219,   219,
     1259     220,   220,   220,   220,   221,   221,   222,   222,   222,   222,
     1260     223,   223,   223,   223,   224,   224,   225,   225,   226,   226,
     1261     227,   227,   227,   227,   227,   228,   227,   229,   229,   229,
     1262     230,   230,   231,   232,   232,   232,   232,   232,   232,   232,
     1263     232,   233,   233,   233,   233,   233,   233,   233,   233,   233,
     1264     233,   233,   233,   234,   234,   234,   234,   234,   235,   235,
     1265     236,   236,   236,   236,   237,   237,   237,   237,   238,   238,
     1266     238,   238,   239,   239,   239,   240,   240,   240,   240,   241,
     1267     241,   241,   242,   242,   243,   243,   243,   243,   243,   244,
     1268     244,   245,   245,   246,   246,   246,   246,   247,   247,   247,
     1269     247,   248,   248,   249,   249,   249,   249,   249,   250,   250,
     1270     251,   252,   253,   253,   253,   254,   254,   255,   255,   256,
     1271     256,   257,   257,   257,   257,   257,   258,   258,   258,   258,
     1272     259,   259,   260,   260,   261,   261,   262,   262,   262,   262,
     1273     263,   263,   263,   263,   263,   264,   264,   264,   264,   264,
     1274     265,   265,   266,   266,   267,   267,   268,   268,   268,   269,
     1275     269,   269,   270,   270,   270,   271,   271,   271,   272,   272,
     1276     272,   272,   273,   273,   273,   274,   274,   275,   275,   275,
     1277     275,   275,   276,   276,   277,   277,   278,   278,   278,   278,
     1278     278,   278,   279,   279,   279,   279,   280,   280,   280,   281,
     1279     282,   282,   284,   283,   283,   285,   285,   285,   286,   286,
     1280     287,   287,   287,   288,   288,   288,   288,   289,   289,   289,
     1281     290,   290,   291,   291,   292,   293,   292,   294,   294,   295,
     1282     295,   296,   296,   296,   297,   297,   298,   298,   299,   299,
     1283     300,   300,   301,   301,   301,   302,   301,   301,   303,   303,
     1284     303,   304,   304,   304,   304,   304,   304,   304,   304,   304,
     1285     305,   305,   305,   306,   307,   307,   308,   308,   309,   309,
     1286     310,   311,   311,   312,   312,   312,   313,   313,   313,   313,
     1287     314,   314,   314,   314,   315,   315,   316,   316,   316,   317,
     1288     317,   317,   317,   318,   318,   319,   319,   319,   320,   320,
     1289     320,   321,   321,   321,   322,   322,   322,   323,   323,   323,
     1290     324,   324,   324,   325,   325,   325,   326,   326,   326,   327,
     1291     327,   327,   327,   328,   328,   329,   329,   329,   330,   330,
     1292     330,   330,   331,   331,   331,   332,   332,   332,   332,   333,
     1293     333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
     1294     336,   336,   336,   337,   337,   338,   338,   338,   339,   339,
     1295     340,   340,   341,   341,   341,   342,   342,   342,   342,   342,
     1296     343,   343,   343,   343,   344,   344,   344,   345,   345,   345,
     1297     346,   346,   346,   346,   347,   347,   347,   348,   348,   348,
     1298     348,   348,   349,   349,   349,   349,   350,   350,   350,   351,
     1299     351,   351,   352,   352,   352,   352,   352,   352,   353,   353,
     1300     353,   354,   354,   354,   354,   354,   355,   355,   355,   355,
     1301     356,   356,   357,   357,   357,   358,   358,   359,   359,   359,
     1302     359,   359,   359,   360,   360,   360,   360,   360,   360,   360,
     1303     360,   360,   360,   361,   361,   361,   361,   362,   362,   362,
     1304     363,   363,   364,   364,   364,   364,   364,   364,   365,   365,
     1305     365,   365,   365,   365,   366,   367,   367,   367,   368,   368,
     1306     369,   369
    13111307};
    13121308
     
    13471343       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
    13481344       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1349        1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
    1350        3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
    1351        2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
    1352        1,     2,     2,     1,     1,     4,     2,     0,     6,     7,
    1353        2,     2,     2,     1,     2,     2,     3,     2,     3,     1,
    1354        2,     3,     2,     2,     4,     0,     1,     2,     2,     1,
    1355        0,     1,     2,     2,     5,     2,     0,     7,     2,     4,
    1356        0,     2,     0,     1,     1,     1,     5,     5,     5,     1,
    1357        5,     5,     9,     1,     5,     0,     1,     1,     5,     1,
    1358        1,     5,     5,     1,     3,     3,     4,     1,     1,     1,
    1359        1,     2,     1,     3,     3,     1,     2,     1,     3,     1,
    1360        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
    1361        2,     1,     1,     1,     2,     0,     2,     2,     1,     4,
    1362        0,     1,     2,     3,     4,     2,     2,     1,     2,     1,
    1363        2,     5,     5,     7,     6,     1,     2,     2,     3,     1,
    1364        2,     2,     4,     2,     4,     0,     4,     2,     1,     1,
    1365        1,     0,     2,     5,     5,    13,     1,     1,     3,     3,
    1366        2,     3,     3,     2,     4,     1,     6,     9,     0,    11,
    1367        1,     3,     3,     3,     1,     1,     5,     2,     5,     0,
    1368        1,     1,     3,     0,     1,     1,     1,     1,     0,     6,
    1369        2,     1,     2,     4,     2,     3,     3,     3,     4,     5,
    1370        5,     5,     6,     1,     1,     1,     3,     0,     5,     0,
    1371        1,     1,     2,     6,     1,     3,     0,     1,     4,     1,
    1372        1,     1,     1,     2,     1,     2,     2,     1,     3,     2,
    1373        3,     3,     2,     4,     4,     3,     8,     3,     2,     1,
    1374        2,     6,     8,     3,     2,     3,     3,     4,     4,     3,
    1375        1,     1,     1,     4,     6,     3,     2,     3,     3,     4,
    1376        4,     3,     2,     1,     2,     2,     1,     3,     2,     3,
    1377        3,     2,     4,     4,     3,     6,     8,     3,     2,     1,
    1378        2,     2,     2,     3,     3,     2,     4,     4,     3,     6,
    1379        8,     3,     2,     1,     2,     2,     1,     1,     2,     3,
    1380        3,     2,     4,     6,     8,     1,     2,     2,     1,     2,
    1381        2,     3,     3,     1,     4,     4,     3,     5,     8,     3,
    1382        2,     3,     1,     5,     5,     6,     6,     1,     2,     2,
    1383        1,     2,     2,     3,     3,     1,     4,     4,     3,     5,
    1384        8,     3,     1,     2,     1,     2,     6,     5,     6,     7,
    1385        7,     1,     2,     2,     1,     2,     2,     3,     3,     1,
    1386        4,     4,     3,     8,     3,     1,     1,     2,     1,     1,
    1387        2,     3,     2,     3,     2,     3,     3,     2,     4,     3,
    1388        2,     3,     2,     4,     3,     2,     6,     6,     6,     7,
    1389        1,     2,     1,     1,     1,     2,     3,     2,     3,     2,
    1390        3,     3,     4,     2,     3,     4,     2,     5,     5,     6,
    1391        6,     0,     1,     0,     2
     1345       1,     1,     1,     1,     2,     2,     3,     3,     1,     3,
     1346       1,     2,     2,     2,     4,     4,     4,     4,     1,     2,
     1347       2,     3,     1,     2,     2,     1,     2,     2,     3,     1,
     1348       2,     2,     1,     1,     4,     2,     5,     7,     2,     2,
     1349       2,     1,     2,     2,     3,     2,     3,     1,     2,     3,
     1350       2,     2,     4,     0,     1,     2,     2,     1,     0,     1,
     1351       2,     2,     5,     6,     2,     2,     4,     0,     2,     0,
     1352       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
     1353       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
     1354       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
     1355       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
     1356       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
     1357       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
     1358       3,     4,     2,     2,     1,     2,     1,     2,     5,     5,
     1359       7,     6,     1,     2,     2,     3,     1,     2,     2,     4,
     1360       2,     4,     0,     4,     2,     1,     1,     1,     0,     2,
     1361       5,     5,    13,     1,     1,     3,     3,     2,     3,     3,
     1362       2,     4,     1,     6,     9,     0,    11,     1,     3,     3,
     1363       3,     1,     1,     5,     2,     5,     0,     1,     1,     3,
     1364       0,     1,     1,     1,     1,     0,     6,     2,     1,     2,
     1365       4,     2,     3,     3,     3,     4,     5,     5,     5,     6,
     1366       1,     1,     1,     3,     0,     5,     0,     1,     1,     2,
     1367       6,     1,     3,     0,     1,     4,     1,     1,     1,     1,
     1368       2,     1,     2,     2,     1,     3,     2,     3,     3,     2,
     1369       4,     4,     3,     8,     3,     2,     1,     2,     6,     8,
     1370       3,     2,     3,     3,     4,     4,     3,     1,     1,     1,
     1371       4,     6,     3,     2,     3,     3,     4,     4,     3,     2,
     1372       1,     2,     2,     1,     3,     2,     3,     3,     2,     4,
     1373       4,     3,     6,     8,     3,     2,     1,     2,     2,     2,
     1374       3,     3,     2,     4,     4,     3,     6,     8,     3,     2,
     1375       1,     2,     2,     1,     1,     2,     3,     3,     2,     4,
     1376       6,     8,     1,     2,     2,     1,     2,     2,     3,     3,
     1377       1,     4,     4,     3,     5,     8,     3,     2,     3,     1,
     1378       5,     5,     6,     6,     1,     2,     2,     1,     2,     2,
     1379       3,     3,     1,     4,     4,     3,     5,     8,     3,     1,
     1380       2,     1,     2,     6,     5,     6,     7,     7,     1,     2,
     1381       2,     1,     2,     2,     3,     3,     1,     4,     4,     3,
     1382       8,     3,     1,     1,     2,     1,     1,     2,     3,     2,
     1383       3,     2,     3,     3,     2,     4,     3,     2,     3,     2,
     1384       4,     3,     2,     6,     6,     6,     7,     1,     2,     1,
     1385       1,     1,     2,     3,     2,     3,     2,     3,     3,     4,
     1386       2,     3,     4,     2,     5,     5,     6,     6,     0,     1,
     1387       0,     2
    13921388};
    13931389
     
    13991395     294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
    14001396     301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
    1401      327,   328,   333,   330,   331,   332,   549,   549,   549,     0,
    1402        0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
    1403        8,    14,    15,     0,     2,   294,   567,     9,   527,   525,
    1404      247,     3,   455,     3,   260,     0,     3,     3,     3,   248,
    1405        3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
    1406      312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
    1407      363,     0,     0,   364,   289,   475,   479,     3,     3,     0,
    1408        2,   521,   526,   531,   299,     0,     0,   549,   579,   549,
    1409        2,   590,   591,   592,   294,     0,   733,   734,     0,    12,
    1410      294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
    1411      293,   528,   305,   393,   550,   551,   371,   372,    12,   446,
    1412      447,    11,   442,   445,     0,   505,   500,   491,   446,   447,
    1413        0,     0,   530,   221,     0,   294,     0,     0,     0,     0,
    1414        0,     0,     0,     0,   294,   294,     2,     0,   735,   295,
    1415      584,   596,   739,   732,   730,   737,     0,     0,     0,   254,
    1416        2,     0,   534,   440,   441,   439,     0,     0,     0,     0,
    1417      549,     0,   636,   637,     0,     0,   547,   543,   549,   564,
    1418      549,   549,   544,     2,   545,   549,   603,   549,   549,   606,
    1419        0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
    1420      297,   308,   342,   354,   480,     0,     2,     0,   455,   262,
    1421      295,   335,   350,   357,   476,     0,     2,     0,   311,   336,
    1422      343,   344,     0,   351,   355,   358,   362,   447,   294,   294,
    1423      366,   370,     0,   395,   477,   481,     0,     0,     0,     1,
    1424      294,     2,   532,   578,   580,   294,     2,   743,   295,   746,
    1425      547,   547,   295,     0,     0,     0,   273,   549,   544,     2,
    1426      294,     0,     0,   294,   552,     2,   503,     2,   556,     0,
    1427        0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
    1428       16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
    1429       67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
    1430       76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
    1431      105,   497,   753,   453,   496,     0,   451,   452,     0,   568,
    1432      583,   586,   589,   595,   598,   601,   360,     0,     2,   741,
    1433        0,   294,   744,     2,   294,     3,   427,     0,   435,   295,
    1434      294,   307,   334,   287,   349,   356,     3,     3,   409,   413,
    1435      423,   428,   475,   294,   429,   708,   709,   294,   430,   432,
    1436      294,     2,   585,   597,   731,     2,     2,   249,     2,   460,
    1437        0,   458,   457,   456,   141,     2,     2,   251,     2,     2,
    1438      250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
    1439        0,     0,     0,     0,     0,     0,   569,   608,     0,   455,
    1440        2,   563,   572,   662,   565,   566,   535,   294,     2,   602,
    1441      611,   604,   605,     0,   276,   294,   294,   340,   295,     0,
    1442      295,     0,   294,   736,   740,   738,   536,   294,   547,   255,
    1443      263,   309,     0,     2,   537,   294,   501,   337,   338,   283,
    1444      352,   359,     0,   294,     2,   385,   294,   373,     0,     0,
    1445      379,   730,     0,   751,   400,     0,   478,   502,   252,   253,
    1446      522,   294,   437,     0,   294,   237,     0,     2,   239,     0,
    1447      295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
    1448      547,   294,   488,   490,   489,     0,     0,   753,     0,   294,
    1449        0,   294,   492,   294,   562,   560,   561,   559,     0,   554,
    1450      557,     0,     0,   294,    56,   294,    69,    52,   294,    62,
    1451      294,   294,    50,    51,    64,     2,   127,     0,     0,   449,
    1452        0,   448,   111,   294,    54,    55,    17,     0,    29,    30,
    1453       35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
    1454      123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
     1397     327,   328,   330,   331,   332,   546,   546,   546,     0,     0,
     1398       0,   294,   220,   304,   319,   320,     7,   359,     0,     8,
     1399      14,    15,     0,     2,   294,   564,     9,   524,   522,   247,
     1400       3,   452,     3,   260,     0,     3,     3,     3,   248,     3,
     1401       0,     0,     0,   295,   296,   298,   294,   307,   310,   312,
     1402     340,   286,   333,   338,   287,   348,   288,   355,   352,   362,
     1403       0,     0,   363,   289,   472,   476,     3,     3,     0,     2,
     1404     518,   523,   528,   299,     0,     0,   546,   576,   546,     2,
     1405     587,   588,   589,   294,     0,   730,   731,     0,    12,   294,
     1406       0,    13,   270,   271,     0,   295,   290,   291,   292,   293,
     1407     525,   305,   391,   547,   548,   369,   370,    12,   443,   444,
     1408      11,   439,   442,     0,   502,   497,   488,   443,   444,     0,
     1409       0,   527,   221,     0,   294,     0,     0,     0,     0,     0,
     1410       0,     0,     0,   294,   294,     2,     0,   732,   295,   581,
     1411     593,   736,   729,   727,   734,     0,     0,     0,   254,     2,
     1412       0,   531,   437,   438,   436,     0,     0,     0,     0,   546,
     1413       0,   633,   634,     0,     0,   544,   540,   546,   561,   546,
     1414     546,   541,     2,   542,   546,   600,   546,   546,   603,     0,
     1415       0,     0,   294,   294,   313,   360,     2,   294,   261,   297,
     1416     308,   341,   353,   477,     0,     2,     0,   452,   262,   295,
     1417     334,   349,   356,   473,     0,     2,     0,   311,   335,   342,
     1418     343,     0,   350,   354,   357,   361,   444,   294,   294,   365,
     1419     368,     0,   394,   474,   478,     0,     0,     0,     1,   294,
     1420       2,   529,   575,   577,   294,     2,   740,   295,   743,   544,
     1421     544,   295,     0,     0,     0,   273,   546,   541,     2,   294,
     1422       0,     0,   294,   549,     2,   500,     2,   553,     0,     0,
     1423       0,     0,     0,     0,    18,    59,     4,     5,     6,    16,
     1424       0,     0,     0,   294,     2,     0,   294,    65,    66,    67,
     1425      68,    48,    19,    49,    22,    47,    69,     0,    72,    76,
     1426      79,    82,    87,    90,    92,    94,    96,    98,   100,   105,
     1427     494,   750,   450,   493,     0,   448,   449,     0,   565,   580,
     1428     583,   586,   592,   595,   598,   359,     0,     2,   738,     0,
     1429     294,   741,     2,   294,     3,   424,     0,   432,   295,   294,
     1430     307,   333,   287,   348,   355,     3,     3,   406,   410,   420,
     1431     425,   472,   294,   426,   705,   706,   294,   427,   429,   294,
     1432       2,   582,   594,   728,     2,     2,   249,     2,   457,     0,
     1433     455,   454,   453,   141,     2,     2,   251,     2,     2,   250,
     1434       2,   281,     2,   282,     0,   280,     0,     0,     0,     0,
     1435       0,     0,     0,     0,     0,   566,   605,     0,   452,     2,
     1436     560,   569,   659,   562,   563,   532,   294,     2,   599,   608,
     1437     601,   602,     0,   276,   294,   294,   339,   295,     0,   295,
     1438       0,   294,   733,   737,   735,   533,   294,   544,   255,   263,
     1439     309,     0,     2,   534,   294,   498,   336,   337,   283,   351,
     1440     358,     0,   294,     2,   383,   294,   371,     0,     0,   377,
     1441     727,   294,   748,   397,     0,   475,   499,   252,   253,   519,
     1442     294,   434,     0,   294,   237,     0,     2,   239,     0,   295,
     1443       0,   257,     2,   258,   278,     0,     0,     2,   294,   544,
     1444     294,   485,   487,   486,     0,     0,   750,     0,   294,     0,
     1445     294,   489,   294,   559,   557,   558,   556,     0,   551,   554,
     1446       0,     0,   294,    56,   294,    69,    52,   294,    62,   294,
     1447     294,    50,    51,    64,     2,   127,     0,     0,   446,     0,
     1448     445,   111,   294,    54,    55,    17,     0,    29,    30,    35,
     1449       2,     0,    35,   117,   118,   119,   120,   121,   122,   123,
     1450     124,   125,   126,     0,     0,    53,     0,     0,     0,     0,
    14551451       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    1456        0,     0,     0,     0,     0,     0,     0,   108,     2,   648,
    1457      454,   645,   549,   549,   653,   482,   294,     2,   587,   588,
    1458        0,   599,   600,     0,     2,   742,   745,   111,   294,     2,
    1459      294,     0,   710,   295,   714,   705,   706,   712,     0,     2,
    1460        2,   670,   549,   753,   619,   549,   549,   753,   549,   633,
    1461      549,   549,   684,   436,   667,   549,   549,   675,   682,   294,
    1462      431,   295,     0,     0,   294,   720,   295,   725,   753,   717,
    1463      294,   722,   753,   294,   294,   294,     0,   111,     0,    18,
    1464        5,     2,     0,    19,     0,   461,   751,     0,     0,   467,
    1465      241,     0,   294,     0,     0,     0,   547,   571,   575,   577,
    1466      607,   610,   614,   617,   570,   609,     0,   284,   660,     0,
    1467      294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
    1468      538,   294,     0,     0,     0,     0,   294,   294,     0,     0,
    1469      694,   383,   386,   390,   549,   390,   699,   389,   691,   549,
    1470      549,   365,   374,   382,   375,   549,   377,   380,   294,   752,
    1471        0,     0,   398,     0,   295,     3,   416,     3,   420,   419,
    1472      593,     0,   533,   294,     3,     3,   294,   435,   295,     3,
    1473      429,   430,     2,     0,     0,     0,   487,   306,   294,   483,
    1474      485,     3,     2,     2,     0,   504,     3,     0,   556,   129,
    1475        0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
    1476        0,     0,   111,   294,    20,     0,    21,     0,   694,   450,
    1477        0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
    1478       25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
    1479       81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
    1480       97,    99,     0,     0,   754,   294,     0,     0,     0,   649,
    1481      650,   646,   647,   499,   498,   294,     0,     3,   294,   716,
    1482      294,   721,   295,   294,   294,   294,   664,   707,   663,     2,
    1483      294,     0,     0,     0,     0,     0,     0,     0,     0,   685,
    1484        0,   671,   622,   638,   672,     2,   618,   625,   433,   620,
    1485      621,   434,     2,   632,   641,   634,   635,   668,   669,   683,
    1486      711,   715,   713,   753,   268,     2,   747,     2,   424,   719,
    1487      724,   425,     0,   403,     3,     3,     3,     3,   455,     3,
    1488        0,     2,   470,   466,   752,     0,   462,   469,     2,   465,
    1489      468,     0,   294,   242,   264,     3,   272,   274,     0,   455,
    1490        2,   573,   574,     2,   612,   613,     0,   661,   539,     3,
    1491      346,   345,   348,   347,   294,   540,     0,   541,   294,   376,
    1492      378,     2,     0,     0,     0,     0,   104,   392,   695,   696,
    1493      387,   391,   388,   692,   693,   381,   385,   294,   400,   394,
    1494      401,   751,     0,     0,   438,   240,     0,     0,     3,     2,
    1495      670,   431,     0,   529,     0,   753,   491,     0,   294,   294,
    1496      294,     0,   553,   555,   130,     0,     0,   215,     0,     0,
    1497        0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
    1498        0,   128,   695,   460,    70,    71,   110,   115,     3,   109,
    1499        0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
    1500        3,   652,   656,   659,   651,     3,   594,     3,   718,   723,
    1501        2,   294,     3,     3,   295,     0,     3,   624,   628,   631,
    1502      640,   674,   678,   681,   294,     3,   623,   639,   673,   294,
    1503      294,   426,   294,   294,   748,     0,     0,     0,     0,   256,
    1504        0,   104,     0,     3,     3,     0,   463,     0,   459,     0,
    1505        0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
    1506        0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
    1507        3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
    1508      138,   145,   147,     0,     0,     0,   285,   294,   294,   549,
    1509        0,   542,   294,   111,   698,   702,   704,   697,   384,   368,
    1510      399,     0,   581,     2,   666,   665,     0,   671,     2,   484,
    1511      486,   506,     3,   514,   515,     0,     2,   510,     3,     3,
    1512        0,     0,   558,   222,     0,     0,     0,   222,     0,     0,
    1513        3,    37,   751,   109,     0,     3,   663,    42,     3,    40,
    1514        3,    34,     0,     3,   101,   103,     0,     2,   654,   655,
    1515        0,     0,   294,     0,     0,     0,     3,   640,     0,     2,
    1516      626,   627,     2,   642,     2,   676,   677,     0,     0,     3,
    1517        0,     3,     3,     3,     3,   411,   410,   414,     2,     2,
    1518      750,   749,   112,     0,     0,     0,     0,     3,   464,     3,
    1519        0,   243,   146,     3,   295,   294,     0,     0,     0,     0,
    1520        2,   191,     0,   189,     0,     0,     0,     0,     0,     0,
    1521        0,     0,   111,     0,   549,   151,   148,   294,     0,     0,
    1522      267,   279,     3,     3,   548,   615,   369,     2,   700,   701,
    1523      397,   294,   266,   294,     0,   517,   494,   294,     0,     0,
    1524      493,   508,     0,     0,     0,   216,     0,   225,    58,   109,
    1525        0,     0,   116,   113,     0,     0,     0,     0,     0,     0,
    1526       23,     0,   657,   294,   582,   265,   726,   727,   728,     0,
    1527      679,   294,   294,   294,     3,     3,     0,   687,     0,     0,
    1528        0,     0,   294,   294,     3,   546,   471,   472,     0,     0,
    1529      246,   295,     0,     0,     0,     0,   294,   192,   190,     0,
    1530      187,   193,     0,     0,     0,     0,   197,   200,   198,   194,
    1531        0,   195,    35,   129,   144,   142,   244,     0,     0,   294,
    1532      418,   422,   421,     0,   511,     2,   512,     2,   513,   507,
    1533      294,   228,     0,   226,     0,   228,     3,   663,    31,   114,
    1534        2,    45,     2,    43,    41,    28,   112,    26,     3,   729,
    1535        3,     3,     3,     0,     0,   686,   688,   629,   643,   269,
    1536        2,   408,     3,   407,     0,   474,   471,   129,     0,     0,
    1537      129,     3,     0,   129,   188,     0,     2,     2,   209,   199,
    1538        0,     0,     0,     0,   140,   576,   616,     3,     2,     0,
    1539        0,     2,   229,     0,     0,   217,     0,     0,     0,     0,
    1540        0,     0,     0,     0,     0,   689,   690,   294,     0,   473,
    1541      152,     0,     0,     2,   165,   129,   154,     0,   182,     0,
    1542      129,     0,     2,   156,     0,     2,     0,     2,     2,     2,
    1543      196,    32,     0,   294,   516,   518,   509,     0,     0,     0,
    1544        0,   114,    38,     3,     3,   658,   630,   644,   680,   412,
    1545      129,   158,   161,     0,   160,   164,     3,   167,   166,     0,
    1546      129,   184,   129,     3,     0,   294,     0,   294,     0,     2,
    1547        0,     2,   139,   703,     2,   230,   231,     0,   227,   218,
    1548        0,     0,     0,   153,     0,     0,   163,   233,   168,     2,
    1549      235,   183,     0,   186,   172,   201,     3,   210,   214,   203,
    1550        3,     0,   294,     0,   294,     0,     0,     0,    39,    46,
    1551       44,   159,   162,   129,     0,   169,   294,   129,   129,     0,
    1552      173,     0,     0,   694,   211,   212,   213,     0,   202,     3,
    1553      204,     3,   294,   219,   232,   149,   170,   155,   129,   236,
    1554      185,   180,   178,   174,   157,   129,     0,   695,     0,     0,
    1555        0,     0,   150,   171,   181,   175,   179,   178,   176,     3,
    1556        3,     0,     0,   495,   177,   205,   207,     3,     3,   206,
    1557      208
     1452       0,     0,     0,     0,     0,     0,   108,     2,   645,   451,
     1453     642,   546,   546,   650,   479,   294,     2,   584,   585,     0,
     1454     596,   597,     0,     2,   739,   742,   111,   294,     2,   294,
     1455       0,   707,   295,   711,   702,   703,   709,     0,     2,     2,
     1456     667,   546,   750,   616,   546,   546,   750,   546,   630,   546,
     1457     546,   681,   433,   664,   546,   546,   672,   679,   294,   428,
     1458     295,     0,     0,   294,   717,   295,   722,   750,   714,   294,
     1459     719,   750,   294,   294,   294,     0,   111,     0,    18,     5,
     1460       2,     0,    19,     0,   458,   748,     0,     0,   464,   241,
     1461       0,   294,     0,     0,     0,   544,   568,   572,   574,   604,
     1462     607,   611,   614,   567,   606,     0,   284,   657,     0,   294,
     1463     277,     0,     0,     0,     0,   275,     2,     0,   259,   535,
     1464     294,     0,     0,     0,     0,   294,   294,     0,     0,   691,
     1465     381,   384,   388,   546,   388,   696,   387,   688,   546,   546,
     1466     364,   372,   380,   373,   546,   375,   378,   294,   749,     0,
     1467       0,   395,   748,   295,     3,   413,     3,   417,   416,   590,
     1468       0,   530,   294,     3,     3,   294,   432,   295,     3,   426,
     1469     427,     2,     0,     0,     0,   484,   306,   294,   480,   482,
     1470       3,     2,     2,     0,   501,     3,     0,   553,   129,     0,
     1471       0,   222,     0,     0,     0,     2,     0,     0,    36,     0,
     1472       0,   111,   294,    20,     0,    21,     0,   691,   447,     0,
     1473     109,     3,     2,    27,     2,     0,    33,     0,     2,    25,
     1474       0,   106,   107,    73,    74,    75,    77,    78,    80,    81,
     1475      85,    86,    83,    84,    88,    89,    91,    93,    95,    97,
     1476      99,     0,     0,   751,   294,     0,     0,     0,   646,   647,
     1477     643,   644,   496,   495,   294,     0,     3,   294,   713,   294,
     1478     718,   295,   294,   294,   294,   661,   704,   660,     2,   294,
     1479       0,     0,     0,     0,     0,     0,     0,     0,   682,     0,
     1480     668,   619,   635,   669,     2,   615,   622,   430,   617,   618,
     1481     431,     2,   629,   638,   631,   632,   665,   666,   680,   708,
     1482     712,   710,   750,   268,     2,   744,     2,   421,   716,   721,
     1483     422,     0,   400,     3,     3,     3,     3,   452,     3,     0,
     1484       2,   467,   463,   749,     0,   459,   466,     2,   462,   465,
     1485       0,   294,   242,   264,     3,   272,   274,     0,   452,     2,
     1486     570,   571,     2,   609,   610,     0,   658,   536,     3,   345,
     1487     344,   347,   346,   294,   537,     0,   538,   294,   374,   376,
     1488       2,     0,     0,     0,     0,   104,   390,   692,   693,   385,
     1489     389,   386,   689,   690,   379,   383,   366,   397,   392,   398,
     1490       0,     0,     0,   435,   240,     0,     0,     3,     2,   667,
     1491     428,     0,   526,     0,   750,   488,     0,   294,   294,   294,
     1492       0,   550,   552,   130,     0,     0,   215,     0,     0,     0,
     1493     223,   224,    57,     0,    63,   294,     0,    61,    60,     0,
     1494     128,   692,   457,    70,    71,   110,   115,     3,   109,     0,
     1495       0,     0,    24,    35,     3,     0,    32,   102,     0,     3,
     1496     649,   653,   656,   648,     3,   591,     3,   715,   720,     2,
     1497     294,     3,     3,   295,     0,     3,   621,   625,   628,   637,
     1498     671,   675,   678,   294,     3,   620,   636,   670,   294,   294,
     1499     423,   294,   294,   745,     0,     0,     0,     0,   256,     0,
     1500     104,     0,     3,     3,     0,   460,     0,   456,     0,     0,
     1501     245,   294,     0,     0,   129,     0,     0,     0,     0,     0,
     1502     129,     0,     0,   109,   109,     2,     0,     0,     0,     3,
     1503     131,   132,     2,   143,   133,   134,   135,   136,   137,   138,
     1504     145,   147,     0,     0,     0,   285,   294,   294,   546,     0,
     1505     539,   294,   111,   695,   699,   701,   694,   382,   396,   393,
     1506     578,     2,   663,   662,     0,   668,     2,   481,   483,   503,
     1507       3,   511,   512,     0,     2,   507,     3,     3,     0,     0,
     1508     555,   222,     0,     0,     0,   222,     0,     0,     3,    37,
     1509     748,   109,     0,     3,   660,    42,     3,    40,     3,    34,
     1510       0,     3,   101,   103,     0,     2,   651,   652,     0,     0,
     1511     294,     0,     0,     0,     3,   637,     0,     2,   623,   624,
     1512       2,   639,     2,   673,   674,     0,     0,     3,     0,     3,
     1513       3,     3,     3,   408,   407,   411,     2,     2,   747,   746,
     1514     112,     0,     0,     0,     0,     3,   461,     3,     0,   243,
     1515     146,     3,   295,   294,     0,     0,     0,     0,     2,   191,
     1516       0,   189,     0,     0,     0,     0,     0,     0,     0,     0,
     1517     111,     0,   546,   151,   148,   294,     0,     0,   267,   279,
     1518       3,     3,   545,   612,   367,     2,   697,   698,   294,   266,
     1519     294,     0,   514,   491,   294,     0,     0,   490,   505,     0,
     1520       0,     0,   216,     0,   225,    58,   109,     0,     0,   116,
     1521     113,     0,     0,     0,     0,     0,     0,    23,     0,   654,
     1522     294,   579,   265,   723,   724,   725,     0,   676,   294,   294,
     1523     294,     3,     3,     0,   684,     0,     0,     0,     0,   294,
     1524     294,     3,   543,   468,   469,     0,     0,   246,   295,     0,
     1525       0,     0,     0,   294,   192,   190,     0,   187,   193,     0,
     1526       0,     0,     0,   197,   200,   198,   194,     0,   195,    35,
     1527     129,   144,   142,   244,     0,     0,   294,   415,   419,   418,
     1528       0,   508,     2,   509,     2,   510,   504,   294,   228,     0,
     1529     226,     0,   228,     3,   660,    31,   114,     2,    45,     2,
     1530      43,    41,    28,   112,    26,     3,   726,     3,     3,     3,
     1531       0,     0,   683,   685,   626,   640,   269,     2,   405,     3,
     1532     404,     0,   471,   468,   129,     0,     0,   129,     3,     0,
     1533     129,   188,     0,     2,     2,   209,   199,     0,     0,     0,
     1534       0,   140,   573,   613,     3,     2,     0,     0,     2,   229,
     1535       0,     0,   217,     0,     0,     0,     0,     0,     0,     0,
     1536       0,     0,   686,   687,   294,     0,   470,   152,     0,     0,
     1537       2,   165,   129,   154,     0,   182,     0,   129,     0,     2,
     1538     156,     0,     2,     0,     2,     2,     2,   196,    32,     0,
     1539     294,   513,   515,   506,     0,     0,     0,     0,   114,    38,
     1540       3,     3,   655,   627,   641,   677,   409,   129,   158,   161,
     1541       0,   160,   164,     3,   167,   166,     0,   129,   184,   129,
     1542       3,     0,   294,     0,   294,     0,     2,     0,     2,   139,
     1543     700,     2,   230,   231,     0,   227,   218,     0,     0,     0,
     1544     153,     0,     0,   163,   233,   168,     2,   235,   183,     0,
     1545     186,   172,   201,     3,   210,   214,   203,     3,     0,   294,
     1546       0,   294,     0,     0,     0,    39,    46,    44,   159,   162,
     1547     129,     0,   169,   294,   129,   129,     0,   173,     0,     0,
     1548     691,   211,   212,   213,     0,   202,     3,   204,     3,   294,
     1549     219,   232,   149,   170,   155,   129,   236,   185,   180,   178,
     1550     174,   157,   129,     0,   692,     0,     0,     0,     0,   150,
     1551     171,   181,   175,   179,   178,   176,     3,     3,     0,     0,
     1552     492,   177,   205,   207,     3,     3,   206,   208
    15581553};
    15591554
     
    15611556static const yytype_int16 yydefgoto[] =
    15621557{
    1563       -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
    1564      306,   786,   787,  1148,  1149,   307,   308,   309,   310,   311,
    1565      312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
    1566      526,   997,   322,   998,   555,   974,  1079,  1545,  1081,  1082,
    1567     1083,  1084,  1546,  1085,  1086,  1462,  1463,  1424,  1425,  1426,
    1568     1524,  1525,  1529,  1530,  1565,  1566,  1087,  1382,  1088,  1089,
    1569     1316,  1317,  1318,  1506,  1090,   144,   980,   981,   982,  1403,
    1570     1487,  1498,  1499,   476,   477,   902,   903,  1060,    49,    50,
    1571       51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
    1572      348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
    1573       70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
    1574       79,    80,   462,    81,   456,   457,   458,   459,   701,   940,
    1575      702,    82,    83,   465,   463,   722,   882,   883,   356,   357,
    1576      725,   726,   727,   358,   359,   360,   361,   473,   340,   134,
    1577      135,   530,   324,   169,   655,   656,   657,   658,   659,    84,
    1578      120,    86,   496,   497,   966,   498,   276,   502,   325,    87,
    1579      136,   137,    88,  1340,  1126,  1127,  1128,  1129,    89,    90,
    1580      743,    91,   272,    92,    93,   186,  1054,   689,   411,   124,
    1581       94,   508,   509,   510,   187,   267,   189,   190,   191,   268,
    1582       97,    98,    99,   100,   101,   102,   103,   194,   195,   196,
    1583      197,   198,   852,   614,   615,   616,   617,   199,   619,   620,
    1584      621,   580,   581,   582,   583,   706,   104,   623,   624,   625,
    1585      626,   627,   628,   939,   708,   709,   710,   604,   364,   365,
    1586      366,   367,   326,   163,   106,   107,   108,   369,   720,   577
     1558      -1,   839,   474,   301,    45,   131,   132,   302,   303,   304,
     1559     305,   785,   786,  1146,  1147,   306,   307,   308,   309,   310,
     1560     311,   312,   313,   314,   315,   316,   317,   318,   319,  1051,
     1561     525,   996,   321,   997,   554,   973,  1078,  1542,  1080,  1081,
     1562    1082,  1083,  1543,  1084,  1085,  1459,  1460,  1421,  1422,  1423,
     1563    1521,  1522,  1526,  1527,  1562,  1563,  1086,  1379,  1087,  1088,
     1564    1313,  1314,  1315,  1503,  1089,   143,   979,   980,   981,  1400,
     1565    1484,  1495,  1496,   475,   476,   901,   902,  1059,    48,    49,
     1566      50,    51,    52,   345,   156,    55,    56,    57,    58,    59,
     1567     347,    61,    62,   261,    64,    65,   272,   349,   350,    68,
     1568      69,    70,    71,   116,    73,   202,   352,   117,    76,   118,
     1569      78,    79,    80,   455,   456,   457,   458,   700,   939,   701,
     1570      81,    82,   462,   721,   881,   882,   355,   356,   724,   725,
     1571     726,   357,   358,   359,   360,   472,   339,   133,   134,   529,
     1572     323,   168,   654,   655,   656,   657,   658,    83,   119,    85,
     1573     495,   496,   965,   497,   275,   501,   324,    86,   135,   136,
     1574      87,  1337,  1124,  1125,  1126,  1127,    88,    89,   742,    90,
     1575     271,    91,    92,   185,  1053,   688,   410,   123,    93,   507,
     1576     508,   509,   186,   266,   188,   189,   190,   267,    96,    97,
     1577      98,    99,   100,   101,   102,   193,   194,   195,   196,   197,
     1578     851,   613,   614,   615,   616,   198,   618,   619,   620,   579,
     1579     580,   581,   582,   705,   103,   622,   623,   624,   625,   626,
     1580     627,   938,   707,   708,   709,   603,   363,   364,   365,   366,
     1581     325,   162,   105,   106,   107,   368,   719,   576
    15871582};
    15881583
    15891584/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    15901585   STATE-NUM.  */
    1591 #define YYPACT_NINF -1332
     1586#define YYPACT_NINF -1281
    15921587static const yytype_int16 yypact[] =
    15931588{
    1594     3506,  8076, -1332,    12, -1332, -1332, -1332, -1332, -1332, -1332,
    1595    -1332,    61, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1596    -1332, -1332, -1332, -1332, -1332, -1332,   102,   102,   102,  1011,
    1597     1062,    86,  5961,   228, -1332, -1332, -1332, -1332, -1332,   138,
    1598    -1332, -1332, -1332,   684,   144,  9470, -1332, -1332, -1332, -1332,
    1599    -1332, -1332,   190,   182, -1332,  1658, -1332, -1332, -1332, -1332,
    1600      201,  1834,   303,    32,  4928, -1332, -1332,  9508,  1650, -1332,
    1601    -1332, -1332,   615,   401,  4443,   184,   589,   615,  1225, -1332,
    1602    -1332,   848,   938, -1332,   615,  1259, -1332,   301, -1332,   486,
    1603      503, -1332, -1332, -1332, -1332,   316,   182,   102, -1332,   102,
    1604    -1332, -1332, -1332, -1332,  9240,  1658, -1332, -1332,  1658, -1332,
    1605     9354,   391, -1332, -1332, -1332,  1948,  9876, -1332,   810,   810,
    1606      810, -1332, -1332, -1332,   102, -1332, -1332, -1332,   426,   447,
    1607      456, -1332, -1332, -1332,   477, -1332, -1332, -1332, -1332, -1332,
    1608      485,   495, -1332, -1332,    36,  8974,  2459,   272,   545,   579,
    1609      623,   632,   671,   733,  8777,  7372,   596,   719, -1332,  9546,
    1610    -1332, -1332, -1332, -1332,   739, -1332,   209,  3245,  3245, -1332,
    1611      760,   213, -1332, -1332, -1332, -1332,   770,   237,   353,   362,
    1612      102,   755, -1332, -1332,  1834,  1803,   846, -1332,    70, -1332,
    1613      102,   102,   182, -1332, -1332,    98, -1332,   102,   102, -1332,
    1614     2479,   820,   843,   810,  5405, -1332, -1332,   844,  9470, -1332,
    1615    -1332,   615, -1332, -1332, -1332,   182, -1332,  1658,   190, -1332,
    1616     7926, -1332,   810,   810,   810,   182, -1332,  1011, -1332,  2880,
    1617    -1332, -1332,   827,   810, -1332,   810, -1332,   138,  8974,  8891,
    1618      857, -1332,  1062,   864,   810, -1332,  1011,   870,   879, -1332,
    1619     5961,   735, -1332, -1332, -1332,  9437, -1332, -1332,  3894, -1332,
    1620      846,    69,  9876,  6310,  1948,  2479, -1332,   114, -1332, -1332,
    1621     9354,  1658,   875, 11374, -1332, -1332,   546, -1332, 11116,   886,
    1622      926, 10861,   905, 10919, 10938, -1332,   919, -1332, -1332, -1332,
    1623    -1332, 10996, 10996,   735,  8632,   928, 10919,  9088, -1332, -1332,
    1624    -1332, -1332, -1332, -1332,   949, -1332,   840,  2531, 10919, -1332,
    1625      516,   336,   425,   270,   704,   934,   936,   960,   997,    52,
    1626    -1332, -1332,   974,   356, -1332,   290, -1332, -1332,  2459, -1332,
    1627    -1332,   600,   996, -1332,   701,   996,  1007,   138, -1332, -1332,
    1628     1010,  9240, -1332,  1018,  8746, -1332, -1332,  1849,  1084,  8347,
    1629     5405,   615, -1332,   615,   810,   810, -1332, -1332, -1332, -1332,
    1630    -1332, -1332,   810,  9914,  1658, -1332, -1332,  9987,  1975, -1332,
    1631     9012, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1030,  3059,
    1632    10919, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1633    -1332, -1332, -1332, -1332, -1332,  1948, -1332,   773,  1012,  1034,
    1634     1040,   889,  1045,  1051,  1053,  1803, -1332, -1332,  1063,   190,
    1635     1064, -1332, -1332,  1066, -1332, -1332, -1332,  9437, -1332, -1332,
    1636    -1332, -1332, -1332,  2479, -1332,  8974,  8974, -1332,   810,  1948,
    1637     6923,  1658,  8420, -1332, -1332, -1332, -1332,  9437,    69, -1332,
    1638    -1332,   615,   182, -1332, -1332,  9437, -1332,  3625, -1332, -1332,
    1639      810,   810,   464, 10025,  1068,   907,  9695, -1332,   437,   475,
    1640     1062, -1332,  1067,  1069,  1047,  1070,   810, -1332, -1332, -1332,
    1641    -1332, 10283, -1332,   522,  6793, -1332,   182,  1074, -1332,  1948,
    1642    11198,  6368, -1332, -1332, -1332, -1332,   939,  2479, -1332,  8493,
    1643      846,  5374, -1332, -1332, -1332,   828,   610,   974,  1062, 11374,
    1644      861,  9354, -1332, 11374, -1332, -1332, -1332, -1332,   618, -1332,
    1645     1073,   926,   326,  8632, -1332, 10025, -1332, -1332,  8632, -1332,
    1646     8860,  8632, -1332, -1332, -1332,  1077, -1332,   619,  1082,   630,
    1647     1087, -1332,  5066,  7012, -1332, -1332, -1332,    47, -1332, -1332,
    1648    10784, -1332,   474, 10784, -1332, -1332, -1332, -1332, -1332, -1332,
    1649    -1332, -1332, -1332, -1332,  6310,  6310, -1332, 10919, 10919, 10919,
    1650    10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919, 10919,
    1651    10919, 10919, 10919, 10919, 10919,  4001,  6310, -1332,   356,   777,
    1652    -1332, -1332,   102,   102, -1332, -1332,  8974, -1332, -1332,  1066,
    1653      735, -1332,  1066, 10842, -1332, -1332, -1332,  6075,  7012,  1086,
    1654     9202,  1093, -1332, 10055, -1332, -1332,   739, -1332,  1094,   690,
    1655     1096,  1090,   157,   974, -1332,   102,   102,   974,   166, -1332,
    1656      102,   102,  1066, -1332, -1332,   102,   102, -1332,   996, 10137,
    1657     1658, 11343,   372,   531, 10137, -1332,  6678, -1332,   974, -1332,
    1658     9914, -1332,   285,  8042,  8042,  8042,  1658, -1332,  5183,  1085,
    1659      453,  1030,   955,  1095,  1097, -1332,  1099,  3245,   590, -1332,
    1660     1182,  1658,  8042,   735,  1948,   735,   846,   706,   996, -1332,
    1661    -1332,   806,   996, -1332, -1332, -1332,   926, -1332,   996,   182,
    1662    10283, -1332,   647,  1107,   688,  1108, -1332,  1109,   182, -1332,
    1663    -1332,  9437,   182,  1105,   497,   502, 10167,  7492,  1400, 10919,
    1664     1678, -1332, -1332,  1103,    62,  1103, -1332, -1332, -1332,   102,
    1665      102, -1332, -1332,  1062, -1332,   102, -1332, -1332,  8891,  1062,
    1666     1110, 10919, -1332,  1062, 11343, -1332, -1332,  1113, -1332, -1332,
    1667    -1332,   735, -1332, 11271, 10919, -1332,  8042,   718,  8347, -1332,
    1668    -1332,   739,  1114,  1115,   828,  2655, -1332, -1332, 11374, -1332,
    1669    -1332,  1116, -1332, -1332,  1122, -1332,  1116,  1123, 11116,  6310,
    1670      163,  1092,    54,  1131,  1128,  1135,   928,  1130,  1138, -1332,
    1671     1140,  1141,  9733,  7132, -1332,  6310, -1332,   630,  1274, -1332,
    1672     5523,  6310,  1139, -1332, -1332,  1030,   695, -1332,  6310, -1332,
    1673    -1332,   741, -1332, -1332, -1332, -1332, -1332,   516,   516,   336,
    1674      336,   425,   425,   425,   425,   270,   270,   704,   934,   936,
    1675      960,   997, 10919,   754, -1332, 10283,  1150,  1151,  1153,   777,
    1676    -1332, -1332, -1332, -1332, -1332, 10283,   748, 10919,  8042, -1332,
    1677     9914, -1332,  7612,  9316,  9126,  7372, -1332, -1332, -1332,   690,
    1678    10283,   950,  1164,  1165,  1171,  1172,  1179,  1180,  1181, -1332,
    1679     3591,  1090, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1680    -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
    1681    -1332, -1332, -1332,   974, -1332, -1332, -1332, -1332, -1332, -1332,
    1682    -1332, -1332,  1183, -1332,  1184,  1187, -1332, -1332,   190,  1139,
    1683     5183, -1332, -1332, -1332,  3059,  1185, -1332, -1332, -1332, -1332,
    1684    -1332,  1062,  6532,  1270, -1332, -1332, -1332, -1332,  1173,   190,
    1685    -1332, -1332,  1066, -1332, -1332,  1066,   152,  1066, -1332, -1332,
    1686    -1332, -1332, -1332, -1332,  9584, -1332,   182, -1332,  8891, -1332,
    1687    -1332,  1193,   795,  1199,  1200,  1204, -1332, -1332,  1678, -1332,
    1688    -1332, -1332, -1332, -1332, -1332, -1332,   907,  9763,  1047, -1332,
    1689    -1332,  1069,  1205,  1201, -1332, -1332,  1206,  1207, -1332,   718,
    1690     1989, -1332,   634, -1332,  2655,   974, -1332,  1211, 11374, 10205,
    1691     8974,  1214, -1332, -1332,  1212,  1217,  1213, -1332, 10919,   229,
    1692      205,  1215, -1332,  1202,   735,  1202,  7012,  6310, -1332, -1332,
    1693     1202, -1332,  1274,  3059, -1332, -1332, -1332, -1332,  1220,  6310,
    1694     1228,   735,  5183, -1332, 10784, -1332,   735, -1332, -1332,  6310,
    1695    -1332,   863,   996, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1696     1030,  8746, -1332, -1332,  7732,  1219, -1332,   876,   996, -1332,
    1697      883,   896,   996, -1332,   810,  4775, -1332, -1332, -1332, 10283,
    1698    10283, -1332,  8420,  8420, -1332,  1221,  1226,  1233,  1235, -1332,
    1699     1234,   643,   137,  1139, -1332,   735, -1332,  3245, -1332,  6310,
    1700      517, -1332,  6892,  1245,  1249, 10726,  1253,  1258,   330,   380,
    1701      387,  6310,  1265,   182,  6310,  6310,  1256,   294,  1269,  1250,
    1702    -1332, -1332, -1332,  1277, -1332, -1332, -1332, -1332, -1332, -1332,
    1703    -1332, -1332, -1332,  1062,  1285,  6310, -1332, 10283, 10283,   102,
    1704     1287, -1332,  9845,  9622,   932,   996, -1332, -1332, -1332, -1332,
    1705    -1332,  1286, -1332, -1332, -1332, -1332,  1293,  1989, -1332, -1332,
    1706     1275, -1332,  1116, -1332, -1332,  1948,  1290, -1332, -1332, -1332,
    1707      749,  1292, -1332,    54,  1295, 10919,  1279,    54,    54,  1305,
    1708     1301, -1332,  1099,  6310,  1308,  1220,   605,    89,  1306, -1332,
    1709     1301, -1332,  1312,  1306, -1332, -1332,  1317, -1332, -1332,  1066,
    1710     1319,  1322,  7252,  1323,  1325,  1326, -1332, -1332,  1329, -1332,
    1711    -1332,  1066, -1332, -1332, -1332, -1332,  1066,  6310,  6310, 10919,
    1712     1330, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1713    -1332, -1332, -1332, 10919, 10919,  1332,  1335,  1306, -1332, -1332,
    1714     1062, -1332, -1332, -1332,  7853, 10205,  6310,  6310,  1394,  6310,
    1715    -1332, -1332,  1321, -1332,  1324,  6310,  1327,  1331,  6310,  1013,
    1716     1333,    97,  8265,  1262,   102, -1332, -1332,  6532,  1334,   537,
    1717    -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332, -1332,  1066,
    1718    -1332, 10544, -1332,  8493,  1345, -1332, -1332, 10205,   562,   563,
    1719    -1332,  1343,  1344,   926,  1352, -1332,   450, -1332, -1332,  6310,
    1720     1355,  1349, -1332, -1332,  1356,   543,   613,   735,  1357,  1358,
    1721    -1332,  1361, -1332, 10283, -1332, -1332, -1332, -1332, -1332,  1365,
    1722    -1332, 10283, 10283, 10283, -1332, -1332,  1367, -1332,  1368,  1371,
    1723     1372,   668,  8115,  8231, -1332, -1332,   457, -1332,  1376,  1378,
    1724    -1332,  8566,   750,   782,  1387,   793,  6762, -1332, -1332,   598,
    1725    -1332, -1332,   803,  1388,  1393,   182,  1445,   882, -1332, -1332,
    1726     6310, -1332, 10784, 10726, -1332, -1332, -1332,  1396,  1404, 10283,
    1727    -1332, -1332, -1332,  1401, -1332, -1332, -1332, -1332, -1332, -1332,
    1728    10205,   926,   254, -1332,  1384,   926,  1220,   366, -1332, -1332,
    1729    -1332, -1332, -1332, -1332, -1332, -1332,  1405, -1332, -1332, -1332,
    1730    -1332, -1332, -1332,  1406,  1409, -1332, -1332, -1332, -1332, -1332,
    1731    -1332, -1332,  1414, -1332,  1413, -1332, -1332, 10726,    84,  6310,
    1732    10726, -1332,  1417,  6310, -1332,    99,  1433,  1434, -1332, -1332,
    1733     1422,  1425,  1408,   852, -1332, -1332, -1332, -1332, -1332,  1658,
    1734     1948,  1421,   949,   918, 10919, -1332,   832,  1426,  6310,   735,
    1735      735,  1427,  1431,  1440,  1441, -1332, -1332,  8420,  1428, -1332,
    1736     1501, 10919,  1437, -1332, -1332, 10637, -1332,   845, -1332,  1424,
    1737    10726,  1436, -1332, -1332,  1460, -1332,  1461, -1332,  1476,  1481,
    1738    -1332,  1446,  1471, 10205, -1332, -1332, -1332,   926,   735,  1472,
    1739     1452,  1468, -1332,  1306,  1306, -1332, -1332, -1332, -1332, -1332,
    1740    10726,   295, -1332,   940, -1332, -1332,  5671, -1332, -1332,  1454,
    1741     6310, -1332,  6310,  5671,   182, 10025,   182, 10025,  1478, -1332,
    1742     1482, -1332, -1332, -1332,  1480,   949, -1332,   850, -1332, -1332,
    1743     6310,  1479,  1487, -1332, 10919, 10919, -1332, -1332,  1054,   123,
    1744    -1332, -1332,  1465, -1332,  1054, -1332, -1332,  1818,   735, -1332,
    1745    -1332,   182, 10025,   182, 10025,  1492,  1474,   735, -1332, -1332,
    1746    -1332, -1332, -1332, 10637,  1488,  1054,  6242,  6310, 10548,  1495,
    1747     1054,  1502,  1818,  2347, -1332, -1332, -1332,  1505, -1332, -1332,
    1748    -1332, -1332,  8974, -1332, -1332, -1332, 10415, -1332, 10637, -1332,
    1749    -1332,  1484, 10322, -1332, -1332, 10548,   182,  2347,   182,  1509,
    1750     1510,   853, -1332, 10415, -1332, -1332, -1332, 10322, -1332, -1332,
    1751    -1332,   182,   182, -1332, -1332, -1332, -1332, -1332, -1332, -1332,
    1752    -1332
     1589    3705,  8889, -1281,   104, -1281, -1281, -1281, -1281, -1281, -1281,
     1590   -1281,    44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
     1591   -1281, -1281, -1281, -1281, -1281,   155,   155,   155,  1205,   815,
     1592     110,  6006,   222, -1281, -1281, -1281, -1281, -1281,   130, -1281,
     1593   -1281, -1281,  1267,   189,  3199, -1281, -1281, -1281, -1281, -1281,
     1594   -1281,    31,   144, -1281,  1338, -1281, -1281, -1281, -1281,   153,
     1595    1410,   279,    82,  7674, -1281, -1281,  8086,  1234, -1281, -1281,
     1596   -1281,   981,   359,  7231,   925,   669,   981,  1012, -1281, -1281,
     1597     738,   575, -1281,   981,  1119, -1281,   242, -1281,   416,   419,
     1598   -1281, -1281, -1281, -1281,   277,   144,   155, -1281,   155, -1281,
     1599   -1281, -1281, -1281,  9536,  1338, -1281, -1281,  1338, -1281,  9574,
     1600     321, -1281, -1281, -1281,  2195,  9607, -1281,   565,   565,   565,
     1601   -1281, -1281, -1281,   155, -1281, -1281, -1281,   280,   366,   418,
     1602   -1281, -1281, -1281,   425, -1281, -1281, -1281, -1281, -1281,   443,
     1603     475, -1281, -1281,   120,  8972,  3739,   375,   387,   486,   496,
     1604     514,   527,   541,  8273,  7081,   550,   568, -1281,  9460, -1281,
     1605   -1281, -1281, -1281,   602, -1281,   121,  4456,  4456, -1281,   552,
     1606     298, -1281, -1281, -1281, -1281,   634,   302,   306,   327,   155,
     1607     590, -1281, -1281,  1410,  2454,   696, -1281,    90, -1281,   155,
     1608     155,   144, -1281, -1281,   124, -1281,   155,   155, -1281,  2638,
     1609     658,   667,   565,  6993, -1281, -1281,   678,  3199, -1281, -1281,
     1610     981, -1281, -1281, -1281,   144, -1281,  1338,    31, -1281,  8010,
     1611   -1281,   565,   565,   565,   144, -1281,  1205, -1281,  5198, -1281,
     1612   -1281,   673,   565, -1281,   565, -1281,   130,  8972,  9002,   686,
     1613   -1281,   815,   694,   565, -1281,  1205,   728,   736, -1281,  6006,
     1614     544, -1281, -1281, -1281,  9431, -1281, -1281,  3957, -1281,   696,
     1615      79,  9607,  6464,  2195,  2638, -1281,   157, -1281, -1281,  9574,
     1616    1338,   717,  7703, -1281, -1281,   699, -1281, 10744,   783,   831,
     1617    3925,   787,  6306, 10567, -1281,   827, -1281, -1281, -1281, -1281,
     1618   10625, 10625,   544,  8633,   829,  6306,  9085, -1281, -1281, -1281,
     1619   -1281, -1281, -1281,   862, -1281,  1121,  2197,  6306, -1281,   599,
     1620     388,   472,   354,   593,   830,   867,   873,   970,   245, -1281,
     1621   -1281,   874,   650, -1281,   325, -1281, -1281,  3739, -1281, -1281,
     1622     585,   901, -1281,   747,   901,   958,   130, -1281, -1281,   962,
     1623    9536, -1281,   977,  8746, -1281, -1281,   957,   935,  8355,  6993,
     1624     981, -1281,   981,   565,   565, -1281, -1281, -1281, -1281, -1281,
     1625   -1281,   565,  9645,  1338, -1281, -1281,  9683,  1067, -1281,  9123,
     1626   -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,  5315,  6306,
     1627   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
     1628   -1281, -1281, -1281, -1281,  2195, -1281,   846,   996,   998,  1002,
     1629     864,  1005,  1008,  1026,  2454, -1281, -1281,  1031,    31,  1033,
     1630   -1281, -1281,  1061, -1281, -1281, -1281,  9431, -1281, -1281, -1281,
     1631   -1281, -1281,  2638, -1281,  8972,  8972, -1281,   565,  2195,  7112,
     1632    1338,  8426, -1281, -1281, -1281, -1281,  9431,    79, -1281, -1281,
     1633     981,   144, -1281, -1281,  9431, -1281,  6877, -1281, -1281,   565,
     1634     565,   376,  9716,  1035,  1868,  2111, -1281,   334,   338,   815,
     1635   -1281,  9002,  1059,  1047,   815,   565, -1281, -1281, -1281, -1281,
     1636    9940, -1281,   583,  6755, -1281,   144,  1065, -1281,  2195, 10825,
     1637   10471, -1281, -1281, -1281, -1281,   889,  2638, -1281,  8497,   696,
     1638    7558, -1281, -1281, -1281,  1286,   636,   874,   815,  7703,   868,
     1639    9574, -1281,  7703, -1281, -1281, -1281, -1281,   638, -1281,  1073,
     1640     831,   207,  8633, -1281,  9716, -1281, -1281,  8633, -1281,  8859,
     1641    8633, -1281, -1281, -1281,  1071, -1281,   681,  1077,   668,  1078,
     1642   -1281,  4381,  6724, -1281, -1281, -1281,   328, -1281, -1281, 10490,
     1643   -1281,   385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
     1644   -1281, -1281, -1281,  6464,  6464, -1281,  6306,  6306,  6306,  6306,
     1645    6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,
     1646    6306,  6306,  6306,  6306,  4789,  6464, -1281,   650,  1062, -1281,
     1647   -1281,   155,   155, -1281, -1281,  8972, -1281, -1281,  1061,   544,
     1648   -1281,  1061, 10548, -1281, -1281, -1281,  5232,  6724,  1079,  9198,
     1649    1080, -1281,  9754, -1281, -1281,   602, -1281,  1082,  1185,  1084,
     1650    1899,   185,   874, -1281,   155,   155,   874,   233, -1281,   155,
     1651     155,  1061, -1281, -1281,   155,   155, -1281,   901,  9792,  1338,
     1652   10968,   234,   509,  9792, -1281,  5821, -1281,   874, -1281,  9645,
     1653   -1281,   293,  5525,  5525,  5525,  1338, -1281,  5054,  1072,   558,
     1654     990,  1016,  1083,  1086, -1281,  1074,  4456,   592, -1281,  1172,
     1655    1338,  5525,   544,  2195,   544,   696,   809,   901, -1281, -1281,
     1656     814,   901, -1281, -1281, -1281,   831, -1281,   901,   144,  9940,
     1657   -1281,   682,  1095,   691,  1099, -1281,  1098,   144, -1281, -1281,
     1658    9431,   144,  1103,   362,   407,  9825,  7200,  1999,  6306,  1917,
     1659   -1281, -1281,  1101,    94,  1101, -1281, -1281, -1281,   155,   155,
     1660   -1281, -1281,   815, -1281,   155, -1281, -1281,  3122,   815,  1107,
     1661    6306, -1281,  1059, 10968, -1281, -1281,  1102, -1281, -1281, -1281,
     1662     544, -1281, 10897,  6306, -1281,  5525,   675,  8355, -1281, -1281,
     1663     602,  1108,  1109,  1286,  3745, -1281, -1281,  7703, -1281, -1281,
     1664    1111, -1281, -1281,  1116, -1281,  1111,  1128, 10744,  6464,   146,
     1665    1113,    53,  1136,  1115,  1137,   829,  1131,  1139, -1281,  1142,
     1666    1143,  1696,  6843, -1281,  6464, -1281,   668,  1691, -1281,  6022,
     1667    6464,  1138, -1281, -1281,   990,   708, -1281,  6464, -1281, -1281,
     1668     727, -1281, -1281, -1281, -1281, -1281,   599,   599,   388,   388,
     1669     472,   472,   472,   472,   354,   354,   593,   830,   867,   873,
     1670     970,  6306,   755, -1281,  9940,  1148,  1149,  1152,  1062, -1281,
     1671   -1281, -1281, -1281, -1281,  9940,   713,  6306,  5525, -1281,  9645,
     1672   -1281,  7319,  9311,  9236,  7081, -1281, -1281, -1281,  1185,  9940,
     1673     951,  1160,  1163,  1165,  1166,  1175,  1176,  1182, -1281,  3532,
     1674    1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
     1675   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, -1281,
     1676   -1281, -1281,   874, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
     1677   -1281,  1183, -1281,  1187,  1189, -1281, -1281,    31,  1138,  5054,
     1678   -1281, -1281, -1281,  5315,  1180, -1281, -1281, -1281, -1281, -1281,
     1679     815,  6243,  1272, -1281, -1281, -1281, -1281,  1188,    31, -1281,
     1680   -1281,  1061, -1281, -1281,  1061,    70,  1061, -1281, -1281, -1281,
     1681   -1281, -1281, -1281,  9498, -1281,   144, -1281,  9002, -1281, -1281,
     1682    1201,   818,  1208,  1212,  1213, -1281, -1281,  1917, -1281, -1281,
     1683   -1281, -1281, -1281, -1281, -1281,  1868, -1281,  1047, -1281, -1281,
     1684    1210,  1216,  1211, -1281, -1281,  1218,  1223, -1281,   675,  1777,
     1685   -1281,   562, -1281,  3745,   874, -1281,  1226,  7703,  9863,  8972,
     1686    1230, -1281, -1281,  1225,  1235,  1238, -1281,  6306,   252,    40,
     1687    1231, -1281,  1242,   544,  1242,  6724,  6464, -1281, -1281,  1242,
     1688   -1281,  1691,  5315, -1281, -1281, -1281, -1281,  1236,  6464,  1245,
     1689     544,  5054, -1281, 10490, -1281,   544, -1281, -1281,  6464, -1281,
     1690     850,   901, -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,
     1691    8746, -1281, -1281,  7438,  1249, -1281,   856,   901, -1281,   872,
     1692     904,   901, -1281,   565,  4646, -1281, -1281, -1281,  9940,  9940,
     1693   -1281,  8426,  8426, -1281,  1252,  1255,  1264,  1271, -1281,  1253,
     1694     594,   247,  1138, -1281,   544, -1281,  4456, -1281,  6464,   459,
     1695   -1281,  6603,  1274,  1279, 10343,  1281,  1283,   301,   308,   344,
     1696    6464,  1285,   144,  6464,  6464,  1284,   498,  1282,  1268, -1281,
     1697   -1281, -1281,  1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
     1698   -1281, -1281,   815,  1296,  6464, -1281,  9940,  9940,   155,  1301,
     1699   -1281,  9349,  4935,   934,   901, -1281, -1281, -1281, -1281, -1281,
     1700   -1281, -1281, -1281, -1281,  1305,  1777, -1281, -1281,  1290, -1281,
     1701    1111, -1281, -1281,  2195,  1309, -1281, -1281, -1281,   734,  1312,
     1702   -1281,    53,  1317,  6306,  1303,    53,    53,  1327,  1323, -1281,
     1703    1074,  6464,  1328,  1236,  1036,   113,  1326, -1281,  1323, -1281,
     1704    1331,  1326, -1281, -1281,  1337, -1281, -1281,  1061,  1340,  1343,
     1705    6962,  1342,  1344,  1350, -1281, -1281,  1353, -1281, -1281,  1061,
     1706   -1281, -1281, -1281, -1281,  1061,  6464,  6464,  6306,  1355, -1281,
     1707   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
     1708   -1281,  6306,  6306,  1356,  1357,  1326, -1281, -1281,   815, -1281,
     1709   -1281, -1281,  7939,  9863,  6464,  6464,  1423,  6464, -1281, -1281,
     1710    1341, -1281,  1345,  6464,  1347,  1358,  6464,  1097,  1360,    74,
     1711    8776,  1197,   155, -1281, -1281,  6243,  1361,   467, -1281, -1281,
     1712   -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, 10467, -1281,
     1713    8497,  1362, -1281, -1281,  9863,   482,   494, -1281,  1372,  1383,
     1714     831,  1394, -1281,    66, -1281, -1281,  6464,  1395,  1393, -1281,
     1715   -1281,  1399,   430,   657,   544,  1400,  1401, -1281,  1406, -1281,
     1716    9940, -1281, -1281, -1281, -1281, -1281,  1412, -1281,  9940,  9940,
     1717    9940, -1281, -1281,  1413, -1281,  1415,  1425,  1427,   623,  8125,
     1718    8240, -1281, -1281,   278, -1281,  1426,  1429, -1281,  8568,   745,
     1719     759,  1430,   769,  6445, -1281, -1281,   502, -1281, -1281,   770,
     1720    1434,  1436,   144,  1487,   911, -1281, -1281,  6464, -1281, 10490,
     1721   10343, -1281, -1281, -1281,  1442,  1444,  9940, -1281, -1281, -1281,
     1722    1437, -1281, -1281, -1281, -1281, -1281, -1281,  9863,   831,   269,
     1723   -1281,  1424,   831,  1236,   373, -1281, -1281, -1281, -1281, -1281,
     1724   -1281, -1281, -1281,  1443, -1281, -1281, -1281, -1281, -1281, -1281,
     1725    1452,  1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1458,
     1726   -1281,  1457, -1281, -1281, 10343,   148,  6464, 10343, -1281,  1462,
     1727    6464, -1281,   171,  1484,  1486, -1281, -1281,  1465,  1476,  1455,
     1728     905, -1281, -1281, -1281, -1281, -1281,  1338,  2195,  1471,   862,
     1729     918,  6306, -1281,   772,  1477,  6464,   544,   544,  1480,  1482,
     1730    1483,  1485, -1281, -1281,  8426,  1472, -1281,  1555,  6306,  1493,
     1731   -1281, -1281, 10254, -1281,   790, -1281,  1467, 10343,  1468, -1281,
     1732   -1281,  1511, -1281,  1513, -1281,  1507,  1529, -1281,  1496,  1519,
     1733    9863, -1281, -1281, -1281,   831,   544,  1520,  1499,  1515, -1281,
     1734    1326,  1326, -1281, -1281, -1281, -1281, -1281, 10343,   258, -1281,
     1735     922, -1281, -1281,  7790, -1281, -1281,  1501,  6464, -1281,  6464,
     1736    7790,   144,  9716,   144,  9716,  1528, -1281,  1530, -1281, -1281,
     1737   -1281,  1524,   862, -1281,   794, -1281, -1281,  6464,  1540,  1542,
     1738   -1281,  6306,  6306, -1281, -1281,  1051,   133, -1281, -1281,  1510,
     1739   -1281,  1051, -1281, -1281,  2099,   544, -1281, -1281,   144,  9716,
     1740     144,  9716,  1546,  1525,   544, -1281, -1281, -1281, -1281, -1281,
     1741   10254,  1541,  1051,  7866,  6464, 10165,  1543,  1051,  1551,  2099,
     1742    2338, -1281, -1281, -1281,  1552, -1281, -1281, -1281, -1281,  8972,
     1743   -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281,  1531,  9979,
     1744   -1281, -1281, 10165,   144,  2338,   144,  1557,  1559,   795, -1281,
     1745   10072, -1281, -1281, -1281,  9979, -1281, -1281, -1281,   144,   144,
     1746   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281
    17531747};
    17541748
     
    17561750static const yytype_int16 yypgoto[] =
    17571751{
    1758    -1332,  4383,  1919, -1332,  1457, -1332,    41,     0,  -257, -1332,
    1759      544,  -527,  -514,  -956,  -190,  3713, -1332,  1485,   580,   585,
    1760      548,   602,  1055,  1052,  1056,  1059,  1061, -1332,  -217,  -341,
    1761     5350,  -699,  -697,  -922, -1332,   -83,  -701,  -678, -1332,   561,
    1762    -1332,   399, -1087, -1332, -1332,   141, -1332, -1329,  -838,   252,
    1763    -1332, -1332, -1332, -1332,    71, -1078, -1332, -1332, -1332, -1332,
    1764    -1332, -1332,   325, -1308,    57, -1332,  -297, -1332,   504,   305,
    1765    -1332,   173, -1332,  -305, -1332, -1332, -1332,   558,  -799, -1332,
    1766    -1332,    11, -1027,   151,   658, -1332, -1332, -1332,   -52, -1332,
    1767      117,   913,  -200,  1494,  4071, -1332, -1332,    19,   107,   365,
    1768     -232,  1565, -1332,  2150, -1332, -1332,   134,  2571, -1332,  3063,
    1769     1550, -1332, -1332, -1332,  -643,  -431,  1210,  1216,   707,   947,
    1770      188, -1332, -1332, -1332,   945,   723,  -404, -1332,  -520,  -362,
    1771      293, -1332, -1332,  -990,  -995,   965,  1194,  1083,   304, -1332,
    1772      150,   317,   -75,  -197,  -129,   679,   781, -1332,  1020, -1332,
    1773     3338,  1566,  -427,   948, -1332, -1332,   710, -1332,  -230, -1332,
    1774      -89, -1332, -1332, -1332, -1266,   433, -1332, -1332, -1332,  1195,
    1775    -1332,    22, -1332, -1332,  -865,  -105, -1331,   -98,  1750, -1332,
    1776     2253, -1332,   929, -1332,  -168,   288,  -180,  -179,  -173,     2,
    1777      -34,   -29,   -28,   687,    75,    77,    92,  -161,  -162,  -153,
    1778     -151,  -148,  -320,  -530,  -516,  -495,  -552,  -307,  -529, -1332,
    1779    -1332,  -506,  1106,  1117,  1121,  2218,  5180,  -562,  -569,  -544,
    1780     -538,  -550, -1332,  -429,  -691,  -685,  -671,  -611,  -246,  -241,
    1781    -1332, -1332,  1149,   273,   -84, -1332,  3714,    76,  -612,  -441
     1752   -1281,  4254,  1590, -1281,  1409, -1281,    52,     0,  -229, -1281,
     1753     596,  -527,  -497,  -931,   -99,  4508, -1281,   358,   609,   563,
     1754     518,   591,  1104,  1105,  1110,  1117,  1112, -1281,   613,  -339,
     1755    5346,  -893,  -690,  -919, -1281,   401,  -634,   444, -1281,   753,
     1756   -1281,   449, -1224, -1281, -1281,   191, -1281, -1265,  -724,   305,
     1757   -1281, -1281, -1281, -1281,   129, -1170, -1281, -1281, -1281, -1281,
     1758   -1281, -1281,   382, -1175,    71, -1281,  -381, -1281,   560,   356,
     1759   -1281,   229, -1281,  -338, -1281, -1281, -1281,   632,  -691, -1281,
     1760   -1281,    11, -1000,    10,  2865, -1281, -1281, -1281,  -125, -1281,
     1761     275,   363,  -194,  1416,  4157, -1281, -1281,    24,    25,   374,
     1762    -202,  1621, -1281,  2138, -1281, -1281,   112,  2165, -1281,  2832,
     1763     139, -1281, -1281,  -416,  -434,  1276,  1278,   786,  1028,   400,
     1764   -1281, -1281,  1269,   793,  -513, -1281,  -522,   -57,  -636, -1281,
     1765   -1281,  -959,  -994,   122,   819,  1153,   135, -1281,  1441,   296,
     1766    -299,  -212,  -109,   749,   844, -1281,  1087, -1281,  2859,  1478,
     1767    -462,  1000, -1281, -1281,   778, -1281,  -233, -1281,   -72, -1281,
     1768   -1281, -1281, -1232,   504, -1281, -1281, -1281,  1259, -1281,    68,
     1769   -1281, -1281,  -850,   -96, -1280,   -93,  1665, -1281,  2401, -1281,
     1770     993, -1281,  -164,   689,  -177,  -176,  -170,     2,   -39,   -33,
     1771     -28,  1052,    48,    75,    93,  -100,  -167,  -166,  -153,  -148,
     1772    -277,  -569,  -500,  -490,  -543,  -300,  -514, -1281, -1281,  -506,
     1773    1174,  1177,  1181,  2149,  5126,  -572,  -549,  -544,  -523,  -484,
     1774   -1281,  -427,  -665,  -663,  -660,  -602,  -320,  -271, -1281, -1281,
     1775     102,   140,   -84, -1281,  3728,   128,  -603,  -447
    17821776};
    17831777
     
    17851779   positive, shift that token.  If negative, reduce the rule which
    17861780   number is the opposite.  If YYTABLE_NINF, syntax error.  */
    1787 #define YYTABLE_NINF -525
     1781#define YYTABLE_NINF -522
    17881782static const yytype_int16 yytable[] =
    17891783{
    1790       47,   112,    96,   427,   398,   399,   768,   933,   452,   148,
    1791      266,   400,   113,   934,   149,   150,   791,   406,   871,    67,
    1792      259,   439,   401,   512,   407,   712,   707,   935,   613,   112,
    1793      112,   402,    47,   403,    96,  1203,   404,  1092,   382,   383,
    1794      846,   618,   111,    47,   895,    47,   505,   160,  1187,   854,
    1795     1153,    67,  1185,  1186,   142,    47,   749,    48,   975,   853,
    1796      201,    47,   857,   192,    47,   847,   215,    47,   864,   225,
    1797      342,   848,   751,   820,  1401,   947,   756,  1145,   218,   842,
    1798      845,   112,   112,   995,   398,   399,   933,   279,   409,    48,
    1799     1464,   400,   934,   843,   121,   424,  1468,   406,   605,  1197,
    1800      779,    31,   401,  1091,   407,    47,   935,    68,    47,    31,
    1801      202,   402,   679,   403,   844,    47,   404,    61,   151,   109,
    1802      152,   165,   637,   884,   884,   884,   641,   739,  1421,  1422,
    1803       41,    42,   688,   408,    75,   153,   290,    31,   446,    68,
    1804      692,    31,   884,  1421,  1422,   280,    47,   574,   160,    61,
    1805      148,    54,   114,    31,    47,   149,   150,   467,   783,    47,
    1806     1320,   372,   482,   484,  1464,   978,    75,  -234,  -234,  1510,
    1807      122,   211,   858,   410,  1265,   746,   861,  1484,   483,   251,
    1808      140,   410,   575,    54,    47,    47,   165,   160,     2,   205,
    1809        4,     5,     6,     7,  1468,   141,    31,   878,  1423,  1468,
    1810       47,   881,  1266,   478,  1539,    31,  1541,   418,    47,   410,
    1811      160,   527,   677,  1432,   842,   209,   884,    47,   219,  1468,
    1812       47,   327,   442,   488,  1080,   410,  1468,   112,   843,  1321,
    1813      148,   240,   243,  1193,   536,   149,   150,   674,  -234,   143,
    1814      886,   887,   112,   740,   675,   536,   112,   145,  1187,   844,
    1815       47,   112,    96,    35,   760,    36,   154,   596,   905,   151,
    1816     1194,   152,  1099,  1202,    47,    47,   855,   160,   610,    67,
    1817      846,    47,   470,   105,   105,   862,   153,   610,    47,  1203,
    1818      976,   885,   885,   885,   435,  1102,   342,   703,    95,  1038,
    1819      666,   857,   472,   112,   705,   847,   170,   167,  1187,  1037,
    1820      885,   848,  1185,  1186,   618,   105,   200,    48,   884,   842,
    1821     1025,   536,  1155,  1014,   327,  1136,    -3,   180,   681,   674,
    1822       95,   168,  1137,   843,   686,   376,   675,   441,    47,   386,
    1823      372,   147,   958,    95,   524,   739,   536,  1346,  1135,  1111,
    1824      105,   377,   682,   684,   844,   387,   435,    47,    47,   188,
    1825      683,   685,    95,   389,   605,    95,   831,    68,   937,   176,
    1826      564,   565,  1092,  1404,    47,   478,   285,    61,    47,   390,
    1827     1217,   440,   479,   165,   885,  1220,  1221,    41,    42,   653,
    1828      950,   251,   329,   605,    75,   478,   926,  1208,   605,    75,
    1829      846,  1494,   464,   478,   483,    47,   566,   567,   854,   880,
    1830      585,    54,   109,   521,  -290,    47,   586,   372,   536,   260,
    1831      871,   739,   261,    41,    42,   847,   576,   246,  1194,   916,
    1832      607,   848,  1187,    47,  1017,   251,   755,  1459,  1091,    47,
    1833      527,    47,  1041,   228,    95,   527,   761,   229,   527,  1203,
    1834      233,  1552,   235,   762,  1262,   770,  1203,    95,   342,   244,
    1835     1553,   740,   109,  1453,  1454,    47,   211,   560,   561,   109,
    1836      112,  1563,  1211,    41,    42,   578,   885,   410,  1567,   391,
    1837       41,    42,   397,   188,   112,   579,  -112,  1568,   393,    47,
    1838     1173,  1175,   936,  1408,   874,   392,   249,    47,   875,   372,
    1839     1151,    47,   813,    96,   394,    47,    95,  -112,   112,  1203,
    1840      112,   327,   327,  -520,   936,   979,  1215,  1383,    95,  1107,
    1841       67,   824,  1213,   562,   563,   111,   712,   707,   398,   399,
    1842      653,   438,   263,   105,  1119,   400,   505,   740,   896,   654,
    1843     1261,  1036,   406,  -469,   479,   -10,   401,   112,    95,   407,
    1844      653,  1122,   112,   653,   618,   402,   109,   403,    48,  1080,
    1845      404,    75,   486,   713,   479,  1038,  -443,    41,    42,   907,
    1846     1344,   767,   479,  1107,  -469,  -444,  -469,  1345,   909,   714,
    1847     -469,    75,  -112,  -112,   693,   490,   228,   327,   784,    75,
    1848      586,   767,   507,   790,   767,   789,   275,   211,  -112,  1019,
    1849      112,   715,  -291,   831,   277,  1008,   327,    47,    68,     8,
    1850        9,    10,    11,    12,   278,  1381,   737,   716,    61,    47,
    1851      717,    47,   342,   713,   172,   109,    95,   833,   715,     2,
    1852      205,     4,     5,     6,     7,    75,    41,    42,    31,   929,
    1853       47,   472,   730,  1200,   930,   557,   612,  1134,   731,   478,
    1854      558,   559,    54,   876,  1036,  1394,    47,   877,   750,  1201,
    1855      754,   176,   112,  1200,  1350,   330,    34,   252,    55,    55,
    1856     1523,    47,   327,   112,    47,   112,  1528,  1500,   638,  1326,
    1857      897,   712,   642,  1051,  1500,   500,   607,   501,  1335,  1337,
    1858     1184,   955,  1431,   831,    35,   109,    36,  1548,   342,   331,
    1859       55,  1049,  1555,   188,  1336,  1338,    41,    42,    47,  1420,
    1860       47,   898,  1428,   652,   906,   872,   908,   899,   370,   587,
    1861      607,   410,  1096,   112,   775,  -112,   228,  -112,   233,   112,
    1862      747,  -112,    55,   112,  1352,    55,   748,  1549,   757,   774,
    1863     1384,   112,   161,   332,   758,   775,  -112,  -112,   441,   777,
    1864     1130,   410,   333,   704,    47,    47,   876,  1467,   193,   778,
    1865     1118,   216,  1471,   416,   226,  -105,    37,   920,    47,  -105,
    1866       40,   936,    37,   775,   105,  1056,    40,    41,    42,  1502,
    1867      674,  1503,   954,    41,    42,   605,   436,   675,   703,    95,
    1868     1369,   334,  1493,   612,  1370,   705,   444,     8,     9,    10,
    1869       11,    12,  1154,    43,  1254,  1393,   568,   569,   922,   839,
    1870      739,   610,   892,   146,   775,  1003,   228,   109,   479,   611,
    1871      590,  1004,   410,   347,   737,   910,    31,   410,    41,    42,
    1872        8,     9,    10,    11,    12,    75,  1550,   959,   371,   610,
    1873      763,   211,   764,   161,  1177,   765,  1252,   960,   771,    47,
    1874     1256,   933,  1051,   335,    34,   211,   373,   934,   375,    31,
    1875      479,    47,  1294,  1295,   833,   528,  1007,  1004,  1016,  1250,
    1876     1377,   935,   831,   945,   731,   586,   775,    75,  1562,   948,
    1877      775,  1009,   161,   464,  1562,   384,   979,    34,    55,   388,
    1878      979,   979,   251,   329,   410,  1562,   578,   396,   410,  1562,
    1879      737,   941,  1378,   941,   653,   161,   579,   841,   775,   612,
    1880       37,   112,   653,  1380,    40,   329,   410,   443,    55,   775,
    1881      408,    41,    42,  1385,   115,   913,   740,   410,   936,   775,
    1882      109,    67,   138,   237,    47,   537,   538,   539,  1198,   425,
    1883     1372,    41,    42,   109,   873,   138,   139,   744,    47,   211,
    1884     1390,  1391,  1450,  1078,    41,    42,    47,   745,  1447,   540,
    1885      888,   541,   426,   542,   543,  1469,   431,   238,   158,   449,
    1886     1516,   775,   239,  1573,    47,   904,  1517,  1441,  1004,   586,
    1887      752,  -367,  1157,   919,   410,   753,   936,   936,  -396,    37,
    1888     1123,   182,   183,    40,   112,  1169,   932,   410,   704,   491,
    1889       41,    42,  1172,   653,   610,   511,  1342,   740,   418,   670,
    1890      410,   112,   468,   690,   653,  1174,   112,   610,   290,    68,
    1891      109,   469,   138,   139,   515,   373,   698,   257,   410,    61,
    1892     1245,    41,    42,   158,   699,  1139,   700,   109,   520,   138,
    1893      139,   536,   841,   612,  1447,  1448,    75,   732,    41,    42,
    1894      532,  1237,  1147,   410,   654,   767,   327,  1147,   488,   329,
    1895      410,  1061,   242,    54,   570,   112,  1495,  1496,   323,   855,
    1896      329,   610,   507,  1449,   571,   653,   891,   339,   112,   112,
    1897      112,  1313,  1314,  1315,   528,  1351,  1353,  1354,  1535,   528,
    1898     1461,  1205,   528,   128,  1402,   129,   130,   131,  1402,   572,
    1899      347,   573,   373,   112,    41,    42,  1147,   872,  1421,  1422,
    1900        8,     9,    10,    11,    12,   576,  1078,   338,  1010,  1212,
    1901     1214,  1216,   801,   802,   803,   804,  -440,   429,  1015,   594,
    1902     1124,   433,   667,  1302,  1303,    47,  1305,   841,  1107,    31,
    1903      597,   441,  1309,  1026,   109,  1312,   138,   139,   342,   612,
    1904      797,   798,   647,   654,   668,    41,    42,   799,   800,    55,
    1905      669,   323,   455,  1521,  1461,   671,    37,    34,   182,   183,
    1906       40,   672,    37,   673,   182,   183,    40,    41,    42,    68,
    1907      805,   806,   676,    41,    42,   105,   678,   256,   721,   479,
    1908      696,   718,   759,   433,   723,   719,   495,   936,  -238,   772,
    1909     1485,   347,   776,   609,   162,   610,    75,   780,   834,   609,
    1910      112,   610,   -12,   611,   936,   836,   838,   529,   849,   611,
    1911      158,   901,   -13,    54,   893,   894,   218,   921,   923,   928,
    1912      699,   924,    47,  -417,   977,   949,   704,   653,  -292,  -524,
    1913      963,   970,   748,   972,   704,     8,     9,    10,    11,    12,
    1914      918,   983,   105,  1061,   984,   985,    67,   987,   988,   925,
    1915      989,   990,   612,   927,   595,   999,   347,   602,  1123,   162,
    1916     1011,  1012,  -293,  1013,    31,   112,   112,   112,  1078,     8,
    1917        9,    10,    11,    12,  1027,  1028,   635,   936,   936,   737,
    1918      639,  1029,  1030,   339,     8,     9,    10,    11,    12,  1031,
    1919     1032,  1033,    34,  1044,  -405,  1445,  1427,  -404,    31,  1093,
    1920     1058,   347,   347,   347,  1095,  1103,  1147,  1147,  1147,  1104,
    1921     1105,   211,  1561,    31,  1106,  1112,   993,  1113,  1114,  1115,
    1922      347,  1121,   653,   653,  1131,  1205,    34,  1132,   775,  1167,
    1923     1133,  1138,  1182,  1183,    68,   105,  1143,  1188,   323,   323,
    1924     1146,    34,  1189,  1190,    61,  1191,  1192,   537,   538,   539,
    1925     1300,  1123,   398,   399,  1206,   209,   219,   434,  1207,   400,
    1926      737,    75,  1209,   767,  1078,   406,   455,  1210,  1222,   455,
    1927      401,   540,   407,   541,  1218,   542,  1322,   653,    54,   402,
    1928      653,   403,  1225,   777,   404,   410,  1224,   115,   460,   674,
    1929     1232,  1233,    -3,   778,   347,  1230,   675,  1235,  1124,    47,
    1930       47,  1240,  1534,  1242,   500,  1246,  1251,  1253,   441,   112,
    1931      112,  1255,   495,    68,   323,  1258,   495,  1259,  1078,   434,
    1932     1263,  1078,  1267,   479,  1270,   653,   529,  1272,   529,  1274,
    1933      653,   529,  1275,   323,   529,  1276,   728,  1277,  1278,  1280,
    1934       75,  1304,  1287,   531,  1296,   339,   162,  1297,   112,  1325,
    1935     1147,  1147,   440,  1307,  1123,  1333,  1308,    54,  1339,  1310,
    1936      653,  1341,  1343,  1311,  1348,  1319,  1078,  1347,  1349,  1355,
    1937     1356,  1078,    37,  1357,   182,   183,    40,  1359,   105,  1365,
    1938     1366,  1367,  1368,    41,    42,  1205,   347,  1101,  1375,  1486,
    1939     1376,  1124,  1205,   347,    64,   116,  1379,  1386,   148,   323,
    1940      105,  1078,  1387,   149,   150,  1315,  1395,    47,   112,   698,
    1941      829,   410,   175,   602,  1396,  1398,  1405,   112,  1415,   700,
    1942      105,  1416,  1408,   653,  -406,  1419,    64,  1430,   653,  1434,
    1943     1436,  1438,    47,    47,  1439,   160,  1446,  1455,  1451,   159,
    1944     1440,  1456,   870,  1460,  1370,  1205,   653,   602,   653,  1536,
    1945     1457,  1458,   653,   879,  1465,   653,  1470,    47,  1544,   372,
    1946       55,   220,   175,   653,  1078,   175,  1358,   653,  1472,  1078,
    1947     1474,  1476,  1478,    68,  1360,  1361,  1362,  1480,  1482,   105,
    1948       68,  1483,  1488,   479,  1489,  1490,  1501,  1078,  1511,  1078,
    1949      479,  1519,  1513,  1078,  1124,  1515,  1078,  1527,   258,  1520,
    1950       75,  1542,   460,  1547,  1078,   460,  1543,    75,  1078,   339,
    1951     1554,   175,  1556,   105,   213,  1558,  1564,    54,   327,  1571,
    1952     1572,  1223,  1397,   808,    54,   807,  1324,    55,   809,   212,
    1953      214,   455,   810,    68,  1219,   811,  1522,  1433,  1574,   231,
    1954      328,  1389,  1257,   479,   347,   728,  1504,   241,   258,   349,
    1955     1406,  1229,   942,  1108,     2,   205,     4,     5,     6,     7,
    1956       75,   495,   531,   694,   531,   729,   213,   531,   951,   695,
    1957      531,  1110,  1142,   826,   175,  1057,  1120,    54,   900,   405,
    1958     1334,   212,   214,   227,   816,   339,   742,   973,     8,     9,
    1959       10,    11,    12,     0,   423,   817,   965,   428,   430,   818,
    1960      347,   347,   159,  1444,     0,     0,     0,     0,     0,   213,
    1961        0,     0,     0,     0,     0,     0,   105,    31,     0,    35,
    1962       55,    36,     0,   447,   212,   214,     0,   450,   175,   451,
    1963       37,     0,   173,   174,    40,   175,     0,     0,   466,   105,
    1964        0,    41,    42,  1018,    64,    34,   105,   829,     0,   480,
    1965       37,     0,   182,   183,    40,     0,     0,     0,     0,   487,
    1966        0,    41,    42,     0,     0,     0,     0,   430,   517,     0,
    1967      213,     0,     0,     0,     0,     0,   123,   126,   127,     0,
    1968      728,   534,   535,     0,     0,   212,   214,   698,     0,   410,
    1969      728,     0,     0,   556,     0,     0,     0,   700,     0,   105,
    1970        0,     0,     0,     0,   175,   728,     0,     0,   213,     0,
    1971        0,     0,   213,     8,     9,    10,    11,    12,     0,     0,
    1972      486,   175,     0,   212,   214,   175,     0,   212,   214,   535,
    1973        0,     0,     0,     0,     0,   258,     0,   829,   603,     0,
    1974        0,   455,    31,   506,   631,     0,     0,   253,     0,   254,
    1975        0,     0,     0,     0,     0,     0,     0,   636,     0,     0,
    1976      455,   636,    55,    55,   258,   535,     0,   460,     0,     0,
    1977       34,     0,     0,     0,   729,    37,  1388,   182,   183,    40,
    1978        0,   495,  1125,   323,     0,    55,    41,    42,   175,     0,
    1979       37,     0,   182,   183,    40,     0,     0,     0,     0,   213,
    1980        0,    41,    42,     0,     0,    55,    37,     0,   182,   183,
    1981       40,   480,   184,     0,   212,   214,     0,    41,    42,     0,
    1982        0,    37,   185,   173,   174,    40,   349,  1532,     0,   410,
    1983      395,   480,    41,    42,   870,     0,     0,  1533,     0,   480,
    1984      414,   415,     0,   184,     0,   419,     0,   421,   422,     0,
    1985      347,   347,     0,   185,     0,     0,     0,     0,   371,    55,
    1986        0,     0,     0,     0,    55,   724,     0,     0,   430,     0,
    1987      166,     0,   171,     0,     0,   177,   178,   179,     0,   181,
    1988      213,     0,     0,   738,     0,    64,     0,     0,     0,     0,
    1989        0,     0,     0,   430,   232,   212,   214,   430,    55,     8,
    1990        9,    10,    11,    12,   728,   728,   247,   248,     0,   729,
    1991        0,     0,   212,     0,     0,   455,   829,     0,     0,   729,
    1992       37,     0,   182,   183,    40,     0,   258,   349,    31,     0,
    1993      213,    41,    42,     0,   729,  1505,     0,  1509,     0,     0,
    1994        0,     0,   794,   795,   796,   212,   214,    37,     0,   173,
    1995      174,    40,     0,     0,   175,     0,    34,   264,    41,    42,
    1996        0,     0,   728,   728,     0,     0,     0,   265,     0,     0,
    1997        0,     0,  1538,   819,  1540,   347,     0,   460,     0,     0,
    1998        0,     0,     0,     0,   375,   535,     0,   175,     0,     0,
    1999        0,   636,   832,     0,   603,     0,   460,     0,   959,     0,
    2000      610,    55,     0,   175,     0,   851,     0,     0,   960,     0,
    2001        0,     0,     0,     0,     0,     0,     0,  1569,   175,  1570,
    2002        0,     0,     0,   603,    55,     0,     0,     0,   603,     0,
    2003        0,    55,  1577,  1578,   636,   339,     0,   349,   349,   349,
     1784      46,   111,    95,   147,   451,   438,   397,   398,   426,   148,
     1785      53,   113,   112,   399,   149,   790,   400,   401,   265,   258,
     1786     405,   711,   767,   604,    66,    67,   870,   706,   111,   111,
     1787     402,    46,   932,    95,   933,   403,   750,   934,   853,   841,
     1788     755,    53,    46,   918,    46,   717,   159,   617,  1185,   748,
     1789     511,  1091,   894,   110,    46,    66,    67,   381,   382,   845,
     1790      46,  1201,   191,    46,   846,   214,    46,   852,   224,   341,
     1791     612,    47,   819,   208,  1151,   504,   218,   217,   678,  1143,
     1792     111,   111,  1183,  1184,   406,   847,   397,   398,   210,   994,
     1793     150,   636,   408,   399,   844,   640,   400,   401,   687,   141,
     1794     405,   778,    47,   423,    46,  1398,   691,    46,   842,   200,
     1795     402,   932,    74,   933,    46,   403,   934,   151,   843,   950,
     1796     883,   883,   883,  1195,   974,   682,   684,   856,    30,   477,
     1797     885,   886,    30,   863,   289,   152,  1317,   166,  1461,   883,
     1798     104,   104,   407,    74,   147,    46,   161,   159,   904,  1134,
     1799     148,   535,   121,    46,   445,   149,  1135,  1465,    46,   201,
     1800     371,   167,    30,   977,   406,   857,   481,   483,   739,   860,
     1801     278,   104,   164,   466,   841,  1341,  -234,  -234,  1009,  1098,
     1802    1218,  1219,  1342,    46,    46,   120,   159,   482,  1014,   175,
     1803     877,  1418,  1419,    30,   880,    30,   676,  1262,   250,    46,
     1804     409,   754,   212,  1025,   409,  1318,   104,    46,  1481,   159,
     1805    1090,   161,  1461,   883,  1418,  1419,    46,   745,   140,    46,
     1806     769,   441,   957,    30,   147,  1263,   111,   535,   279,   439,
     1807     148,   150,   417,   142,   409,   149,   375,   164,   144,   259,
     1808     673,   111,   260,   842,   440,   111,  1185,  -234,  1259,    46,
     1809     111,    95,   376,   843,   212,  1465,   595,   169,   151,    53,
     1810    1465,  1420,   975,    46,    46,   487,   159,   409,   179,   841,
     1811      46,    30,   326,    66,    67,    60,   152,    46,  1037,   604,
     1812    1465,   759,   199,   711,  1429,   341,   823,  1465,   535,   845,
     1813     702,   477,   111,   854,   846,   609,  1185,   212,   665,  1507,
     1814     153,  1549,   471,  1201,   674,   883,    60,  1036,   604,   433,
     1815     617,   477,  1013,   604,  1016,   847,   760,   469,  1153,   477,
     1816      47,  1560,   673,   761,  1024,   830,   680,    46,  1564,   371,
     1817    1183,  1184,   685,   535,  1536,   434,  1538,  1343,   842,   573,
     1818     459,   861,  1191,   609,   523,   873,    46,    46,   843,   874,
     1819     535,   437,   925,  1491,   704,  1550,   856,   245,   212,   936,
     1820    1133,    74,  -290,    46,   114,   326,    74,    46,   879,  1192,
     1821    1200,   433,   108,   210,   574,  1091,   739,  1401,   652,   108,
     1822    1192,   949,  1565,    40,    41,   250,   674,   853,   -10,   104,
     1823      40,    41,  -112,  -112,    46,   530,   212,   434,   161,   108,
     1824     212,   482,  1180,  1181,    46,   489,   371,   157,  -112,   845,
     1825      40,    41,   506,   385,   846,   108,   248,   388,   870,  -517,
     1826    1185,   390,    46,   575,   164,  1040,    40,    41,    46,   386,
     1827      46,   738,  1209,   389,   584,   847,  1215,   391,   782,  1211,
     1828     585,   227,   392,   563,   564,   228,   915,   341,   232,   712,
     1829     234,   262,   739,   714,    46,  1456,   108,   243,   393,   111,
     1830    1230,  1231,  1213,  1201,   111,   713,   256,    40,    41,   715,
     1831    1201,   606,   157,   111,  -440,  1450,  1451,   712,    46,   565,
     1832     566,   175,  -112,   250,   328,   692,    46,   212,   371,  1405,
     1833      46,   585,    95,   928,    46,   788,   329,   111,   637,   111,
     1834      53,   108,   641,  -112,   210,  1120,  1149,   322,   559,   560,
     1835    1106,  1101,    40,    41,    66,    67,   338,  1117,   706,   652,
     1836     397,   398,   714,  1201,    60,   110,  -441,   399,    74,   478,
     1837     400,   401,   978,   274,  1090,   405,   111,  1258,   929,   652,
     1838    1347,   111,   652,  1037,   402,  1171,  1173,   895,    74,   403,
     1839     617,   276,   326,   326,   459,   504,    74,   459,  1018,   561,
     1840     562,    47,   830,   459,  1106,   477,   428,   906,   212,   284,
     1841     432,   766,   908,  1035,  1198,     8,     9,    10,    11,    12,
     1842      40,    41,  1198,   277,   227,   884,   884,   884,   783,   111,
     1843    1199,   766,   727,   789,   766,   330,    46,  1332,  1323,   406,
     1844     322,   454,    74,    30,   884,   331,   520,   954,    46,  1334,
     1845      46,   341,  1380,  1333,   530,   108,   530,   774,   212,   530,
     1846     875,   832,   530,   332,   876,  1335,    40,    41,   326,    46,
     1847     104,    33,   432,  1381,  1355,   494,   333,  -466,  1132,   738,
     1848     516,   471,  1357,  1358,  1359,    46,   108,   326,   137,   138,
     1849     334,   111,   830,   533,   534,   440,   528,    40,    41,   157,
     1850      46,   369,   111,    46,   111,   555,   383,   711,  -466,  1378,
     1851    -466,   896,  -291,   875,  -466,  1048,   370,  1116,   884,     8,
     1852       9,    10,    11,    12,   567,   568,  1035,   341,   241,    94,
     1853    1394,   478,   729,   586,   526,   409,  1095,    46,   730,    46,
     1854     604,   534,   897,   594,   651,  -105,   601,    30,   898,  -105,
     1855     374,   478,   111,   326,   905,   738,   907,   556,   111,   478,
     1856      94,   395,   557,   558,   227,   634,   232,   606,   108,   638,
     1857     111,   146,   338,    94,  1366,    33,  1128,   534,  1367,    40,
     1858      41,   212,   387,    46,    46,   746,  1428,   756,   210,   187,
     1859    1249,   747,    94,   757,  1253,    94,   871,    46,   577,   407,
     1860     409,   606,   210,   736,   872,    60,   424,  1349,   578,   212,
     1861     884,  1520,  1497,   673,   212,   425,   776,  1525,   409,  1497,
     1862     887,   702,   953,   958,  1055,   609,   777,   322,   322,   430,
     1863     773,   919,  1390,   959,  1251,   903,   774,   774,  1545,   461,
     1864     921,   727,    74,  1552,   448,   171,   774,   464,   762,   108,
     1865     763,   137,   236,   764,   227,   454,   770,  1002,   454,   459,
     1866      40,    41,  1015,  1003,   454,   681,   683,   499,   730,   500,
     1867     490,   830,  1546,  1499,    94,  1500,   114,   674,    46,  1175,
     1868     739,  1006,  1003,  1247,    74,   704,   237,    94,   251,   585,
     1869      46,   238,  1291,  1292,  1374,   589,   210,   409,   832,   467,
     1870     774,   494,   212,   322,   932,   494,   933,   468,  1375,   934,
     1871     774,  1008,   396,   187,   774,   528,   212,   528,  1377,  1382,
     1872     528,  1447,   322,   528,   774,   774,   108,  1444,   137,   138,
     1873    1547,   510,   506,   652,   338,   514,    94,    40,    41,  1466,
     1874     111,   652,   978,  1513,  1570,   774,   978,   978,    94,  1514,
     1875     585,    53,   289,   526,   793,   794,   795,   909,   526,   409,
     1876     739,   526,   912,    46,   409,    66,    67,   328,   409,     2,
     1877     204,     4,     5,     6,     7,   519,   727,    46,    94,   108,
     1878     531,   137,   138,   535,   415,    46,   727,  1196,   322,   569,
     1879      40,    41,   485,  1077,   250,   328,   409,   534,  1155,   828,
     1880     409,   727,   601,    46,  1167,   478,   409,   435,  1387,  1388,
     1881     212,   736,   417,   669,   409,   812,   751,   443,  1122,  1121,
     1882    1170,   752,   609,   111,  1182,     2,   204,     4,     5,     6,
     1883       7,   869,   652,    34,   570,    35,   601,   487,   328,   409,
     1884     111,   571,   878,   652,   575,   111,    36,   478,   181,   182,
     1885      39,   337,  1172,    74,   609,  -292,    94,    40,    41,  1438,
     1886    1003,  1339,     8,     9,    10,    11,    12,  1242,    36,   459,
     1887     172,   173,    39,  1444,  1445,  1137,   611,  1492,  1493,    40,
     1888      41,   104,  1235,   608,   409,   609,   527,   736,   440,    34,
     1889      30,    35,  1145,   610,   111,   766,    -3,  1145,   338,   854,
     1890     328,   609,  1446,   572,   652,   370,  -437,   111,   111,   111,
     1891     593,    53,     8,     9,    10,    11,    12,  1532,    33,  1458,
     1892     454,   800,   801,   802,   803,  1203,    67,   108,   596,   137,
     1893     138,   534,   111,   187,  1418,  1419,   160,   326,    40,    41,
     1894      30,   646,   940,   738,   940,   666,  1145,   667,   104,  1399,
     1895     494,   668,   192,  1399,   670,   215,  1077,   671,   225,  1210,
     1896    1212,  1214,  -293,    46,   798,   799,   890,  1106,    33,     8,
     1897       9,    10,    11,    12,   338,   672,   341,   993,    36,   675,
     1898     172,   173,    39,   703,   677,  -112,   695,  -112,   871,    40,
     1899      41,  -112,  1518,  1458,  1310,  1311,  1312,    30,   804,   805,
     1900     727,   727,   212,  1348,  1350,  1351,  -112,  -112,   796,   797,
     1901     577,   255,   409,    74,   718,   374,    60,   720,  -238,    94,
     1902     578,   758,   771,   611,   534,    33,   775,   779,   -12,   893,
     1903     833,   835,  1017,   837,   689,   848,   828,   160,   111,   -13,
     1904     900,   104,   892,   459,   920,   536,   537,   538,   922,   923,
     1905     372,  -414,   208,   218,   217,  1482,   927,   698,   727,   727,
     1906      46,   948,  -521,   962,   969,   652,   747,   210,   731,   539,
     1907     983,   540,  1369,   541,   542,    53,   160,   971,     2,   204,
     1908       4,     5,     6,     7,   976,   982,   984,   986,   987,    66,
     1909      67,   988,   989,   998,  1122,  1121,    36,  1010,  1011,   160,
     1910      39,  1012,   111,   111,   111,   527,   226,    40,    41,  1026,
     1911     527,   442,  1027,   527,  1028,  1029,   127,  1077,   128,   129,
     1912     130,   536,   537,   538,  1030,  1031,   828,    40,    41,   728,
     1913     454,  1032,  1043,   838,  1057,   609,  -402,   840,  -401,   611,
     1914    1092,  1442,    34,   610,    35,   539,  1558,   540,   439,   541,
     1915    1319,   935,  1102,    53,  1145,  1145,  1145,  1103,  1094,   652,
     1916     652,  1104,  1105,   440,  1109,  1110,  1111,  1203,    67,  1112,
     1917     494,  1123,   322,   935,  1113,  1119,   478,    74,    36,  1129,
     1918     774,   212,    39,   104,  1130,  1079,  1136,  1122,  1121,    40,
     1919      41,  1141,   397,   398,  1131,   992,  1144,    36,  1165,   399,
     1920    1328,    39,   400,   401,  1190,   104,   405,  1186,    40,    41,
     1921    1187,   766,  1077,  1188,   652,    42,   402,   652,   534,   372,
     1922    1189,   403,  1204,   869,   104,   145,   931,  1205,   703,  1207,
     1923     673,  1208,   727,  1216,   743,  1220,    46,    46,  1222,  1223,
     1924     727,   727,   727,    -3,   744,  1228,   111,   111,  1531,    36,
     1925    1233,   172,   173,    39,  1239,    74,    63,   115,   499,   516,
     1926      40,    41,   652,  1243,  1007,  1248,  1077,   652,  1250,  1077,
     1927     406,   917,   840,   611,  1252,   736,  1255,   212,  1256,  1260,
     1928     924,  1264,  1267,   104,   926,   111,  1269,    63,   727,  1271,
     1929    1122,  1121,  1272,  1273,   674,  1274,   372,   652,  1145,  1145,
     1930     158,  1275,  1277,   174,   454,   828,  1284,  1293,  1294,  1301,
     1931     139,  1330,  1304,    53,  1077,  1322,  1305,   104,  1307,  1077,
     1932      53,    36,   219,   181,   182,    39,  1336,  1203,    67,  1308,
     1933     147,  1316,    40,    41,  1203,    67,   148,  1483,   728,  1338,
     1934      60,   149,  1050,  1340,    46,   111,  1344,  1345,  1206,  1077,
     1935    1346,  1352,  1353,   174,   111,   736,   174,  1354,   183,   257,
     1936     652,   239,   242,  1356,  1362,   652,  1363,   840,   184,    46,
     1937      46,  1441,   159,    53,  1364,   534,  1365,  1372,  1376,   611,
     1938    1373,   213,  1383,   652,  1384,   652,  1312,  1203,    67,   652,
     1939    1395,  1392,   652,  1393,    46,  1402,   371,  1533,   240,  1405,
     1940     652,   327,   174,  1412,   652,  1413,  1541,  -403,  1416,   257,
     1941     348,  1427,  1077,  1435,  1505,    74,  1505,  1077,   478,  1431,
     1942     104,  1433,    74,   338,  1436,  1443,  1437,  1367,  1448,  1452,
     1943     935,  1453,  1454,   213,  1455,  1077,  1457,  1077,  1467,  1469,
     1944     404,  1077,  1475,   104,  1077,  1299,  1300,  1123,  1302,  1462,
     1945     104,  1505,  1077,  1505,  1306,   422,  1077,  1309,   427,   429,
     1946    1471,  1152,  1473,   158,  1477,   174,   703,  1479,  1480,  1485,
     1947    1486,  1487,  1498,   728,   703,    74,   213,  1508,  1512,  1510,
     1948     165,  1524,   170,   728,   446,   176,   177,   178,   449,   180,
     1949     450,  1516,   611,  1517,  1539,  1544,  1540,  1551,   728,   465,
     1950    1553,  1555,  1561,   104,   231,    63,  1568,   326,  1569,  1079,
     1951     479,  1050,  1221,   806,  1321,   807,   246,   247,  1100,   174,
     1952     486,   808,   463,  1519,   211,   810,   174,  1430,   429,   809,
     1953     122,   125,   126,  1571,   230,  1386,  1254,   213,  1403,  1501,
     1954    1123,     8,     9,    10,    11,    12,     8,     9,    10,    11,
     1955      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     1956      22,    23,    24,  -294,  1227,    25,    26,    27,   693,    30,
     1957     694,  1107,   941,   722,    30,   213,   211,  1056,   478,   213,
     1958    1108,  1140,   825,  1118,   899,   478,   935,   964,  1331,   741,
     1959     972,   815,     0,     0,   816,   174,   257,    33,   817,   602,
     1960       0,   252,    33,   253,  1391,   630,     0,     0,     0,    37,
     1961      38,     0,   174,  -294,     0,     0,   174,  1424,   635,   211,
     1962       0,     0,   635,     0,     0,   257,     0,     8,     9,    10,
     1963      11,    12,     0,     0,     0,     0,     0,     0,   478,   776,
     1964       0,   409,     0,  1123,   935,   935,   337,     0,     0,   777,
     1965       0,     0,     0,     0,   109,    30,     0,     0,  1417,   653,
     1966       0,  1425,     0,     0,     0,  1217,   213,     0,     0,     0,
     1967       0,     0,   479,     0,     0,  1504,     0,  1504,     0,   174,
     1968     211,     0,     0,    33,   394,     0,     0,   348,     0,     0,
     1969       0,     0,   479,     0,   413,   414,     0,   728,   728,   418,
     1970     479,   420,   421,     0,     0,     0,  1464,     0,     0,     0,
     1971       0,  1468,  1504,     0,  1504,     0,     0,     0,   211,     0,
     1972       0,     0,   211,     0,     0,   958,   723,   609,     0,   429,
     1973       0,     0,     0,     0,     0,   959,     0,     0,   505,     0,
     1974     716,  1490,   322,     0,   737,   463,    63,   213,     0,     8,
     1975       9,    10,    11,    12,   429,   728,   728,     0,   429,     0,
     1976       0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
     1977      11,    12,     0,   600,   607,     0,     0,    30,   749,    36,
     1978     753,   181,   182,    39,     0,   631,   632,   257,   348,     0,
     1979      40,    41,     0,     0,     0,    30,     0,   213,     0,     0,
     1980       0,     0,     0,     0,     0,    33,     0,     0,     0,   211,
     1981      36,     0,   181,   182,    39,     0,   697,     0,   409,     0,
     1982       0,    40,    41,    33,   698,     0,   699,  1559,    36,     0,
     1983     181,   182,    39,  1559,   818,     0,     0,     0,     0,    40,
     1984      41,     0,     0,     0,  1559,   174,     0,   608,  1559,   609,
     1985       0,     0,   635,   831,   935,   602,     0,   610,     0,     0,
     1986       0,     0,     0,     0,     0,   697,   850,   409,     0,     0,
     1987       0,   935,     0,     0,     0,   699,     0,     0,   174,     0,
     1988       0,     0,     0,     0,   602,     0,     0,     0,     0,   602,
     1989     211,     0,     0,     0,   174,   635,     0,  1329,   348,   348,
     1990     348,     0,     0,     0,     0,  1385,     0,   211,     0,   174,
     1991      36,     0,   181,   182,    39,     0,     0,   348,     0,     0,
     1992     213,    40,    41,     0,     0,     0,     0,     0,     0,   728,
     1993       0,     0,   891,     0,     0,   723,     0,   728,   728,   728,
     1994     211,     0,     0,     0,   935,   935,   479,   697,   213,   409,
     1995       0,   257,   737,   213,     0,   937,     0,   699,     0,     0,
     1996       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     1997      17,    18,    19,    20,    21,    22,    23,    24,    72,     0,
     1998      25,    26,    27,     0,     0,   728,     0,     0,   479,    30,
     1999     452,   348,     0,   944,     0,     0,     0,     0,     0,   947,
     2000     963,     0,     0,   429,     0,    75,   174,     0,     0,    72,
     2001      36,     0,   181,   182,    39,     0,     0,    33,     0,     0,
     2002       0,    40,    41,     0,    37,    38,     0,   257,   737,     0,
     2003       0,     0,     0,   991,     0,     0,    75,     0,     0,     0,
     2004       0,   213,     0,     0,   220,     0,     0,  1529,     0,   409,
     2005       0,     0,     0,     0,     0,   213,     0,  1530,   485,     0,
     2006       0,   453,     0,   211,  1502,   710,  1506,     0,     0,   109,
     2007     723,   221,     0,     0,     0,     0,     0,     0,     0,     0,
     2008     723,     0,     0,   348,     0,   635,   820,   821,  1023,   635,
     2009     831,   211,     0,     0,     0,   723,   211,     0,     0,     0,
     2010       0,  1535,     0,  1537,     0,  1034,    36,     0,   181,   182,
     2011      39,     0,     0,     0,     0,     0,   855,    40,    41,   858,
     2012     859,     0,   862,     0,   864,   865,     0,     0,     0,   866,
     2013     867,     0,   351,   543,   544,   545,   546,   547,   548,   549,
     2014     550,   551,   552,   263,     0,     0,  1566,     0,  1567,   213,
     2015       0,     0,     0,   264,   951,     0,   952,    63,     0,   353,
     2016       0,  1574,  1575,   955,   956,     0,     0,   553,   961,     0,
     2017       0,     0,   174,     0,   653,     0,   411,     0,     0,   635,
     2018     966,  1060,     0,   419,   211,   970,     0,     0,     8,     9,
     2019      10,    11,    12,     0,     0,     0,     0,     0,   211,     0,
     2020       0,     0,     0,     0,     0,     0,   447,     0,     0,     0,
     2021       0,   999,     0,   942,   943,  1115,    30,     0,   505,   945,
     2022       0,     0,     0,   429,   115,     0,     0,    72,     0,     0,
     2023       0,     0,    72,     0,     0,     0,     0,     0,     0,     0,
     2024       0,   348,     0,     0,    33,     0,     0,     0,     0,    36,
     2025       0,   181,   182,    39,    75,   411,   600,     0,     0,    75,
     2026      40,    41,     0,     0,     0,     0,   124,   124,   124,     0,
     2027       0,     0,     0,   653,     0,     0,   602,     0,     0,     0,
     2028       0,     0,     0,     0,     0,     0,  1529,     0,   409,   427,
     2029       0,     0,   211,     0,   723,   723,  1530,   348,   348,     0,
     2030       0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
     2031       0,   583,     0,  1044,  1045,  1046,  1047,  1202,  1049,   587,
     2032       0,     0,   590,     0,     0,     0,     0,   220,     0,     0,
     2033       0,     0,    30,     0,  1093,     0,     0,   124,     0,   124,
     2034       0,   213,     0,     0,     0,     0,     0,     0,  1099,     0,
     2035       0,     0,   723,   723,   221,     0,     0,     0,   635,     0,
     2036      33,     0,     0,     0,   273,    36,     0,   181,   182,    39,
     2037       0,     0,     0,  1060,     0,     0,    40,    41,     0,     0,
     2038       0,     0,     0,     0,     0,   411,     0,  1114,     0,   419,
     2039       0,     0,     0,     0,    72,     0,     0,     0,     0,     0,
     2040       0,     0,   183,     0,     0,     0,     0,     0,     0,   351,
     2041       0,     0,   184,     0,    72,     0,   737,     0,     0,     0,
     2042     124,    75,    72,     0,     0,     0,     0,  1142,   124,     0,
     2043     124,   124,     0,     0,  1150,   124,   353,   124,   124,  1154,
     2044       0,    75,     0,     0,  1158,     0,  1159,     0,   351,    75,
     2045    1161,  1162,  1163,     0,     0,  1166,     0,     0,     0,  1298,
     2046       0,     0,     0,     0,  1178,     0,   351,     0,    72,   174,
     2047       0,     0,     0,     0,   411,   353,   257,     0,     0,  1297,
     2048       0,    63,  1193,  1194,   211,     0,     0,     0,     8,     9,
     2049      10,    11,    12,   353,   723,    75,   737,     0,     0,     0,
     2050     115,     0,     0,     0,     0,     0,     0,   124,     0,  1224,
     2051     351,     0,  1226,     0,     0,     0,    30,     0,     0,     0,
     2052     213,     0,     0,     0,     0,     0,   723,     0,     0,     0,
     2053       0,     0,     0,     0,   723,   723,   723,   353,     0,     0,
     2054       0,     0,     0,     0,    33,   348,   348,     0,     0,    36,
     2055    1241,   181,   182,    39,     0,     0,  1245,  1246,     0,  1202,
     2056      40,    41,     0,     0,     0,     0,   583,   583,  1257,     0,
     2057       0,     0,     0,  1261,     0,   351,  1265,     0,  1266,     0,
     2058       0,  1268,   723,     0,     0,     0,   263,     0,     0,     0,
     2059       0,     0,     0,   115,  1276,     0,   264,     0,     0,     0,
     2060       0,     0,   353,  1232,     0,     0,     0,  1283,     0,  1285,
     2061    1286,  1287,  1288,     0,     0,     0,   213,     0,     0,     0,
     2062     351,   351,   351,     0,     0,  1295,     0,  1296,     0,     0,
     2063       0,   170,     0,     0,     0,     0,     0,     0,     0,   351,
     2064       0,     0,     0,     0,     0,   174,     0,   353,   353,   353,
     2065       0,     0,     0,     0,     0,   910,     0,   351,     0,   913,
     2066    1324,  1325,     0,   211,     0,     0,   353,     0,    72,     0,
     2067     348,     0,    77,     0,   351,     0,     0,     0,     0,     0,
     2068       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
     2069       0,     0,   411,     0,     0,    75,   115,     0,     0,    84,
     2070       0,   353,     0,    77,     0,    54,    54,     0,     0,     0,
     2071      72,  1360,  1361,   351,     0,     0,     0,     0,     0,  1202,
     2072       0,  1371,     0,     0,     0,     0,  1202,  1320,     0,     0,
     2073      84,     0,     0,     0,     0,     0,    54,    75,   222,     0,
     2074     353,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2075     351,     0,     0,     0,     0,     0,     0,     0,     0,   211,
     2076       0,     0,     0,     0,     0,   223,     0,     0,    54,     0,
     2077       0,    54,     0,  1404,     0,     0,     0,   353,     0,  1202,
     2078       0,     0,     0,     0,     0,  1408,  1554,  1409,  1410,  1411,
     2079       0,     0,   351,     0,     0,     0,     0,     0,     0,  1415,
     2080       0,     0,   351,     0,     0,   351,     0,   583,  1426,     0,
     2081     220,     0,   351,     0,     0,     0,     0,   351,     0,   353,
     2082       0,     0,   124,   124,  1439,     0,   354,     0,     0,   353,
     2083       0,     0,   353,     0,     0,     0,     0,   221,     0,   353,
     2084       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
     2085       0,     0,   124,   361,     0,   124,   124,     0,   124,   346,
     2086     124,   124,     0,     0,     0,   124,   124,     0,     0,     0,
     2087       0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
     2088    1488,  1489,     0,     0,     0,     0,     0,     0,     0,     0,
     2089       0,     0,     0,  1494,     0,     0,     0,     0,     0,     0,
     2090    1494,     0,     0,     0,     0,     0,    75,     0,     0,     0,
    20042091       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2005       73,     0,     0,   213,     0,     0,   349,     0,     0,     0,
    2006     1125,     0,     0,     0,     0,     0,     0,     0,   212,   214,
    2007        0,     0,     0,     0,   724,     0,     0,     0,     0,     0,
    2008        0,   213,    73,     0,    55,   480,   213,     0,     0,     0,
    2009      258,   738,     0,     0,   938,     0,   212,   214,     0,     0,
    2010        0,   212,   214,     0,     0,     0,  1331,     0,     0,     0,
    2011        0,     0,     0,     0,     0,   175,     0,   221,     0,   535,
    2012        0,     0,     0,     0,     0,     0,     0,   480,     0,     0,
    2013      349,     0,     0,   729,   729,     0,     0,     0,   728,   964,
    2014        0,     0,   430,     0,     0,     0,   728,   728,   728,     0,
    2015        0,   460,     0,  1125,     0,     0,     0,     0,     0,     0,
    2016        0,     0,     0,   601,   608,   994,   258,   738,     0,     0,
    2017        0,     0,   992,     0,   213,   632,   633,     0,     0,   125,
    2018      125,   125,     0,     0,     0,     0,     0,     0,   213,   212,
    2019      214,   729,   729,     0,   728,     0,     0,     0,     0,     0,
    2020        0,     0,     0,   212,   214,   352,     0,     0,     0,   724,
    2021        0,     0,   535,     0,     0,     0,     0,     0,     0,   724,
    2022        0,     0,   349,   506,   636,     0,     0,  1024,   636,   832,
    2023        0,     0,   821,   822,   724,     0,     0,     0,     0,     0,
    2024        0,     0,     0,     0,  1035,     0,     0,     0,     0,     0,
    2025      125,     0,   125,     0,     0,     0,  1125,     8,     9,    10,
    2026       11,    12,   856,     0,     0,   859,   860,     0,   863,     0,
    2027      865,   866,     0,     0,     0,   867,   868,   274,     0,   448,
    2028        0,   175,   213,     0,     0,     0,    31,     0,  1507,     0,
    2029     1507,     0,     0,     0,     0,     0,    64,   212,   214,     0,
    2030       73,     0,     0,     0,     0,    73,   412,     0,     0,     0,
    2031        0,     0,     0,   420,    34,     0,     0,     0,   636,    37,
    2032        0,   182,   183,    40,     0,  1507,     0,  1507,     0,     0,
    2033       41,    42,     0,   125,     0,  1332,     0,     0,     0,     0,
    2034        0,   125,     0,   125,   125,     0,     0,     0,   125,     0,
    2035      125,   125,     0,     0,  1117,   323,  1532,     0,   410,   943,
    2036      944,     0,   430,   116,     0,   946,  1533,   729,     0,     8,
    2037        9,    10,    11,    12,     0,   729,   729,   729,     0,     0,
    2038      349,     0,     0,     0,     0,   412,     0,     0,     0,     8,
    2039        9,    10,    11,    12,     0,     0,     0,     0,    31,     0,
    2040      221,     0,     0,     0,     0,     0,   535,     0,     0,     0,
    2041        0,     0,     0,     0,     0,   603,     0,     0,    31,     0,
    2042      125,     0,     0,   729,     0,     0,    34,     0,   428,     0,
    2043        0,    37,     0,   724,   724,    40,   349,   349,     0,     0,
    2044        0,   584,    41,    42,     0,     0,    34,   517,     0,   588,
    2045        0,    37,   591,   182,   183,    40,  1204,     0,     0,     0,
    2046        0,     0,    41,    42,     0,     0,     0,    73,    43,     0,
    2047        0,    76,     0,     0,   213,     0,     0,     0,   146,     0,
    2048        0,     0,   352,     0,     0,     0,     0,    73,   264,   212,
    2049      214,   724,   724,     0,     0,    73,     0,   636,   265,     0,
    2050        0,     0,     0,    76,     0,     0,     0,     0,     0,     0,
    2051        0,     0,     0,     0,     0,   412,     0,     0,     0,   420,
    2052        0,   352,     0,     0,  1508,     0,  1508,     0,   544,   545,
    2053      546,   547,   548,   549,   550,   551,   552,   553,   222,   352,
    2054        0,    73,     0,     0,   952,     0,   953,     0,     0,     0,
    2055        0,     0,     0,   956,   957,     0,   738,     0,   962,     0,
    2056        0,  1508,   554,  1508,   535,     8,     9,    10,    11,    12,
    2057      967,     0,     0,     0,     0,   971,     0,     0,     0,   175,
    2058        0,     0,     0,   352,     0,     0,     0,     0,     0,     0,
    2059        0,     0,     0,     0,    31,     0,     0,     0,     0,  1301,
    2060        0,  1000,     0,     0,   412,     0,     0,     0,     0,     0,
    2061        0,     0,     0,     0,     0,     0,   258,     0,     0,     0,
    2062        0,    64,    34,     0,     0,     0,   354,    37,     0,     0,
    2063        0,    40,     0,     0,     0,   724,     0,   738,    41,    42,
    2064        0,   116,     0,     0,     0,     0,   601,     0,   352,     0,
    2065        0,     0,     0,     0,   213,     0,     0,     0,     0,     0,
    2066        0,     0,     0,     0,   744,     0,     0,   724,     0,   212,
    2067      214,     0,     0,     0,   745,   724,   724,   724,     0,     0,
    2068        0,     0,     0,     0,     0,     0,   349,   349,     0,     0,
    2069        0,     0,     0,   352,   352,   352,   584,   584,     0,     0,
    2070     1204,     0,     0,  1045,  1046,  1047,  1048,     0,  1050,     0,
    2071        0,     0,   352,     0,     0,     0,     0,     0,     0,     0,
    2072        0,    76,     0,   724,  1094,     0,    76,     0,     0,     0,
    2073      352,     0,     0,     0,   116,   125,   125,     0,  1100,     0,
    2074        0,    73,     0,     0,     0,     0,     0,   352,     0,  1234,
    2075        0,   213,     0,     0,     0,     0,   175,     0,     0,     0,
    2076        0,     0,     0,     0,     0,   125,   212,   214,   125,   125,
    2077        0,   125,     0,   125,   125,     0,     0,  1116,   125,   125,
    2078        0,     0,     0,    73,     0,   911,   352,     0,     0,   914,
    2079        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2080       18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
    2081        0,   349,     0,     0,     0,     0,     0,  1144,     0,    31,
    2082        0,   222,   412,   352,  1152,     0,     0,     0,     0,  1156,
    2083        0,     0,     0,     0,  1160,     0,  1161,   116,     0,     0,
    2084     1163,  1164,  1165,     0,     0,  1168,     0,    34,     0,     0,
    2085        0,     0,     0,     0,  1180,     0,     0,   125,  -294,     0,
    2086     1204,     0,   125,   125,     0,   352,     0,  1204,   125,     0,
    2087        0,     0,  1195,  1196,  1323,   352,     0,     0,   352,     0,
    2088        0,     0,     0,   221,     0,   352,     0,     0,    76,     0,
    2089      352,     0,     0,     0,     0,     0,     0,     0,     0,  1226,
    2090        0,     0,  1228,   354,     0,     0,     0,     0,    76,     0,
    2091        0,     0,     0,     0,     0,     0,    76,     0,     0,     0,
    2092     1204,     0,     0,     0,     0,     0,     0,  1557,     0,     0,
    2093        0,     0,     0,     0,     0,     0,     0,   584,     0,     0,
    2094        0,  1244,   354,     0,     0,     0,     0,  1248,  1249,     0,
    2095        0,     0,    73,     0,     0,     0,     0,     0,     0,  1260,
    2096      354,     0,    76,    78,  1264,     0,     0,  1268,     0,  1269,
    2097        0,     0,  1271,     0,     0,     0,     0,     0,     0,     0,
    2098        0,     0,     0,     0,     0,  1279,     0,     0,     0,     0,
    2099        0,     0,     0,     0,     0,    78,   281,   282,  1286,   283,
    2100     1288,  1289,  1290,  1291,   354,     0,     0,     0,     0,     0,
    2101        0,     0,     0,     0,     0,     0,  1298,     0,  1299,     0,
    2102        0,     0,   171,     0,     0,   284,     0,     0,     0,     0,
    2103      223,   649,     0,   138,   139,   286,   352,     0,   287,   650,
    2104      289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
    2105      412,  1327,  1328,   293,     0,     0,     0,     0,     0,     0,
    2106        0,     0,     0,     0,     0,     0,     0,     0,   294,   354,
    2107      651,     0,   652,   379,     0,     0,     0,   296,   380,   298,
    2108      299,   300,   301,     0,     0,     0,     0,     0,     0,   352,
    2109      352,     0,   352,   352,     0,     0,     0,     0,     0,     0,
    2110        0,     0,     0,  1363,  1364,     0,     0,     0,     0,     0,
    2111        0,     0,    73,  1374,   354,   354,   354,     0,   355,     0,
    2112        0,     0,     0,     0,     0,     0,     0,     0,     0,  1158,
    2113        0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
    2114        0,     0,     0,     0,     0,  1170,     0,   352,   352,     0,
     2092     411,    77,     0,     0,    54,     0,    77,     0,     0,     0,
     2093       0,     0,     0,  1528,     0,     0,     0,  1534,     0,     0,
     2094       0,     0,     0,     0,   124,     0,     0,     0,    84,   124,
     2095     124,     0,     0,    84,    54,   124,     0,     0,     0,     0,
     2096       0,     0,     0,   351,     0,     0,  1556,     0,  1557,     0,
     2097       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
     2098      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
     2099     353,    25,    26,    27,     0,     0,  1572,  1573,     0,  1156,
     2100      30,   452,     0,     0,  1576,  1577,     0,     0,     0,     0,
     2101       0,     0,     0,     0,     0,  1168,   351,   351,     0,   351,
     2102     351,   222,     0,     0,     0,     0,     0,     0,    33,     0,
     2103       0,     0,     0,     0,     0,    37,    38,     0,     0,    72,
     2104       0,     0,     0,   353,   353,     0,   353,   353,   223,     8,
     2105       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2106      19,    20,    21,    22,    23,    24,    75,     0,    25,    26,
     2107      27,     0,   453,     0,   351,   351,   946,    30,     0,     0,
     2108     109,     0,     0,     0,     0,     0,     0,     0,    77,     0,
     2109       0,     0,  1236,     0,     0,     0,     0,     0,     0,     0,
     2110       0,   353,   353,   354,     0,    33,     0,     0,    77,     0,
     2111      36,     0,    37,    38,    39,    84,    77,     0,     0,     0,
     2112       0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
     2113     361,     0,     0,     0,     0,    84,   346,     0,   351,     0,
     2114       0,     0,   354,    84,     0,     0,     0,    42,     0,   155,
     2115       0,     0,     0,     0,     0,     0,     0,    44,     0,     0,
     2116     354,     0,    77,     0,     0,   353,     0,     0,     0,   361,
     2117       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2118       0,   220,     0,     0,     0,     0,     0,   361,     0,    84,
     2119       0,     0,     0,     0,     0,    54,     0,     0,     0,     0,
     2120       0,     0,     0,    72,   354,     0,     0,     0,   221,     0,
     2121       0,     0,     0,     0,     0,     0,   351,     0,   351,     0,
     2122       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2123      75,   361,     0,     0,     0,     0,     0,   346,     0,     0,
     2124       0,     0,     0,   353,     0,   353,     0,     0,   351,     0,
     2125       0,     0,     0,     0,     0,     0,   351,   351,   351,     0,
     2126       0,     0,     0,     0,     0,     0,     0,   351,   351,   354,
     2127       0,     0,     0,     0,     0,   353,     0,     0,     0,     0,
     2128       0,    72,     0,   353,   353,   353,     0,     0,     0,     0,
     2129       0,     0,     0,     0,   353,   353,   361,     0,     0,     0,
     2130       0,     0,   346,     0,   351,     0,     0,     0,    75,     0,
     2131       0,     0,     0,     0,   354,   354,   354,     0,     0,     0,
     2132       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2133       0,   353,     0,   354,     0,     0,     0,     0,     0,   124,
     2134       0,   361,   361,   361,     0,     0,     0,   346,   346,   346,
    21152135       0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
    2116        0,     0,    76,     0,     0,  1407,     0,     0,   354,     0,
    2117        0,     0,     0,     0,     0,     0,     0,  1411,     0,  1412,
    2118     1413,  1414,   281,   282,     0,   283,     0,     0,     0,     0,
    2119        0,  1418,     0,     0,     0,     0,     0,     0,     0,     0,
    2120     1429,     0,     0,     0,    76,     0,     0,   354,     0,     0,
    2121        0,   284,   352,    78,     0,     0,  1442,   285,    78,     0,
    2122        0,   286,  1238,     0,   287,   288,   289,   290,    41,    42,
    2123        0,   291,   292,     0,     0,     0,     0,     0,    85,   293,
    2124        0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
    2125        0,     0,   125,     0,   294,   221,   378,     0,     0,   379,
    2126        0,     0,     0,   296,   380,   298,   299,   300,   301,     0,
    2127       85,     0,  1491,  1492,     0,     0,     0,    73,     0,     0,
    2128        0,     0,     0,     0,     0,  1497,   354,     0,     0,     0,
    2129        0,   352,  1497,   352,     0,     0,   354,     0,     0,   354,
    2130        0,     0,     0,     0,   222,   224,   354,     0,     0,     0,
    2131        0,   354,     0,   223,     0,     0,     0,     0,     0,     0,
    2132        0,     0,     0,   352,     0,  1531,     0,     0,     0,  1537,
    2133        0,   352,   352,   352,     0,     0,     0,     0,     0,     0,
    2134        0,     0,   352,   352,     0,     0,     0,     0,     0,     0,
    2135        0,     0,     0,     0,     0,     0,    73,     0,  1559,     0,
    2136     1560,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2137        0,     0,     0,    76,     0,     0,     0,   125,     0,   352,
    2138       78,     0,     0,     0,     0,     0,     0,     0,  1575,  1576,
    2139        0,     0,     0,   362,     0,   355,  1579,  1580,     0,     0,
    2140       78,     0,     0,     0,     0,     0,  -519,     0,    78,     1,
     2136     361,     0,    77,     0,     0,     0,   346,     0,   354,     0,
     2137       0,     0,     0,     0,     0,     0,     0,     0,   361,  1033,
     2138       0,     0,     8,     9,    10,    11,    12,     0,     0,    84,
     2139       0,     0,   351,     0,     0,   361,     0,     0,     0,     0,
     2140       0,     0,     0,     0,    77,     0,     0,   354,   280,   281,
     2141      30,   282,     0,     0,     0,     0,     0,     0,     0,   353,
     2142       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2143       0,    84,     0,     0,   361,     0,     0,   283,    33,     0,
     2144     346,    72,     0,   284,   354,     0,     0,   285,    72,     0,
     2145     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
     2146       0,     0,     0,   124,     0,   292,     0,     0,    75,     0,
     2147       0,   361,     0,     0,     0,    75,     0,     0,     0,     0,
     2148     293,     0,   377,     0,     0,     0,   354,     0,     0,   295,
     2149     826,   297,   298,   299,   300,     0,   354,     0,     0,   354,
     2150       0,    72,     0,     0,   222,     0,   354,     0,     0,     0,
     2151       0,   354,     0,   361,     0,     0,     0,     0,     0,     0,
     2152       0,     0,     0,   361,     0,     0,   361,     0,    75,     0,
     2153       0,   223,   346,   361,     0,     0,     0,     0,   361,   346,
     2154       0,     0,     0,     0,     0,  -516,     0,     0,     1,     2,
     2155       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2156      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2157      23,    24,     0,    77,    25,    26,    27,    28,     0,     0,
     2158      29,     0,     0,    30,    31,     0,     0,     0,     0,     8,
     2159       9,    10,    11,    12,     0,     8,     9,    10,    11,    12,
     2160      84,     0,     0,     0,     0,     0,    54,     0,    32,     0,
     2161       0,    33,   163,    34,     0,    35,    36,    30,    37,    38,
     2162      39,     0,     0,    30,     0,     0,     0,    40,    41,     0,
     2163       0,   216,     0,     0,     0,     0,     0,     0,     0,     0,
     2164       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
     2165      36,    33,     0,    42,    39,    43,    36,   354,     0,     0,
     2166      39,    40,    41,    44,     0,     0,     0,    40,    41,     0,
     2167       0,     0,     0,    54,     0,     0,     0,   163,     0,     0,
     2168       0,     0,     0,   270,   361,     0,     0,    42,     0,     0,
     2169     346,     0,     0,   743,     0,     0,     0,   145,     0,     0,
     2170       0,     0,     0,   744,     0,     0,     0,     0,     0,     0,
     2171     354,   354,   163,   354,   354,     0,     0,     0,     0,     0,
     2172       0,     0,   367,     0,     0,     0,   373,     0,     0,     0,
     2173       0,     0,     0,    77,     0,     0,     0,   361,   361,     0,
     2174     361,   361,     0,     0,     0,     0,   346,   346,     0,     0,
     2175       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2176      84,     0,     0,     0,     0,     0,    54,     0,   354,   354,
     2177       0,     0,     0,     0,     0,   163,     0,     0,     0,     0,
     2178       0,     0,     0,     0,     0,     0,     0,   216,     0,     0,
     2179       0,     0,     0,     0,     0,   361,   361,     0,     0,     0,
     2180       0,   280,   281,     0,   282,   163,   460,     8,     9,    10,
     2181      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2182      21,    22,    23,    24,     0,     0,    25,    26,    27,   373,
     2183     283,     0,   354,     0,     0,    30,   284,   163,     0,     0,
     2184     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
     2185     290,   291,     0,     0,     0,     0,     0,     0,   292,   361,
     2186       0,   460,     0,    33,   163,     0,     0,     0,     0,     0,
     2187     205,    38,     0,   512,     0,   222,     0,     0,     0,     0,
     2188       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
     2189       0,     0,     0,     0,     0,     0,     0,    77,     0,     0,
     2190       0,     0,   223,     0,     0,     0,     0,    54,    54,     0,
     2191     354,   605,   354,     0,     0,   269,   629,     0,     0,     0,
     2192       0,     0,     0,     0,    84,     0,     0,     0,     0,     0,
     2193      54,     0,     0,     0,     0,     0,     0,   361,     0,   361,
     2194       0,     0,   354,     0,     0,     0,     0,     0,     0,    54,
     2195     354,   354,   354,     0,     0,     0,     0,     0,     0,     0,
     2196       0,   354,   354,     0,     0,     0,     0,     0,     0,   361,
     2197       0,     0,     0,     0,     0,    77,     0,   361,   361,   361,
     2198       0,     0,     0,     0,     0,     0,     0,     0,   361,   361,
     2199       0,     0,   163,   163,   346,   346,     0,     0,   354,   367,
     2200       0,     0,    84,    54,     0,     0,     0,     0,    54,     0,
     2201       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2202     460,     0,     0,   460,     0,   361,     0,     0,     0,   460,
     2203       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2204       0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
     2205       0,     0,     0,     0,     0,     0,   740,     0,     0,     0,
     2206     209,     0,     0,     0,     0,     0,     0,     0,   163,     0,
     2207     229,     0,   233,     0,   235,     0,     0,     0,     0,     0,
     2208     460,   244,   460,     0,     0,   460,   354,   163,   460,     0,
     2209       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2210     367,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2211       0,     0,   209,   361,   233,   235,   244,     0,     0,   346,
     2212       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2213       0,     0,     0,     0,     0,    77,     0,   154,     0,     0,
     2214       0,     0,    77,     0,     0,    54,     0,     0,     0,     0,
     2215       0,     0,     0,   163,     0,   209,     0,     0,     0,     0,
     2216       0,     0,    84,     0,     0,   367,     0,   605,    54,    84,
     2217     836,     0,     0,     0,     0,    54,     0,     0,     0,     0,
     2218       0,     0,     0,   249,     0,     0,     0,     0,     0,     0,
     2219       0,     0,     0,   254,     0,    77,   605,     0,     0,     0,
     2220       0,   605,     0,     0,     0,     0,     0,     0,     0,     0,
     2221     367,   367,   367,     0,     0,     0,   209,     0,   233,   235,
     2222     244,     0,    84,     0,     0,     0,     0,     0,    54,   367,
     2223       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2224      17,    18,    19,    20,    21,    22,    23,    24,  -294,   154,
     2225      25,    26,    27,     0,   209,     0,     0,     0,   209,    30,
     2226       0,     0,     0,   384,   740,     0,     0,     0,     0,     0,
     2227       0,     0,     0,     0,   503,     0,     0,     0,     0,     0,
     2228       0,     0,     0,     0,     0,   460,   416,    33,     0,     0,
     2229       0,     0,     0,     0,    37,    38,     0,     0,  -294,     0,
     2230     431,     0,     0,   367,     0,   960,     0,     0,     0,   436,
     2231       0,     0,     0,     0,     0,     0,     0,     0,     0,   444,
     2232       0,     0,     0,     0,   209,     0,     0,     0,     0,   642,
     2233       0,   337,   280,   281,     0,   282,     0,     0,     0,   109,
     2234     740,     0,     0,     0,   470,   209,     0,     0,     0,   480,
     2235     233,   235,     0,     0,     0,     0,     0,     0,   244,     0,
     2236       0,   283,   488,     0,     0,     0,     0,   284,   498,     0,
     2237     502,   285,     0,     0,   286,   287,   288,   289,    40,    41,
     2238       0,   290,   291,     0,     0,     0,     0,     0,   532,   292,
     2239       0,     0,     0,     0,     0,   367,     0,     0,     0,   629,
     2240       0,   209,   367,     0,   293,     0,   377,     0,     0,   378,
     2241       0,     0,     0,   295,   379,   297,   298,   299,   300,   209,
     2242       0,     0,     0,     0,   209,     0,   209,     0,     0,     0,
     2243       0,   592,     0,     0,     0,     0,   597,     0,     0,     0,
     2244       0,     0,     0,   209,     0,     0,   209,   209,     0,     0,
     2245       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2246       0,     0,   209,     0,   643,     0,     0,     0,   644,   645,
     2247       0,   647,     0,     0,     0,     0,   209,     0,   659,   660,
     2248       0,   661,   662,   209,   663,     0,   664,     0,     0,     0,
     2249       0,     0,     0,  1176,     0,   460,     8,     9,    10,    11,
     2250      12,     0,     0,   592,     0,     0,     0,     0,     0,     0,
     2251       0,   679,     0,     0,     0,     0,     0,     0,     0,     0,
     2252       0,     0,   280,   281,    30,   282,     0,     0,     0,     0,
     2253       0,     0,     0,     0,     0,     0,   690,   163,     0,     0,
     2254       0,     0,     0,     0,     0,     0,     0,   696,     0,     0,
     2255       0,   283,    33,   367,     0,     0,     0,   284,     0,     0,
     2256       0,   285,     0,     0,   286,   287,   288,   289,    40,    41,
     2257     732,   290,   291,     0,     0,     0,   735,     0,     0,   292,
     2258       0,   470,     0,     0,     0,     0,     0,     0,   605,     0,
     2259       0,     0,     0,     0,   293,     0,   377,     0,     0,   209,
     2260       0,     0,     0,   295,  1177,   297,   298,   299,   300,   367,
     2261     367,     0,     0,     0,     0,     0,     0,     0,   772,     0,
     2262       0,     0,     0,     0,     0,     0,     0,   209,   513,     0,
     2263     515,   518,   209,     0,   787,     0,     0,     0,   521,   522,
     2264       0,     0,     0,   515,   515,     0,     0,     0,     0,     0,
     2265       0,     0,     0,     0,     0,   515,     0,     0,     0,     0,
     2266       0,     0,     0,     0,     0,   280,   281,     0,   282,   460,
     2267       0,   814,     0,     0,     0,     0,     0,     0,     0,     0,
     2268     824,     0,     0,     0,     0,     0,     0,   827,     0,     0,
     2269       0,   515,   834,     0,   283,     0,     0,     0,     0,     0,
     2270     284,     0,     0,   849,   285,     0,     0,   286,   287,   288,
     2271     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
     2272     209,     0,   292,     0,     0,     0,     0,   515,   740,     0,
     2273       0,     0,     0,     0,   209,     0,     0,   293,     0,   377,
     2274       0,     0,     0,     0,   889,   811,   295,   379,   297,   298,
     2275     299,   300,     0,     0,   503,     0,     0,     0,     0,     0,
     2276       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2277     216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2278     834,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     2279      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2280      23,    24,  -294,     0,    25,    26,    27,     0,   740,     0,
     2281       0,     0,     0,    30,     0,   209,     0,     0,     0,     0,
     2282       0,     0,     0,     0,     0,     0,     0,     0,   209,     0,
     2283       0,     0,     0,     0,     0,   249,     0,     0,     0,     0,
     2284       0,    33,     0,     0,     0,   967,   968,   209,    37,    38,
     2285       0,     0,  -294,     0,     0,     0,     0,   367,   367,   985,
     2286       0,     0,     0,     0,     0,     0,   216,     0,     0,     0,
     2287       0,     0,     0,     0,     0,     0,  1000,     0,  1001,     0,
     2288       0,     0,  1005,   642,     0,   337,     0,     0,     0,     0,
     2289       0,     0,     0,   633,     0,     0,     0,     0,     0,     0,
     2290       0,     0,     0,     0,   515,   515,   515,   515,   515,   515,
     2291     515,   515,   515,   515,   515,   515,   515,   515,   515,   515,
     2292     515,   515,     0,     0,     0,     0,     0,     0,     0,     0,
     2293     280,   281,     0,   282,   209,     0,     0,     0,     0,     0,
     2294       0,     0,     0,     0,     0,     0,     0,   515,  1038,     0,
     2295       0,     0,     0,     0,     0,  1039,     0,     0,     0,   283,
     2296     209,     0,     0,     0,     0,   284,     0,     0,  1041,   285,
     2297    1042,     0,   286,   287,   288,   289,    40,    41,     0,   290,
     2298     291,     0,   367,     0,  1054,     0,     0,   292,   209,     0,
     2299       0,  1058,     0,     0,     0,     0,     0,     0,     0,     0,
     2300       0,     0,   293,  1096,   377,     0,  1097,     0,     0,   780,
     2301       0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
     2302     209,     0,     0,     0,   597,     0,     0,     0,     0,     0,
     2303       0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
     2304     460,     0,   460,     0,     0,     0,   515,     0,     8,     9,
     2305      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2306      20,    21,    22,    23,    24,  -294,     0,     0,   515,     0,
     2307       0,     0,     0,     0,     0,     0,    30,   460,     0,   460,
     2308       0,   515,     8,     9,    10,    11,    12,    13,    14,    15,
     2309      16,    17,    18,    19,    20,    21,    22,    23,    24,  -294,
     2310       0,    25,    26,    27,    33,     0,     0,   163,     0,     0,
     2311      30,     0,   209,  1160,     0,  -294,     0,     0,     0,   340,
     2312     362,     0,     0,     0,     0,     0,     0,   515,     0,     0,
     2313       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
     2314       0,     0,     0,    36,     0,   335,   336,    39,     0,  -294,
     2315       0,     0,     0,   412,    40,    41,     0,     0,     0,   515,
     2316     412,     0,     0,     0,     0,     0,     0,     0,     0,   532,
     2317       0,     0,     0,     0,   515,     0,  1225,     0,     0,     0,
     2318     642,     0,   337,     0,     0,     0,     0,     0,     0,     0,
     2319     633,   280,   281,     0,   282,     0,     0,     0,     0,   209,
     2320       0,     0,     0,     0,     0,  1238,     0,     0,     0,     0,
     2321    1240,     0,     0,     0,     0,     0,     0,     0,  1244,     0,
     2322     283,     0,     0,     0,     0,     0,   648,     0,   137,   138,
     2323     285,     0,   412,   286,   649,   288,   289,    40,    41,     0,
     2324     290,   291,     0,     0,     0,     0,     0,     0,   292,  1270,
     2325       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2326       0,  1278,     0,   293,  1279,   650,  1280,   651,   378,     0,
     2327       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
     2328    1289,  1290,     0,     0,     0,     0,     0,     0,   412,     0,
     2329       0,     0,     0,     0,     0,   209,   412,   588,     0,   412,
     2330     591,     0,  1303,     0,     0,     0,     0,     0,     0,   362,
     2331       0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
     2332       0,     0,     0,     0,     0,   515,     0,     0,     0,  1326,
     2333     320,     0,   639,     0,     0,   340,     0,     0,     0,     0,
     2334     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2335       0,     0,   380,   380,     0,     0,   515,     0,     0,     0,
     2336       0,     0,   412,     0,     0,     0,   412,     0,   515,     2,
     2337     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2338      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2339      23,    24,     0,     0,    25,    26,    27,   362,     0,     0,
     2340       0,     0,     0,    30,     0,     0,     0,     0,     0,   515,
     2341       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2342     412,     0,     0,   320,     0,     0,  1396,     0,  1397,     0,
     2343       0,    33,     0,    34,     0,    35,     0,     0,    37,    38,
     2344       0,  1406,     0,  1407,     0,     0,     0,     0,   484,     0,
     2345       0,   412,     0,     0,   362,     0,     0,     0,     0,     0,
     2346       0,  1414,     0,     0,     0,     0,     0,     0,     0,     0,
     2347       0,     0,     0,     0,  -399,   686,     0,  1432,  1434,     0,
     2348       0,   515,     0,   633,     0,     0,     0,     0,     0,  1440,
     2349       0,     0,  1244,     0,   412,     0,     0,   340,   362,     0,
     2350       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2351       0,     0,     0,     0,  1463,     0,     0,     0,     0,     0,
     2352       0,     0,     0,  1470,     0,   515,  1472,     0,  1474,  1476,
     2353    1478,     0,     0,     0,     0,     0,     0,     0,     0,   515,
     2354     515,     0,     0,   412,   412,     0,     0,     0,     0,     0,
     2355       0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
     2356       0,     0,   829,   362,   380,   362,     0,     0,     0,     0,
     2357    1509,     0,  1511,     0,   621,  1244,   621,   621,     0,     0,
     2358       0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
     2359    1523,     0,     0,   868,   362,     0,     0,     0,     0,   362,
     2360       0,     0,     0,     0,     0,     0,     0,     0,   362,   362,
     2361     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2362       0,     0,     0,     0,     0,     0,     0,   362,     0,     0,
     2363       0,     0,   412,   911,     0,     0,   412,   914,     0,     0,
     2364       0,     0,     0,   916,     0,     0,     0,     0,     0,     0,
     2365       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2366       0,   340,   362,   412,     0,   412,   734,     0,     0,   412,
     2367       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2368      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
     2369      25,    26,    27,     0,     0,     0,     0,     0,     0,    30,
     2370       0,   362,   621,     0,     0,   768,     0,     0,     0,     0,
     2371       0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
     2372       0,     0,     0,     0,     0,   768,     0,    33,   768,     0,
     2373       0,     0,     0,     0,   205,    38,     0,   340,   362,   791,
     2374     792,     0,   412,   412,     0,     0,     0,     0,     0,   515,
     2375       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2376       0,   813,     0,     0,     0,     0,   515,     0,     0,     0,
     2377       0,   822,     0,     0,     0,     0,     0,     0,   344,   628,
     2378       0,     0,     0,   781,   412,     0,     0,     0,     0,     0,
     2379       0,     0,     0,   362,     0,     0,     0,     0,     0,   829,
     2380     362,     0,     0,     0,   621,     0,   621,     0,     0,     0,
     2381       0,     0,     0,     0,     0,     0,   621,     0,     0,     0,
     2382       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2383       0,     0,     0,   888,     0,     0,     0,     0,     0,   515,
     2384     515,     0,   380,     0,     0,     0,     0,     0,     0,     1,
    21412385       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    21422386      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2143       22,    23,    24,    25,   355,     0,    26,    27,    28,    29,
    2144        0,     0,    30,     0,     0,    31,    32,     0,     0,     0,
    2145        0,     0,   355,     0,    78,     0,     0,   354,     0,     0,
    2146        0,     0,     0,     0,     0,     0,     0,   352,     0,     0,
    2147       33,     0,     0,    34,     0,    35,     0,    36,    37,     0,
    2148       38,    39,    40,     0,     0,     0,     0,     0,    85,    41,
    2149       42,     0,     0,    85,     0,     0,   355,     0,  1034,     0,
    2150        0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
    2151      354,   354,     0,   354,   354,    43,    73,    44,     0,     0,
    2152        0,     0,     0,    73,     0,    45,     0,     0,   281,   282,
    2153       31,   283,     0,    76,     0,     8,     9,    10,    11,    12,
    2154       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2155       23,    24,    25,  -295,     0,     0,     0,   284,    34,     0,
    2156        0,   355,     0,   285,    31,     0,     0,   286,   354,   354,
    2157      287,   288,   289,   290,    41,    42,    73,   291,   292,     0,
    2158        0,     0,     0,     0,     0,   293,     0,     0,   224,     0,
    2159        0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
    2160      294,     0,   378,  -295,     0,     0,   355,   355,   355,   296,
    2161      827,   298,   299,   300,   301,     0,     0,     0,     0,     0,
    2162        0,     0,     0,     0,     0,   355,     0,     0,     0,     0,
    2163        0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
    2164        0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
    2165        0,     0,     0,     0,    78,    85,     0,     0,     0,   164,
    2166      355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2167      362,     0,     0,     0,     0,    85,   222,     0,   217,     0,
    2168        0,     0,     0,    85,     0,     0,     0,     0,     0,     0,
    2169        0,     0,     0,     0,     0,     0,    78,     0,    76,   355,
    2170        0,     0,     0,     0,     0,     0,     0,     0,     0,   362,
    2171        0,     0,   354,     0,   354,     0,     0,     0,     0,     0,
    2172        0,     0,     0,     0,   164,     0,     0,   362,     0,    85,
    2173      271,     0,     0,     0,     0,     0,   355,     0,     0,     0,
    2174        0,     0,     0,     0,   354,     0,     0,     0,     0,     0,
    2175        0,     0,   354,   354,   354,     0,     0,     0,     0,   164,
    2176        0,     0,     0,   354,   354,     0,     0,     0,     0,   368,
    2177        0,   362,     0,   374,     0,     0,     0,    76,   355,     0,
    2178        0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
    2179        0,   355,     0,     0,     0,     0,   223,     0,   355,     0,
    2180      354,     0,     0,   355,     8,     9,    10,    11,    12,    13,
    2181       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2182       24,    25,   164,     0,    26,    27,    28,     0,     0,     0,
    2183        0,     0,     0,    31,   217,     0,   362,     0,     0,     0,
    2184        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2185        0,     0,   164,   461,     0,     0,     0,     0,     0,     0,
    2186        0,    34,     0,     0,     0,    78,     0,     0,   206,    39,
    2187        0,     0,     0,     0,     0,     0,   374,     0,     0,     0,
    2188        0,   362,   362,   362,   164,     0,     0,     0,   354,     0,
    2189        0,     0,     0,     0,   514,     0,   516,   519,     0,     0,
    2190      362,     0,     0,     0,   522,   523,     0,     0,   461,   516,
    2191      516,   164,     0,   270,     0,     0,     0,     0,   362,     0,
    2192        0,   516,     0,     0,     0,     0,     0,     0,     0,    85,
    2193        0,     0,     0,     0,     0,   362,     0,    76,   281,   282,
    2194        0,   283,     0,     0,    76,     0,     0,     0,     0,   355,
    2195        0,     0,     0,     0,     0,     0,     0,   516,   606,     0,
    2196        0,     0,     0,   630,     0,     0,     0,   284,     0,     0,
    2197        0,    85,     0,   285,   362,     0,     0,   286,     0,     0,
    2198      287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
    2199        0,     0,     0,   516,     0,   293,     0,    76,     0,     0,
    2200        0,     0,   355,   355,     0,   355,   355,     0,     0,     0,
    2201      294,   362,   378,     0,     0,     0,     0,     0,   812,   296,
    2202      380,   298,   299,   300,   301,    78,     0,     0,     0,     0,
    2203        0,     0,     0,     0,     0,   210,     0,     0,     0,   164,
    2204      164,     0,     0,     0,     0,   230,   368,   234,     0,   236,
    2205        0,     0,     0,   362,     0,     0,   245,     0,     0,     0,
    2206      355,   355,     0,   362,     0,     0,   362,   461,     0,     0,
    2207      461,   224,     0,   362,     0,     0,     0,     0,   362,     0,
    2208        0,     0,     0,     0,     0,     0,     0,   210,     0,   234,
    2209      236,   245,     0,     0,     0,     0,     0,     0,     0,     0,
    2210        0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
    2211        0,     0,     0,     0,     0,   164,     0,     0,     0,     0,
    2212        0,     0,     0,     0,     0,   355,     0,   461,     0,   461,
    2213      210,     0,   461,     0,   164,   461,     0,     0,     0,     0,
    2214       85,     0,     0,     0,     0,     0,     0,   368,     0,     0,
    2215        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2216        0,     0,     0,     0,     0,     0,     0,     0,   223,     0,
    2217      516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
    2218      516,   516,   516,   516,   516,   516,   516,   516,     0,     0,
    2219       78,   210,     0,   234,   236,   245,     0,     0,     0,     0,
    2220      164,     0,     0,     0,   355,     0,   355,     0,     0,     0,
    2221        0,     0,   368,   516,   606,     0,     0,   837,     0,     0,
    2222        0,     0,     0,     0,   362,     0,     0,     0,     0,   210,
    2223        0,     0,     0,   210,     0,     0,   355,     0,     0,     0,
    2224        0,     0,     0,   606,   355,   355,   355,     0,   606,   504,
    2225        0,     0,     0,     0,     0,   355,   355,   368,   368,   368,
    2226        0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
    2227        0,     0,     0,     0,     0,     0,   368,   362,   362,     0,
    2228      362,   362,     0,     0,     0,     0,     0,     0,     0,     0,
    2229        0,     0,   355,     0,     0,     0,     0,     0,     0,   210,
    2230       85,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2231        0,   741,   516,     0,     0,     0,     0,     0,     0,     0,
    2232      210,     0,     0,     0,     0,   234,   236,   155,     0,     0,
    2233        0,     0,   461,   245,   516,   362,   362,     0,     0,     0,
    2234        0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
    2235      368,     0,   961,     8,     9,    10,    11,    12,    13,    14,
    2236       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2237       25,     0,     0,   250,     0,     0,   210,     0,     0,     0,
    2238      355,     0,    31,   255,     0,     0,     0,   741,     0,     0,
    2239        0,     0,     0,   516,   210,     0,     0,     0,     0,   210,
    2240      362,   210,     0,     0,     0,     0,     0,     0,     0,     0,
    2241       34,     0,     0,     0,     0,     0,     0,     0,   210,     0,
    2242        0,   210,   210,     0,     0,   516,     0,     0,     0,    78,
    2243        0,     0,     0,     0,     0,     0,    78,   210,     0,   155,
    2244      516,     0,   368,   224,     0,     0,   630,     0,     0,   368,
    2245        0,   210,     0,   385,     0,     0,     0,     0,   210,     0,
    2246        0,     0,     0,     0,     0,    85,     0,     0,     0,     0,
    2247        0,     0,     0,     0,     0,     0,   417,     0,     0,   362,
    2248        0,   362,     0,     0,     0,     0,     0,     0,     0,    78,
    2249      432,     0,     0,     0,     0,     0,     0,     0,     0,   437,
    2250        0,     0,     0,     0,     0,     0,     0,     0,     0,   445,
    2251        0,   362,     0,     0,     0,     0,     0,     0,     0,   362,
    2252      362,   362,     0,     0,     0,     0,     0,     0,     0,     0,
    2253      362,   362,     0,     0,   471,     0,     0,     0,     0,   481,
    2254        0,     0,   461,     0,    85,     0,     0,     0,     0,     0,
    2255        0,     0,   489,     0,     0,     0,     0,     0,   499,     0,
    2256      503,   461,     0,     0,     0,     0,     0,   362,     0,     0,
    2257        0,     0,     0,     0,   210,     0,     0,     0,   533,     0,
    2258        0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
    2259        0,   516,     0,     0,     0,     0,     0,     0,     0,     0,
    2260      368,     0,   210,     0,     0,     0,     0,   210,     0,     0,
    2261        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2262        0,   593,   516,     0,     0,     0,   598,     0,     0,     0,
    2263        0,     0,     0,     0,   516,   606,     0,     0,     0,     0,
    2264        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2265        0,     0,     0,     0,   644,   362,   368,   368,   645,   646,
    2266        0,   648,     0,     0,     0,     0,     0,     0,   660,   661,
    2267        0,   662,   663,     0,   664,   516,   665,     0,     0,     0,
    2268        0,     0,  1178,     0,     0,     8,     9,    10,    11,    12,
    2269        0,     0,     0,   593,     0,   210,     0,     0,     0,     0,
    2270        0,   680,     0,     0,    85,     0,     0,     0,     0,   210,
    2271        0,    85,   281,   282,    31,   283,   461,     0,     0,     0,
    2272        0,     0,     0,     0,     0,     0,   691,     0,     0,   504,
    2273        0,     0,     0,     0,     0,     0,     0,   697,     0,     0,
    2274        0,   284,    34,     0,     0,     0,     0,   285,   516,     0,
    2275        0,   286,     0,     0,   287,   288,   289,   290,    41,    42,
    2276      733,   291,   292,     0,    85,     0,   736,     0,     0,   293,
    2277        0,   471,     0,     0,     0,     0,   741,     0,     0,     0,
    2278        0,     0,     0,     0,   294,     0,   378,     0,     0,     0,
    2279      210,     0,   516,   296,  1179,   298,   299,   300,   301,     0,
    2280        0,     0,     0,   210,     0,     0,   516,   516,   773,     0,
    2281        0,     0,     0,     0,     0,     0,     0,     0,   217,     0,
    2282        0,     0,   210,     0,   788,     0,     0,     0,     0,     0,
    2283        0,   204,     2,   205,     4,     5,     6,     7,     8,     9,
    2284       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2285       20,    21,    22,    23,    24,    25,     0,   741,    26,    27,
    2286       28,   815,     0,     0,     0,     0,     0,    31,     0,     0,
    2287      825,     0,     0,     0,     0,     0,     0,   828,     0,     0,
    2288        0,     0,   835,     0,     0,     0,     0,     0,     0,     0,
    2289        0,     0,     0,   850,     0,    34,     0,    35,     0,    36,
    2290       37,     0,   206,    39,    40,     0,   368,   368,     0,   210,
    2291        0,    41,    42,     0,     0,   217,     0,     0,     0,     0,
    2292        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2293        0,     0,     0,     0,   890,   210,     0,    43,     0,   207,
    2294        0,     0,     0,     0,     0,     0,     0,   208,     0,     0,
    2295        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2296        0,     0,     0,   210,     0,     0,     0,     0,     0,     0,
    2297      835,     0,     0,     0,     0,     0,     8,     9,    10,    11,
    2298       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2299       22,    23,    24,    25,  -294,   210,    26,    27,    28,     0,
    2300        0,     0,     0,     0,     0,    31,   210,     0,     0,     0,
    2301        0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
    2302        0,     0,     0,     0,     0,   250,     0,     0,     0,     0,
    2303        0,   368,     0,    34,   516,   968,   969,     0,     0,     0,
    2304       38,    39,     0,     0,  -294,     0,     0,     0,     0,   986,
    2305        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2306        0,     0,     0,     0,     0,     0,  1001,     0,  1002,     0,
    2307        0,     0,  1006,     0,     0,   643,     0,   338,     0,     0,
    2308        0,     0,     0,     0,     0,   110,     0,     0,   210,   461,
    2309        0,   461,     0,     0,     0,     0,     0,     0,     0,     0,
    2310        0,     0,     0,     0,     0,     0,     0,   516,   516,     0,
    2311        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2312      281,   282,     0,   283,     0,     0,   461,     0,   461,     0,
    2313        0,     0,     0,     0,     0,     0,     0,     0,  1039,     0,
    2314        0,     0,     0,     0,     0,  1040,     0,     0,     0,   284,
    2315        0,     0,     0,     0,     0,   285,   164,     0,  1042,   286,
    2316     1043,     0,   287,   288,   289,   290,    41,    42,     0,   291,
    2317      292,     0,     0,     0,  1055,   210,     0,   293,     0,     0,
    2318        0,  1059,     0,     0,     0,     0,     0,     0,     0,     0,
    2319        0,     0,   294,  1097,   378,     0,  1098,     0,     0,   781,
    2320        0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
    2321        0,     0,     0,     0,   598,     0,     0,     0,     0,     0,
    2322        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2323        0,     0,     0,     0,   341,   363,     0,     0,     0,     0,
     2387      22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
     2388       0,    29,   344,     0,    30,    31,     0,     0,     0,   829,
     2389       0,     0,     0,     0,     0,     0,     0,   412,   280,   281,
     2390       0,   282,     0,   412,     0,     0,     0,     0,     0,    32,
     2391       0,   412,    33,     0,    34,     0,    35,    36,     0,    37,
     2392      38,    39,     0,     0,   621,   621,     0,   283,    40,    41,
     2393       0,     0,     0,   284,     0,     0,     0,   285,     0,     0,
     2394     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
     2395       0,   362,     0,     0,    42,   292,    43,   412,   781,     0,
     2396     990,     0,     0,     0,    44,     0,   995,     0,     0,     0,
     2397     293,     0,   377,  1004,     0,   992,   412,  1157,     0,   295,
     2398     379,   297,   298,   299,   300,     0,   362,     0,     0,     0,
     2399       0,     0,   412,  1169,     0,   621,   621,  1174,     0,     0,
     2400       0,     0,     0,     0,     0,     0,     0,   362,   362,     0,
     2401       0,     0,     0,     0,     0,     0,     0,  1021,  1022,     0,
     2402     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2403       0,     0,     0,     0,     0,   344,     0,     0,     0,     0,
    23242404       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    23252405       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2326        0,     0,     0,     0,     0,     0,     0,     0,   413,     0,
    2327        0,     0,   210,     0,     0,   413,     0,     1,     2,     3,
     2406       0,     0,     0,     0,     0,     0,     0,     0,   829,   412,
     2407    1237,     0,     0,     0,     0,  1052,     0,     0,     0,   380,
     2408       0,   621,     0,     0,     0,     0,     1,     2,   204,     4,
     2409       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2410      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2411       0,     0,    25,    26,    27,    28,     0,     0,    29,   280,
     2412     281,    30,  1061,  1062,     0,  1063,   362,     0,  1064,  1065,
     2413    1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
     2414       0,     0,     0,  1073,  1074,     0,    32,     0,   283,    33,
     2415       0,    34,     0,    35,   648,   320,    37,    38,   285,     0,
     2416       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
     2417       0,  1138,  1139,     0,     0,     0,   292,     0,   380,     0,
     2418       0,     0,   280,   281,   995,   282,   340,  1148,     0,   768,
     2419       0,   293,     0,  1075,     0,     0,   169,     0,     0,     0,
     2420     295,   296,   297,   298,   299,   300,   362,     0,     0,  1164,
     2421    1076,   283,     0,     0,  -129,     0,     0,   284,     0,     0,
     2422    1179,   285,     0,     0,   286,   287,   288,   289,    40,    41,
     2423       0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
     2424       0,     0,   380,     0,  1197,     0,     0,     0,     0,     0,
     2425       0,     0,     0,     0,   293,   362,   362,     0,     0,   995,
     2426     995,     0,     0,   295,   379,   297,   298,   299,   300,     0,
     2427       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2428    1229,     0,     0,     0,     0,     0,     0,     0,     1,     2,
     2429     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2430      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2431      23,    24,     0,     0,    25,    26,    27,    28,     0,     0,
     2432      29,   280,   281,    30,   282,     0,     0,   995,     0,     0,
     2433       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2434     280,   281,     0,   282,     0,     0,   888,     0,     0,     0,
     2435     283,    33,     0,    34,     0,    35,   284,     0,    37,    38,
     2436     285,  1281,  1282,   286,   287,   288,   289,    40,    41,   283,
     2437     290,   291,     0,     0,     0,   284,     0,     0,   292,   285,
     2438     362,     0,   286,   287,   288,   289,    40,    41,     0,   290,
     2439     291,     0,     0,   293,     0,  1075,     0,   292,     0,     0,
     2440       0,     0,   295,   296,   297,   298,   299,   300,     0,     0,
     2441       0,     0,   293,     0,   377,     0,  -129,     0,     0,     0,
     2442       0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
     2443       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2444       0,     0,   995,     0,     0,     0,     1,     2,   204,     4,
     2445       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2446      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2447     412,     0,    25,    26,    27,    28,     0,     0,    29,   280,
     2448     281,    30,   282,     0,     0,     0,     0,     0,     0,     0,
     2449       0,     0,     0,     0,     0,   412,   412,     0,     0,     0,
     2450       0,     0,     0,  1389,     0,   768,     0,     0,   283,    33,
     2451       0,    34,     0,    35,   284,     0,    37,    38,   285,     0,
     2452     412,   286,   287,   288,   289,    40,    41,     0,   290,   291,
     2453       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
     2454       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2455       0,   293,     0,    43,     0,     0,     0,     0,     0,     0,
     2456     295,   296,   297,   298,   299,   300,     0,     0,     2,   204,
    23282457       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    23292458      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2330       24,    25,     0,  1162,    26,    27,    28,    29,     0,     0,
    2331       30,     0,     0,    31,    32,     8,     9,    10,    11,    12,
     2459      24,  1449,     0,    25,    26,    27,     0,     0,     0,     0,
     2460     280,   281,    30,   282,     0,     8,     9,    10,    11,    12,
    23322461      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2333       23,    24,    25,     0,     0,    26,    27,    28,    33,     0,
    2334        0,    34,     0,    35,    31,    36,    37,   413,    38,    39,
    2335       40,     0,     0,     0,     0,     0,     0,    41,    42,   533,
    2336        0,     0,     0,     0,     0,     0,  1227,     0,     0,     0,
    2337        0,     0,    34,     0,     0,     0,     0,     0,     0,    38,
    2338       39,     0,     0,    43,     0,    44,     0,     0,     0,  -523,
    2339        0,     0,     0,    45,     0,   321,  1241,     0,     0,     0,
    2340        0,  1243,     0,   413,     0,   345,     0,     0,     0,  1247,
    2341        0,   413,   589,     0,   413,   592,     0,   381,   381,     0,
    2342        0,     0,     0,     0,   363,     0,     0,     0,   622,     0,
    2343        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2344     1273,     0,     0,     0,     0,     0,     0,   640,     0,     0,
    2345      341,     0,  1281,     0,     0,  1282,     0,  1283,     0,     0,
    2346      281,   282,     0,   283,     0,     0,     0,     0,     0,     0,
    2347        0,  1292,  1293,     0,     0,     0,     0,   413,     0,     0,
    2348        0,   413,     0,     0,     0,     0,     0,     0,   321,   284,
    2349        0,     0,     0,  1306,     0,   285,     0,     0,     0,   286,
    2350        0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
    2351      292,     0,   363,   485,     0,     0,     0,   293,     0,     0,
    2352     1329,     0,     0,     0,     0,     0,     0,     0,   210,     0,
    2353        0,     0,   294,     0,   378,   413,     0,   993,     0,     0,
    2354        0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
    2355        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2356        0,     0,     0,     0,     0,     0,   413,     0,     0,   363,
    2357        0,     0,     0,     0,     1,     2,   205,     4,     5,     6,
     2462      23,    24,     0,     0,    25,    26,    27,     0,     0,   283,
     2463      33,     0,    34,    30,    35,   284,     0,    37,    38,   285,
     2464       0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
     2465     291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
     2466       0,    33,     0,     0,     0,     0,   108,     0,    37,    38,
     2467       0,     0,   293,  1515,   342,     0,     0,    40,    41,   780,
     2468       0,   295,   343,   297,   298,   299,   300,     2,   204,     4,
     2469       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     2470      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2471       0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
     2472     281,    30,   282,     0,     0,   320,     0,     8,     9,    10,
     2473      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2474      21,    22,    23,    24,  -295,     0,     0,     0,   283,    33,
     2475       0,    34,     0,    35,   284,    30,    37,    38,   285,     0,
     2476       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
     2477       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
     2478       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
     2479       0,   293,     0,   930,  -295,     0,     0,     0,   780,     0,
     2480     295,   343,   297,   298,   299,   300,     2,   204,     4,     5,
     2481       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
     2482      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
     2483       0,    25,    26,    27,     0,     0,     0,     0,   280,   281,
     2484      30,   282,     0,     8,     9,    10,    11,    12,    13,    14,
     2485      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2486       0,     0,    25,    26,    27,     0,     0,   283,    33,     0,
     2487      34,    30,    35,   284,     0,    37,    38,   285,     0,     0,
     2488     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
     2489       0,     0,     0,     0,     0,   292,     0,     0,     0,    33,
     2490       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
     2491     293,     0,   930,     0,     0,     0,     0,   780,     0,   295,
     2492     599,   297,   298,   299,   300,     2,   204,     4,     5,     6,
    23582493       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2359       17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
    2360        0,    26,    27,    28,    29,     0,     0,    30,     0,   413,
    2361       31,     0,   341,   363,     0,     0,     0,     0,  1399,     0,
    2362     1400,     0,     0,     0,     0,     0,     0,     0,     0,   381,
    2363        0,     0,     0,  1409,     0,  1410,     0,     0,    34,     0,
    2364       35,     0,    36,     0,     0,    38,    39,     0,     0,  -294,
    2365        0,     0,     0,  1417,     0,     0,     0,     0,   413,   413,
    2366        0,     0,     0,     0,     0,     0,     0,     0,     0,  1435,
    2367     1437,     0,     0,     0,     0,     0,     0,   830,   363,     0,
    2368      363,  1443,    44,     0,  1247,     0,     0,     0,     0,   622,
    2369      110,   622,   622,     0,     0,     0,     0,     0,   622,     0,
    2370        0,     0,     0,     0,     0,     0,  1466,     0,   869,   363,
    2371        0,     0,     0,     0,   363,  1473,     0,     0,  1475,     0,
    2372     1477,  1479,  1481,   363,   363,   363,     0,     0,     0,     0,
    2373        0,   735,     0,     0,     0,     0,     0,     0,     0,     0,
    2374        0,     0,   363,     0,     0,     0,     0,   413,   912,     0,
    2375        0,   413,   915,     0,     0,     0,     0,     0,   917,     0,
    2376        0,     0,  1512,     0,  1514,     0,     0,  1247,     0,     0,
    2377      769,     0,     0,     0,     0,     0,   341,   363,   413,     0,
    2378      413,     0,  1526,   782,   413,     0,     0,     0,     0,     0,
    2379      769,     0,     0,   769,     0,     0,     0,     0,     0,     0,
    2380        0,     0,     0,     0,   792,   793,     0,     0,     0,     0,
    2381        0,     0,     0,     0,     0,     0,   363,   622,     0,     0,
    2382        0,     0,     0,     0,     0,     0,   814,     0,     0,     0,
    2383        0,     0,     0,     0,     0,     0,   823,     0,     0,     0,
    2384        0,     0,     0,   345,     0,     0,     0,     0,   782,     0,
    2385        0,     0,   341,   363,     0,     0,     0,   413,   413,     0,
    2386        0,     0,     0,     0,     1,     2,     3,     4,     5,     6,
    2387        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2388       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2389        0,    26,    27,    28,    29,     0,     0,    30,   889,   413,
    2390       31,    32,     0,     0,     0,     0,     0,   381,   363,     0,
    2391        0,     0,     0,     0,   830,   363,     0,     0,     0,   622,
    2392        0,   622,     0,     0,     0,    33,     0,     0,    34,     0,
    2393       35,   622,    36,    37,     0,    38,    39,    40,     0,     0,
    2394        0,     0,     0,     0,    41,    42,     0,   345,     0,     0,
     2494      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
     2495      25,    26,    27,     0,     0,     0,     0,   280,   281,    30,
     2496     282,     0,     8,     9,    10,    11,    12,    13,    14,    15,
     2497      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
     2498       0,    25,    26,    27,     0,     0,   283,    33,     0,    34,
     2499      30,    35,   284,     0,    37,    38,   285,     0,     0,   286,
     2500     287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
     2501       0,     0,     0,     0,   292,     0,     0,     0,    33,     0,
     2502       0,     0,     0,     0,     0,   205,    38,     0,     0,   293,
     2503       0,   342,     0,     0,     0,     0,     0,     0,   295,   343,
     2504     297,   298,   299,   300,     2,   204,     4,     5,     6,     7,
     2505       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2506      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
     2507      26,    27,     0,     0,     0,     0,   280,   281,    30,   282,
     2508       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2509      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
     2510       0,     0,     0,     0,     0,   283,    33,     0,    34,    30,
     2511      35,   284,     0,    37,    38,   285,     0,     0,   286,   287,
     2512     288,   289,    40,    41,     0,   290,   291,     0,     0,     0,
     2513       0,     0,     0,   292,     0,     0,     0,    33,     0,     0,
     2514       0,     0,     0,     0,     0,     0,     0,     0,   293,     0,
     2515     930,     0,     0,     0,     0,     0,     0,   295,   343,   297,
     2516     298,   299,   300,     2,   204,     4,     5,     6,     7,     8,
     2517       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2518      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
     2519      27,     0,     0,     0,     0,   280,   281,    30,   282,     0,
    23952520       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    23962521       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2397       43,     0,    44,     0,     0,     0,     0,     0,     0,     0,
    2398       45,     0,     0,     0,     0,     8,     9,    10,    11,    12,
     2522       0,     0,     0,     0,   283,    33,     0,    34,     0,    35,
     2523     284,     0,   205,    38,   285,     0,     0,   286,   287,   288,
     2524     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
     2525       0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
     2526       0,     0,     0,     0,     0,     0,     0,   293,     0,  1019,
     2527       0,     0,     0,     0,     0,     0,   295,  1020,   297,   298,
     2528     299,   300,     2,   204,     4,     5,     6,     7,     8,     9,
     2529      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2530      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
     2531       0,     0,     0,     0,   280,   281,    30,   282,     0,     0,
     2532       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2533       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2534       0,     0,     0,   283,    33,     0,    34,     0,    35,   284,
     2535       0,   205,    38,   285,     0,     0,   286,   287,   288,   289,
     2536      40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
     2537       0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
     2538       0,     0,     0,     0,     0,     0,   293,     0,   377,     0,
     2539       0,     0,     0,     0,     0,   295,   379,   297,   298,   299,
     2540     300,     1,     2,     3,     4,     5,     6,     7,     8,     9,
     2541      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2542      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
     2543      28,     0,     0,    29,     0,     0,    30,    31,     0,     0,
     2544       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2545       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2546       0,    32,     0,     0,    33,     0,    34,     0,    35,    36,
     2547       0,    37,    38,    39,     0,     0,     0,     0,     0,     0,
     2548      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
     2549       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2550       0,     0,     0,     0,     0,     0,    42,     0,    43,     0,
     2551       0,     0,  -520,     0,     0,     0,    44,   203,     2,   204,
     2552       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2553      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2554      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
     2555       0,     0,    30,     8,     9,    10,    11,    12,    13,    14,
     2556      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2557       0,     0,    25,    26,    27,   491,   492,   493,     0,     0,
     2558      33,    30,    34,     0,    35,    36,     0,   205,    38,    39,
     2559       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
     2560       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
     2561       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
     2562       0,     0,    42,     0,   206,     0,     0,     0,     0,     0,
     2563       0,     0,   207,     1,     2,   204,     4,     5,     6,     7,
     2564       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2565      18,    19,    20,    21,    22,    23,    24,  -294,     0,    25,
     2566      26,    27,    28,     0,     0,    29,     0,     0,    30,     0,
     2567       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2568       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2569       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
     2570      35,     0,     0,    37,    38,     0,     0,  -294,     0,     1,
     2571       2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
     2572      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2573      22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
     2574      43,    29,     0,     0,    30,     0,     0,     0,   109,     0,
     2575       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2576       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2577       0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
     2578      38,     0,   203,     2,   204,     4,     5,     6,     7,     8,
     2579       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2580      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
     2581      27,     0,     0,     0,     0,     0,    43,    30,     0,     0,
     2582       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
     2583       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2584       0,     0,     0,     0,     0,    33,     0,    34,     0,    35,
     2585       0,     0,   205,    38,     2,   204,     4,     5,     6,     7,
     2586       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2587      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
     2588      26,    27,     0,     0,     0,     0,     0,     0,    30,   206,
     2589       0,     0,     0,     0,     0,     0,     0,   269,     0,     0,
     2590       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2591       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
     2592      35,    36,     0,   205,    38,    39,     0,     0,     0,     0,
     2593       0,     0,    40,    41,     0,     0,     8,     9,    10,    11,
     2594      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2595      22,    23,    24,     0,     0,    25,    26,    27,    42,     0,
     2596     206,     0,     0,     0,    30,     0,     0,     0,   207,     2,
     2597     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    23992598      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2400       23,    24,    25,  -294,   830,    26,    27,    28,     0,     0,
    2401        0,     0,   413,     0,    31,     0,     0,     0,   413,     0,
    2402        0,     0,     0,   782,     0,   991,   413,     0,     0,     0,
    2403        0,   996,     0,     0,     0,     0,     0,     0,  1005,   622,
    2404      622,     0,    34,     0,     0,     0,     0,    37,     0,   336,
    2405      337,    40,     0,  -294,     0,     0,     0,     0,    41,    42,
    2406        0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
    2407        0,     0,   413,     0,     0,     0,     0,     0,     0,     0,
    2408        0,     0,  1022,  1023,   643,   345,   338,     0,     0,     0,
    2409        0,   413,  1159,     0,   634,     0,     0,     0,     0,     0,
    2410      345,   363,     0,     0,     0,     0,     0,   413,  1171,     0,
    2411      622,   622,  1176,     0,     0,     0,     0,     0,     0,     0,
    2412        0,     0,   363,   363,     0,     0,     0,     0,     0,     0,
     2599      23,    24,    33,     0,    25,    26,    27,    36,     0,    37,
     2600      38,    39,     0,    30,     0,     0,     0,     0,    40,    41,
    24132601       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2414     1053,     0,     0,     0,   381,     1,     2,   205,     4,     5,
     2602       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2603       0,    33,     0,    34,    42,    35,    43,     0,    37,    38,
     2604       0,     0,     0,     0,    44,     0,     0,     0,     0,     0,
     2605       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2606    1368,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2607       0,     0,     0,     0,     0,   686,     0,     0,     0,     0,
     2608       0,     0,     0,   633,     2,   204,     4,     5,     6,     7,
     2609       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2610      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
     2611      26,    27,     0,     0,     0,     0,     0,     0,    30,     0,
     2612       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2613      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2614       0,     0,    25,    26,    27,     0,    33,     0,    34,     0,
     2615      35,    30,     0,    37,    38,     0,     0,     0,     0,     0,
     2616       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2617       0,     0,     0,     0,     0,  1370,     0,     0,     0,    33,
     2618       0,     0,     0,     0,    36,     0,   335,   336,    39,     0,
     2619     686,     0,     0,     0,     0,    40,    41,     0,   633,     2,
     2620     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2621      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2622      23,    24,     0,   337,    25,    26,    27,     0,     0,     0,
     2623       0,   109,     0,    30,     0,     0,     0,     0,     0,     0,
     2624       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2625       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2626       0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
     2627       2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
     2628      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2629      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
     2630       0,     0,     0,     0,    30,   268,     0,     0,     0,     0,
     2631       0,     0,     0,   628,     0,     0,     0,     0,     0,     0,
     2632       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2633       0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
     2634      38,     2,   204,     4,     5,     6,     7,     8,     9,    10,
     2635      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2636      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
     2637       0,     0,     0,     0,     0,    30,   686,     0,     0,     0,
     2638       0,     0,     0,     0,   633,     0,     0,     0,     0,     0,
     2639       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2640       0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
     2641      37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
     2642      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2643      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
     2644       0,     0,     0,     0,     0,     0,    30,   598,     0,     0,
     2645       0,     0,     0,     0,     0,   633,     0,     0,     0,     0,
     2646       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2647       0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
     2648       0,   205,    38,     8,     9,    10,    11,    12,    13,    14,
     2649      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2650       0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
     2651     281,    30,   282,     0,     0,     0,     0,     0,   206,     0,
     2652       0,     0,     0,     0,     0,     0,   269,     0,     0,     0,
     2653       0,     0,     0,     0,     0,     0,     0,     0,   283,    33,
     2654       0,     0,     0,     0,   284,     0,    37,    38,   285,     0,
     2655       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
     2656       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
     2657       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2658       0,   293,     0,   524,     0,     0,   169,     0,     0,     0,
     2659     295,   296,   297,   298,   299,   300,     8,     9,    10,    11,
     2660      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2661      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
     2662       0,     0,   280,   281,    30,   282,     8,     9,    10,    11,
     2663      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2664      22,    23,    24,  -294,     0,    25,    26,    27,     0,     0,
     2665       0,   283,    33,     0,    30,     0,     0,   284,     0,    37,
     2666      38,   285,     0,     0,   286,   287,   288,   289,    40,    41,
     2667       0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
     2668       0,     0,    33,     0,     0,     0,     0,    36,     0,   335,
     2669     336,    39,     0,  -294,   293,     0,   598,    -3,    40,    41,
     2670       0,     0,     0,   295,   599,   297,   298,   299,   300,     8,
     2671       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2672      19,    20,    21,    22,    23,    24,   337,     0,    25,    26,
     2673      27,     0,     0,     0,   109,   280,   281,    30,   282,     8,
     2674       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2675      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
     2676      27,     0,     0,     0,   283,    33,     0,    30,     0,     0,
     2677     648,     0,    37,    38,   285,     0,     0,   286,   287,   288,
     2678     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
     2679       0,     0,   292,     0,     0,    33,     0,     0,     0,     0,
     2680     108,     0,    37,    38,     0,     0,     0,   293,   -35,   765,
     2681       0,    40,    41,     0,     0,     0,   295,   296,   297,   298,
     2682     299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
     2683      16,    17,    18,    19,    20,    21,    22,    23,    24,    43,
     2684       0,    25,    26,    27,     0,     0,     0,   109,   280,   281,
     2685      30,   282,     8,     9,    10,    11,    12,    13,    14,    15,
     2686      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
     2687       0,    25,    26,    27,     0,     0,     0,   283,    33,     0,
     2688      30,   452,     0,   284,     0,    37,    38,   285,     0,     0,
     2689     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
     2690       0,     0,     0,     0,     0,   292,     0,     0,    33,     0,
     2691       0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
     2692     293,     0,   294,     0,     0,     0,     0,     0,     0,   295,
     2693     296,   297,   298,   299,   300,     8,     9,    10,    11,    12,
     2694      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2695      23,    24,   453,     0,    25,    26,    27,     0,     0,     0,
     2696     109,   280,   281,    30,   282,     0,     0,     0,     0,     0,
     2697       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
     2698      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2699     283,    33,    25,    26,    27,     0,   284,     0,    37,    38,
     2700     285,    30,     0,   286,   287,   288,   289,    40,    41,     0,
     2701     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
     2702       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
     2703       0,     0,     0,   293,     0,   155,    37,    38,     0,     0,
     2704       0,     0,   295,   296,   297,   298,   299,   300,     8,     9,
     2705      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2706      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
     2707       0,   642,     0,   337,   280,   281,    30,   282,     0,     0,
     2708       0,   109,     0,     0,     0,     0,     8,     9,    10,    11,
     2709      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2710      22,    23,    24,   283,    33,    25,    26,    27,     0,   284,
     2711       0,    37,    38,   285,    30,     0,   286,   287,   288,   289,
     2712      40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
     2713       0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
     2714       0,     0,    33,     0,     0,     0,   293,     0,   598,    37,
     2715      38,     0,     0,     0,     0,   295,   599,   297,   298,   299,
     2716     300,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2717      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
     2718      25,    26,    27,     0,   642,     0,   337,   280,   281,    30,
     2719     282,     0,     0,     0,   633,     0,     0,     0,     0,     8,
     2720       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     2721      19,    20,    21,    22,    23,    24,   283,    33,    25,    26,
     2722      27,     0,   284,     0,    37,    38,   285,    30,   452,   286,
     2723     287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
     2724       0,     0,     0,     0,   292,     0,     0,     0,     0,     0,
     2725       0,     0,     0,     0,     0,    33,     0,     0,     0,   293,
     2726       0,   377,    37,    38,     0,     0,     0,     0,   295,   379,
     2727     297,   298,   299,   300,   473,     2,   204,     4,     5,     6,
     2728       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     2729      17,    18,    19,    20,    21,    22,    23,    24,     0,   453,
     2730      25,    26,    27,  1234,     0,     0,     0,   109,     0,    30,
     2731       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2732      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
     2733      26,    27,     0,     0,     0,     0,     0,    33,    30,    34,
     2734       0,    35,     0,     0,    37,    38,     0,     0,     8,     9,
     2735      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2736      20,    21,    22,    23,    24,     0,    33,    25,    26,    27,
     2737       0,    36,     0,   205,    38,    39,    30,     0,     0,     0,
     2738       0,     0,    40,    41,    -3,     0,     8,     9,    10,    11,
     2739      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2740      22,    23,    24,     0,    33,    25,    26,    27,    42,    36,
     2741     268,   335,   336,    39,    30,     0,     0,     0,   207,     0,
     2742      40,    41,     0,     0,     8,     9,    10,    11,    12,    13,
     2743      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2744      24,     0,    33,    25,    26,    27,   642,     0,   337,    37,
     2745      38,     0,    30,     0,     0,     0,   633,     8,     9,    10,
     2746      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2747      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
     2748      33,     0,     0,     0,     0,    30,   255,    37,    38,     0,
     2749       0,     0,     0,     0,   109,     8,     9,    10,    11,    12,
     2750      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2751      23,    24,     0,    33,    25,    26,    27,     0,     0,     0,
     2752     205,    38,     0,    30,   155,     0,     0,     0,     0,     0,
     2753       0,     0,   109,     8,     9,    10,    11,    12,    13,    14,
     2754      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2755       0,    33,    25,    26,    27,     0,     0,   268,    37,    38,
     2756       0,    30,     0,     0,     0,   269,     8,     9,    10,    11,
     2757      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     2758      22,    23,    24,     0,     0,    25,    26,    27,     0,    33,
     2759       0,     0,     0,     0,    30,   255,    37,    38,     0,     0,
     2760       0,     0,     0,   633,     8,     9,    10,    11,    12,    13,
     2761      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2762      24,     0,    33,    25,    26,    27,     0,     0,     0,    37,
     2763      38,     0,    30,   337,     0,     0,     0,     0,     0,     0,
     2764       0,   633,     8,     9,    10,    11,    12,    13,    14,    15,
     2765      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
     2766      33,    25,    26,    27,     0,     0,   453,   205,    38,     0,
     2767      30,     0,     0,     0,   109,     8,     9,    10,    11,    12,
     2768      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2769      23,    24,     0,     0,    25,    26,    27,     0,    33,     0,
     2770       0,     0,     0,    30,   268,    37,    38,     0,     0,     0,
     2771       0,     0,   628,     8,     9,    10,    11,    12,    13,    14,
     2772      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     2773       0,    33,    25,    26,    27,     0,     0,     0,    37,    38,
     2774       0,    30,   598,     0,     0,     0,     0,     0,     0,     0,
     2775     633,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2776       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
     2777       0,     0,     0,     0,     0,   337,    37,    38,     0,     0,
     2778       0,     0,     0,   109,     2,   204,     4,     5,     6,     7,
     2779       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     2780      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
     2781      26,    27,     0,    43,     0,     0,     0,     0,    30,     0,
     2782       0,   109,     0,     0,     0,     0,     0,     0,     0,     0,
     2783       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2784       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
     2785      35,     0,     0,    37,    38,   280,   281,     0,   282,  1062,
     2786       0,  1063,     0,     0,  1064,  1065,  1066,  1067,  1068,  1069,
     2787    1070,  1071,     0,     0,  1548,  1072,     0,     0,     0,  1073,
     2788    1074,     0,    32,     0,   283,     0,     0,     0,     0,  -412,
     2789     648,     0,     0,     0,   285,     0,     0,   286,   287,   288,
     2790     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
     2791       0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
     2792       0,     0,     0,     0,     0,     0,     0,   293,     0,   377,
     2793       0,     0,   169,     0,     0,     0,   295,   379,   297,   298,
     2794     299,   300,     0,     0,     0,     0,  1076,     0,   280,   281,
     2795    -129,   282,  1062,     0,  1063,     0,     0,  1064,  1065,  1066,
     2796    1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,     0,
     2797       0,     0,  1073,  1074,     0,    32,     0,   283,     0,     0,
     2798       0,     0,     0,   648,     0,     0,     0,   285,     0,     0,
     2799     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
     2800       0,     0,     0,     0,     0,   292,     0,     0,     0,     0,
     2801       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2802     293,     0,   377,     0,     0,   169,     0,     0,     0,   295,
     2803     379,   297,   298,   299,   300,     0,     0,     0,     0,  1076,
     2804       0,   280,   281,  -129,   282,  1062,     0,  1063,  1418,  1419,
     2805    1064,  1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,
     2806    1548,  1072,     0,     0,     0,  1073,  1074,     0,    32,     0,
     2807     283,     0,     0,     0,     0,     0,   648,     0,     0,     0,
     2808     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
     2809     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
     2810       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2811       0,     0,     0,   293,     0,   377,     0,     0,   169,     0,
     2812       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
     2813     280,   281,  1076,   282,  1062,     0,  1063,  1418,  1419,  1064,
     2814    1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,
     2815    1072,     0,     0,     0,  1073,  1074,     0,    32,     0,   283,
     2816       0,     0,     0,     0,     0,   648,     0,     0,     0,   285,
     2817       0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
     2818     291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
     2819       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2820       0,     0,   293,     0,   377,     0,     0,   169,     0,     0,
     2821       0,   295,   379,   297,   298,   299,   300,     0,     0,   280,
     2822     281,  1076,   282,  1062,     0,  1063,     0,     0,  1064,  1065,
     2823    1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
     2824       0,     0,     0,  1073,  1074,     0,    32,     0,   283,     0,
     2825       0,     0,     0,     0,   648,     0,     0,     0,   285,     0,
     2826       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
     2827       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
     2828       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2829       0,   293,     0,   377,     0,     0,   169,     0,     0,     0,
     2830     295,   379,   297,   298,   299,   300,     0,     0,     0,     0,
     2831    1076,     2,   204,     4,     5,     6,     7,     8,     9,    10,
     2832      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2833      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
     2834       0,     0,     0,     0,     0,    30,     0,   280,   281,     0,
     2835     282,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2836       0,     0,     0,     0,     0,     0,   280,   281,     0,   282,
     2837       0,     0,     0,    33,     0,    34,   283,    35,     0,     0,
     2838      37,    38,   284,     0,     0,     0,   285,     0,     0,   286,
     2839     287,   288,   289,    40,    41,   283,   290,   291,     0,     0,
     2840       0,   648,  1327,     0,   292,   285,     0,     0,   286,   287,
     2841     288,   289,    40,    41,     0,   290,   291,     0,     0,   293,
     2842       0,   377,     0,   292,   280,   281,     0,   282,   295,   733,
     2843     297,   298,   299,   300,     0,     0,     0,     0,   293,     0,
     2844     784,     0,     0,   280,   281,     0,   282,   295,   379,   297,
     2845     298,   299,   300,   283,     0,     0,     0,     0,     0,   284,
     2846       0,     0,     0,   285,     0,     0,   286,   287,   288,   289,
     2847      40,    41,   283,   290,   291,     0,     0,     0,   284,     0,
     2848       0,   292,   285,     0,     0,   286,   287,   288,   289,    40,
     2849      41,     0,   290,   291,     0,     0,   293,     0,   377,     0,
     2850     292,   280,   281,     0,   282,   295,   826,   297,   298,   299,
     2851     300,     0,     0,     0,     0,   517,     0,     0,     0,     0,
     2852       0,     0,     0,     0,   295,   379,   297,   298,   299,   300,
     2853     283,     0,     0,     0,     0,     0,   284,     0,     0,     0,
     2854     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
     2855     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
     2856       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2857       0,     0,     0,   520,     0,     0,     0,     0,     0,     0,
     2858       0,     0,   295,   379,   297,   298,   299,   300,     2,   204,
     2859       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     2860      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     2861      24,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2862       0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
     2863       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2864       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2865      33,     0,    34,     0,    35,    36,     0,   172,   173,    39,
     2866       0,     0,     0,     0,     0,     0,    40,    41,   203,     2,
     2867     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     2868      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     2869      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
     2870       0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
     2871       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2872       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2873       0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
     2874     473,     2,   204,     4,     5,     6,     7,     8,     9,    10,
     2875      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     2876      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
     2877       0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
     2878       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2879       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2880       0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
     2881      37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
     2882      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     2883      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
     2884       0,     0,     0,     0,     0,     0,    30,     0,     0,     0,
     2885       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2886       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     2887       0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
     2888       0,   205,    38
     2889};
     2890
     2891#define yypact_value_is_default(yystate) \
     2892  ((yystate) == (-1281))
     2893
     2894#define yytable_value_is_error(yytable_value) \
     2895  YYID (0)
     2896
     2897static const yytype_int16 yycheck[] =
     2898{
     2899       0,     1,     0,    42,   237,   217,   183,   183,   202,    42,
     2900       0,     1,     1,   183,    42,   542,   183,   183,   114,   103,
     2901     184,   455,   519,   343,     0,     0,   628,   454,    28,    29,
     2902     183,    31,   697,    31,   697,   183,   498,   697,   610,   608,
     2903     502,    31,    42,   679,    44,   461,    44,   347,  1042,   496,
     2904     279,   901,   655,     1,    54,    31,    31,   166,   167,   608,
     2905      60,  1061,    60,    63,   608,    63,    66,   610,    66,   153,
     2906     347,     0,   578,    63,  1005,   277,    66,    66,   416,   998,
     2907      80,    81,  1041,  1042,   184,   608,   263,   263,    63,   779,
     2908      42,   362,   185,   263,   608,   366,   263,   263,   436,    31,
     2909     264,   528,    31,   199,   104,  1337,   444,   107,   608,    27,
     2910     263,   776,     0,   776,   114,   263,   776,    42,   608,   722,
     2911     642,   643,   644,  1054,   758,   424,   425,   611,    38,   254,
     2912     643,   644,    38,   617,    81,    42,    62,   106,  1418,   661,
     2913       0,     1,    63,    31,   183,   145,    44,   145,   661,   109,
     2914     183,    81,   108,   153,   226,   183,   116,  1422,   158,    77,
     2915     158,   130,    38,   110,   264,   612,   259,   260,   488,   616,
     2916      50,    31,    44,   245,   743,   109,    43,    44,   814,   109,
     2917    1073,  1074,   116,   183,   184,    81,   184,   108,   824,    54,
     2918     637,    43,    44,    38,   641,    38,   408,    84,   108,   199,
     2919     110,   500,    63,   839,   110,   131,    66,   207,  1440,   207,
     2920     901,   109,  1492,   735,    43,    44,   216,   494,   108,   219,
     2921     519,   219,   735,    38,   263,   112,   226,    81,   108,   219,
     2922     263,   183,   108,    11,   110,   263,   115,   109,   108,   104,
     2923     404,   241,   107,   743,   219,   245,  1240,   114,  1141,   249,
     2924     250,   249,   131,   743,   115,  1520,   340,   113,   183,   249,
     2925    1525,   113,   116,   263,   264,   108,   264,   110,   115,   838,
     2926     270,    38,   144,   249,   249,     0,   183,   277,   850,   599,
     2927    1545,   510,     3,   717,   113,   369,   585,  1552,    81,   838,
     2928     454,   416,   292,   108,   838,   110,  1290,   158,   394,  1474,
     2929     111,  1525,   250,  1303,   404,   827,    31,   850,   628,   207,
     2930     610,   436,   818,   633,   827,   838,   109,   249,  1008,   444,
     2931     249,  1545,   486,   116,   838,   596,   422,   327,  1552,   327,
     2932    1289,  1290,   428,    81,  1509,   207,  1511,  1256,   838,    94,
     2933     238,   108,    95,   110,   292,   111,   346,   347,   838,   115,
     2934      81,   216,   690,    95,   454,  1525,   840,   115,   219,   698,
     2935     108,   249,     3,   363,     1,   237,   254,   367,   639,   122,
     2936    1061,   269,    71,   348,   129,  1225,   696,   108,   378,    71,
     2937     122,   720,  1552,    82,    83,   108,   486,   959,   108,   249,
     2938      82,    83,   114,   115,   394,   293,   257,   269,   296,    71,
     2939     261,   108,  1038,  1039,   404,   270,   404,    44,   130,   958,
     2940      82,    83,   277,   115,   958,    71,     0,   115,  1020,     0,
     2941    1414,   115,   422,   130,   296,   872,    82,    83,   428,   131,
     2942     430,   488,   131,   131,   109,   958,  1070,   131,   110,   131,
     2943     115,    67,   115,    89,    90,    71,   675,   531,    74,   115,
     2944      76,   130,   772,   115,   454,  1414,    71,    83,   131,   459,
     2945    1096,  1097,   118,  1463,   464,   131,   103,    82,    83,   131,
     2946    1470,   343,   109,   473,   108,  1406,  1407,   115,   478,   125,
     2947     126,   346,   109,   108,   109,   109,   486,   348,   486,   116,
     2948     490,   115,   490,   131,   494,   110,   109,   497,   363,   499,
     2949     490,    71,   367,   130,   479,   967,  1003,   144,   120,   121,
     2950     937,   927,    82,    83,   490,   490,   153,   964,   945,   519,
     2951     697,   697,   115,  1523,   249,   473,   108,   697,   416,   254,
     2952     697,   697,   761,   108,  1225,   699,   536,  1140,   131,   539,
     2953     110,   541,   542,  1115,   697,  1029,  1030,   656,   436,   697,
     2954     850,   108,   424,   425,   452,   757,   444,   455,   829,    87,
     2955      88,   490,   833,   461,   991,   690,   203,   663,   429,    71,
     2956     207,   519,   665,   850,   115,    10,    11,    12,    13,    14,
     2957      82,    83,   115,   108,   210,   642,   643,   644,   536,   589,
     2958     131,   539,   470,   541,   542,   109,   596,   115,   131,   699,
     2959     237,   238,   490,    38,   661,   109,   108,   732,   608,   115,
     2960     610,   695,  1303,   131,   512,    71,   514,   115,   479,   517,
     2961     111,   597,   520,   109,   115,   131,    82,    83,   500,   629,
     2962     490,    66,   269,   131,  1270,   272,   109,    79,   977,   696,
     2963     282,   589,  1278,  1279,  1280,   645,    71,   519,    73,    74,
     2964     109,   651,   923,   295,   296,   630,   293,    82,    83,   296,
     2965     660,   111,   662,   663,   664,   307,   114,  1101,   110,  1303,
     2966     112,    79,     3,   111,   116,   887,   108,   115,   735,    10,
     2967      11,    12,    13,    14,    91,    92,   963,   771,   113,     0,
     2968    1326,   416,   109,   108,   293,   110,   908,   697,   115,   699,
     2969    1020,   343,   110,   340,   112,   111,   343,    38,   116,   115,
     2970     108,   436,   712,   585,   662,   772,   664,   118,   718,   444,
     2971      31,   131,   123,   124,   350,   362,   352,   599,    71,   366,
     2972     730,    42,   369,    44,   111,    66,   969,   379,   115,    82,
     2973      83,   602,   108,   743,   744,   109,  1380,   109,   723,    60,
     2974    1131,   115,    63,   115,  1135,    66,   628,   757,   108,    63,
     2975     110,   633,   737,   488,   629,   490,   108,   110,   118,   630,
     2976     827,  1495,  1463,   937,   635,   108,   108,  1501,   110,  1470,
     2977     645,   945,   730,   108,   893,   110,   118,   424,   425,   111,
     2978     109,   109,  1319,   118,  1133,   660,   115,   115,  1522,   113,
     2979     109,   679,   690,  1527,   131,    52,   115,   113,   512,    71,
     2980     514,    73,    74,   517,   440,   452,   520,   109,   455,   717,
     2981      82,    83,   109,   115,   461,   424,   425,   128,   115,   130,
     2982     113,  1102,  1523,  1467,   145,  1469,   473,   937,   838,  1033,
     2983    1160,   114,   115,   109,   732,   945,   108,   158,    95,   115,
     2984     850,   113,  1191,  1192,   109,   108,   831,   110,   834,   131,
     2985     115,   498,   723,   500,  1529,   502,  1529,   131,   109,  1529,
     2986     115,   116,   183,   184,   115,   512,   737,   514,   109,   109,
     2987     517,   109,   519,   520,   115,   115,    71,   115,    73,    74,
     2988    1524,   108,   757,   893,   531,   108,   207,    82,    83,   109,
     2989     900,   901,  1131,   109,   109,   115,  1135,  1136,   219,   115,
     2990     115,   901,    81,   512,   556,   557,   558,   108,   517,   110,
     2991    1240,   520,   108,   923,   110,   901,   901,   109,   110,     4,
     2992       5,     6,     7,     8,     9,   108,   814,   937,   249,    71,
     2993     111,    73,    74,    81,   191,   945,   824,  1056,   585,   119,
     2994      82,    83,   263,   901,   108,   109,   110,   599,   108,   596,
     2995     110,   839,   599,   963,   108,   690,   110,   214,    57,    58,
     2996     831,   696,   108,   109,   110,   574,   108,   224,   968,   968,
     2997     108,   113,   110,   983,  1041,     4,     5,     6,     7,     8,
     2998       9,   628,   992,    68,   127,    70,   633,   108,   109,   110,
     2999    1000,   128,   639,  1003,   130,  1005,    71,   732,    73,    74,
     3000      75,   110,   108,   901,   110,     3,   327,    82,    83,   114,
     3001     115,  1250,    10,    11,    12,    13,    14,  1123,    71,   927,
     3002      73,    74,    75,   115,   116,   983,   347,   115,   116,    82,
     3003      83,   901,   108,   108,   110,   110,   293,   772,  1023,    68,
     3004      38,    70,  1000,   118,  1054,  1003,   131,  1005,   695,   108,
     3005     109,   110,  1401,    93,  1064,   108,   108,  1067,  1068,  1069,
     3006     108,  1061,    10,    11,    12,    13,    14,  1504,    66,  1418,
     3007     717,   563,   564,   565,   566,  1061,  1061,    71,   111,    73,
     3008      74,   733,  1092,   404,    43,    44,    44,   969,    82,    83,
     3009      38,   111,   702,  1160,   704,   109,  1054,   109,   968,  1338,
     3010     747,   109,    60,  1342,   109,    63,  1064,   109,    66,  1067,
     3011    1068,  1069,     3,  1123,   561,   562,   110,  1554,    66,    10,
     3012      11,    12,    13,    14,   771,   109,  1220,   779,    71,   108,
     3013      73,    74,    75,   454,   111,   109,   111,   111,  1020,    82,
     3014      83,   115,  1491,  1492,    57,    58,    59,    38,   567,   568,
     3015    1038,  1039,  1023,  1262,  1263,  1264,   130,   131,   559,   560,
     3016     108,   110,   110,  1061,   115,   108,   901,   130,   113,   490,
     3017     118,   108,   111,   494,   826,    66,   109,   109,   116,   115,
     3018     111,   111,   829,   111,   441,   111,   833,   145,  1198,   116,
     3019      28,  1061,   116,  1101,   109,    84,    85,    86,   109,   111,
     3020     158,   109,  1202,  1203,  1203,  1444,   113,   116,  1096,  1097,
     3021    1220,   114,   114,   114,   108,  1225,   115,  1202,   475,   108,
     3022     115,   110,  1289,   112,   113,  1225,   184,   109,     4,     5,
     3023       6,     7,     8,     9,   131,   109,   109,   116,   109,  1225,
     3024    1225,   109,   109,   115,  1244,  1244,    71,   109,   109,   207,
     3025      75,   109,  1262,  1263,  1264,   512,    32,    82,    83,   109,
     3026     517,   219,   109,   520,   109,   109,    71,  1225,    73,    74,
     3027      75,    84,    85,    86,   109,   109,   923,    82,    83,   470,
     3028     927,   109,   109,   108,   114,   110,   109,   608,   109,   610,
     3029      28,  1397,    68,   118,    70,   108,  1539,   110,  1298,   112,
     3030     113,   698,   111,  1303,  1262,  1263,  1264,   109,   130,  1319,
     3031    1320,   109,   109,  1298,   114,   109,   115,  1303,  1303,   111,
     3032     967,   968,   969,   720,   111,   109,  1061,  1225,    71,   109,
     3033     115,  1202,    75,  1203,   109,   901,   115,  1337,  1337,    82,
     3034      83,   115,  1529,  1529,   116,   113,   111,    71,   109,  1529,
     3035    1238,    75,  1529,  1529,   111,  1225,  1530,   115,    82,    83,
     3036     115,  1319,  1320,   109,  1374,   108,  1529,  1377,  1020,   327,
     3037     109,  1529,   108,  1020,  1244,   118,   697,   108,   699,   108,
     3038    1554,   108,  1270,   108,   108,   111,  1396,  1397,   116,   131,
     3039    1278,  1279,  1280,   114,   118,   109,  1406,  1407,  1504,    71,
     3040     109,    73,    74,    75,   109,  1303,     0,     1,   128,  1061,
     3041      82,    83,  1422,   114,   811,   113,  1374,  1427,   111,  1377,
     3042    1530,   678,   743,   744,   131,  1160,   109,  1298,   115,   111,
     3043     687,   115,   111,  1303,   691,  1445,   109,    31,  1326,   109,
     3044    1440,  1440,   109,   111,  1554,   111,   404,  1457,  1406,  1407,
     3045      44,   111,   109,    54,  1101,  1102,   111,   111,   111,    46,
     3046      29,   109,   131,  1463,  1422,   114,   131,  1337,   131,  1427,
     3047    1470,    71,    66,    73,    74,    75,   114,  1463,  1463,   131,
     3048    1529,   131,    82,    83,  1470,  1470,  1529,  1445,   679,   116,
     3049    1225,  1529,   889,   109,  1504,  1505,   111,   114,  1064,  1457,
     3050     111,   111,   111,   104,  1514,  1240,   107,   111,   108,   103,
     3051    1520,    80,    81,   111,   111,  1525,   111,   838,   118,  1529,
     3052    1530,  1396,  1530,  1523,   109,  1177,   109,   111,   108,   850,
     3053     111,    63,   108,  1543,   108,  1545,    59,  1523,  1523,  1549,
     3054     113,   109,  1552,   109,  1554,   131,  1554,  1505,    80,   116,
     3055    1560,   145,   153,   111,  1564,   111,  1514,   109,   111,   153,
     3056     154,   109,  1520,   108,  1472,  1463,  1474,  1525,  1303,    95,
     3057    1440,    95,  1470,  1220,   108,   114,   131,   115,   111,   109,
     3058     977,   109,   109,   115,   109,  1543,    41,  1545,   131,   131,
     3059     184,  1549,    95,  1463,  1552,  1204,  1205,  1244,  1207,   116,
     3060    1470,  1509,  1560,  1511,  1213,   199,  1564,  1216,   202,   203,
     3061     109,  1008,   109,   207,    95,   216,   937,   131,   109,   109,
     3062     131,   116,   131,   814,   945,  1523,   158,   109,   114,   109,
     3063      50,   131,    52,   824,   228,    55,    56,    57,   232,    59,
     3064     234,   111,   963,   111,   108,   114,   131,   114,   839,   243,
     3065     109,   109,   131,  1523,    74,   249,   109,  1539,   109,  1225,
     3066     254,  1058,  1076,   569,  1225,   570,    86,    87,   925,   270,
     3067     264,   571,   241,  1492,    63,   573,   277,  1382,   272,   572,
     3068      25,    26,    27,  1564,    73,  1313,  1136,   219,  1342,  1470,
     3069    1337,    10,    11,    12,    13,    14,    10,    11,    12,    13,
     3070      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3071      24,    25,    26,    27,  1092,    29,    30,    31,   452,    38,
     3072     452,   945,   704,   464,    38,   257,   115,   893,  1463,   261,
     3073     947,   992,   589,   965,   657,  1470,  1133,   747,  1244,   490,
     3074     757,   577,    -1,    -1,   577,   346,   340,    66,   577,   343,
     3075      -1,    96,    66,    98,  1320,   349,    -1,    -1,    -1,    73,
     3076      74,    -1,   363,    77,    -1,    -1,   367,  1376,   362,   158,
     3077      -1,    -1,   366,    -1,    -1,   369,    -1,    10,    11,    12,
     3078      13,    14,    -1,    -1,    -1,    -1,    -1,    -1,  1523,   108,
     3079      -1,   110,    -1,  1440,  1191,  1192,   110,    -1,    -1,   118,
     3080      -1,    -1,    -1,    -1,   118,    38,    -1,    -1,  1374,   378,
     3081      -1,  1377,    -1,    -1,    -1,  1072,   348,    -1,    -1,    -1,
     3082      -1,    -1,   416,    -1,    -1,  1472,    -1,  1474,    -1,   430,
     3083     219,    -1,    -1,    66,   179,    -1,    -1,   431,    -1,    -1,
     3084      -1,    -1,   436,    -1,   189,   190,    -1,  1038,  1039,   194,
     3085     444,   196,   197,    -1,    -1,    -1,  1422,    -1,    -1,    -1,
     3086      -1,  1427,  1509,    -1,  1511,    -1,    -1,    -1,   257,    -1,
     3087      -1,    -1,   261,    -1,    -1,   108,   470,   110,    -1,   473,
     3088      -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,   277,    -1,
     3089     459,  1457,  1539,    -1,   488,   464,   490,   429,    -1,    10,
     3090      11,    12,    13,    14,   498,  1096,  1097,    -1,   502,    -1,
     3091      -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
     3092      13,    14,    -1,   343,   344,    -1,    -1,    38,   497,    71,
     3093     499,    73,    74,    75,    -1,   355,   356,   531,   532,    -1,
     3094      82,    83,    -1,    -1,    -1,    38,    -1,   479,    -1,    -1,
     3095      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   348,
     3096      71,    -1,    73,    74,    75,    -1,   108,    -1,   110,    -1,
     3097      -1,    82,    83,    66,   116,    -1,   118,  1543,    71,    -1,
     3098      73,    74,    75,  1549,   578,    -1,    -1,    -1,    -1,    82,
     3099      83,    -1,    -1,    -1,  1560,   596,    -1,   108,  1564,   110,
     3100      -1,    -1,   596,   597,  1401,   599,    -1,   118,    -1,    -1,
     3101      -1,    -1,    -1,    -1,    -1,   108,   610,   110,    -1,    -1,
     3102      -1,  1418,    -1,    -1,    -1,   118,    -1,    -1,   629,    -1,
     3103      -1,    -1,    -1,    -1,   628,    -1,    -1,    -1,    -1,   633,
     3104     429,    -1,    -1,    -1,   645,   639,    -1,  1238,   642,   643,
     3105     644,    -1,    -1,    -1,    -1,  1312,    -1,   446,    -1,   660,
     3106      71,    -1,    73,    74,    75,    -1,    -1,   661,    -1,    -1,
     3107     602,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
     3108      -1,    -1,   651,    -1,    -1,   679,    -1,  1278,  1279,  1280,
     3109     479,    -1,    -1,    -1,  1491,  1492,   690,   108,   630,   110,
     3110      -1,   695,   696,   635,    -1,   699,    -1,   118,    -1,    -1,
     3111      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3112      19,    20,    21,    22,    23,    24,    25,    26,     0,    -1,
     3113      29,    30,    31,    -1,    -1,  1326,    -1,    -1,   732,    38,
     3114      39,   735,    -1,   712,    -1,    -1,    -1,    -1,    -1,   718,
     3115     744,    -1,    -1,   747,    -1,     0,   757,    -1,    -1,    31,
     3116      71,    -1,    73,    74,    75,    -1,    -1,    66,    -1,    -1,
     3117      -1,    82,    83,    -1,    73,    74,    -1,   771,   772,    -1,
     3118      -1,    -1,    -1,   777,    -1,    -1,    31,    -1,    -1,    -1,
     3119      -1,   723,    -1,    -1,    66,    -1,    -1,   108,    -1,   110,
     3120      -1,    -1,    -1,    -1,    -1,   737,    -1,   118,  1529,    -1,
     3121      -1,   110,    -1,   602,  1471,   114,  1473,    -1,    -1,   118,
     3122     814,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3123     824,    -1,    -1,   827,    -1,   829,   581,   582,   832,   833,
     3124     834,   630,    -1,    -1,    -1,   839,   635,    -1,    -1,    -1,
     3125      -1,  1508,    -1,  1510,    -1,   849,    71,    -1,    73,    74,
     3126      75,    -1,    -1,    -1,    -1,    -1,   611,    82,    83,   614,
     3127     615,    -1,   617,    -1,   619,   620,    -1,    -1,    -1,   624,
     3128     625,    -1,   154,    96,    97,    98,    99,   100,   101,   102,
     3129     103,   104,   105,   108,    -1,    -1,  1553,    -1,  1555,   831,
     3130      -1,    -1,    -1,   118,   724,    -1,   726,   901,    -1,   154,
     3131      -1,  1568,  1569,   733,   734,    -1,    -1,   130,   738,    -1,
     3132      -1,    -1,   923,    -1,   893,    -1,   187,    -1,    -1,   923,
     3133     750,   900,    -1,   194,   723,   755,    -1,    -1,    10,    11,
     3134      12,    13,    14,    -1,    -1,    -1,    -1,    -1,   737,    -1,
     3135      -1,    -1,    -1,    -1,    -1,    -1,   228,    -1,    -1,    -1,
     3136      -1,   781,    -1,   708,   709,   959,    38,    -1,   757,   714,
     3137      -1,    -1,    -1,   967,   968,    -1,    -1,   249,    -1,    -1,
     3138      -1,    -1,   254,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3139      -1,   985,    -1,    -1,    66,    -1,    -1,    -1,    -1,    71,
     3140      -1,    73,    74,    75,   249,   266,   826,    -1,    -1,   254,
     3141      82,    83,    -1,    -1,    -1,    -1,    25,    26,    27,    -1,
     3142      -1,    -1,    -1,   992,    -1,    -1,  1020,    -1,    -1,    -1,
     3143      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,  1033,
     3144      -1,    -1,   831,    -1,  1038,  1039,   118,  1041,  1042,    -1,
     3145      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
     3146      -1,   322,    -1,   883,   884,   885,   886,  1061,   888,   330,
     3147      -1,    -1,   333,    -1,    -1,    -1,    -1,   349,    -1,    -1,
     3148      -1,    -1,    38,    -1,   904,    -1,    -1,    96,    -1,    98,
     3149      -1,  1023,    -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,
     3150      -1,    -1,  1096,  1097,   349,    -1,    -1,    -1,  1102,    -1,
     3151      66,    -1,    -1,    -1,   123,    71,    -1,    73,    74,    75,
     3152      -1,    -1,    -1,  1092,    -1,    -1,    82,    83,    -1,    -1,
     3153      -1,    -1,    -1,    -1,    -1,   396,    -1,   957,    -1,   400,
     3154      -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
     3155      -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,   431,
     3156      -1,    -1,   118,    -1,   436,    -1,  1160,    -1,    -1,    -1,
     3157     179,   416,   444,    -1,    -1,    -1,    -1,   997,   187,    -1,
     3158     189,   190,    -1,    -1,  1004,   194,   431,   196,   197,  1009,
     3159      -1,   436,    -1,    -1,  1014,    -1,  1016,    -1,   470,   444,
     3160    1020,  1021,  1022,    -1,    -1,  1025,    -1,    -1,    -1,  1203,
     3161      -1,    -1,    -1,    -1,  1034,    -1,   488,    -1,   490,  1220,
     3162      -1,    -1,    -1,    -1,   485,   470,  1220,    -1,    -1,  1198,
     3163      -1,  1225,  1052,  1053,  1023,    -1,    -1,    -1,    10,    11,
     3164      12,    13,    14,   488,  1238,   490,  1240,    -1,    -1,    -1,
     3165    1244,    -1,    -1,    -1,    -1,    -1,    -1,   266,    -1,  1079,
     3166     532,    -1,  1082,    -1,    -1,    -1,    38,    -1,    -1,    -1,
     3167    1202,    -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,
     3168      -1,    -1,    -1,    -1,  1278,  1279,  1280,   532,    -1,    -1,
     3169      -1,    -1,    -1,    -1,    66,  1289,  1290,    -1,    -1,    71,
     3170    1120,    73,    74,    75,    -1,    -1,  1126,  1127,    -1,  1303,
     3171      82,    83,    -1,    -1,    -1,    -1,   577,   578,  1138,    -1,
     3172      -1,    -1,    -1,  1143,    -1,   597,  1146,    -1,  1148,    -1,
     3173      -1,  1151,  1326,    -1,    -1,    -1,   108,    -1,    -1,    -1,
     3174      -1,    -1,    -1,  1337,  1164,    -1,   118,    -1,    -1,    -1,
     3175      -1,    -1,   597,  1098,    -1,    -1,    -1,  1177,    -1,  1179,
     3176    1180,  1181,  1182,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
     3177     642,   643,   644,    -1,    -1,  1195,    -1,  1197,    -1,    -1,
     3178      -1,  1201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,
     3179      -1,    -1,    -1,    -1,    -1,  1396,    -1,   642,   643,   644,
     3180      -1,    -1,    -1,    -1,    -1,   666,    -1,   679,    -1,   670,
     3181    1230,  1231,    -1,  1202,    -1,    -1,   661,    -1,   690,    -1,
     3182    1414,    -1,     0,    -1,   696,    -1,    -1,    -1,    -1,    -1,
     3183      -1,    -1,    -1,    -1,   679,    -1,    -1,    -1,    -1,    -1,
     3184      -1,    -1,   703,    -1,    -1,   690,  1440,    -1,    -1,     0,
     3185      -1,   696,    -1,    31,    -1,     0,     1,    -1,    -1,    -1,
     3186     732,  1281,  1282,   735,    -1,    -1,    -1,    -1,    -1,  1463,
     3187      -1,  1291,    -1,    -1,    -1,    -1,  1470,  1222,    -1,    -1,
     3188      31,    -1,    -1,    -1,    -1,    -1,    31,   732,    66,    -1,
     3189     735,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3190     772,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1298,
     3191      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    63,    -1,
     3192      -1,    66,    -1,  1343,    -1,    -1,    -1,   772,    -1,  1523,
     3193      -1,    -1,    -1,    -1,    -1,  1355,  1530,  1357,  1358,  1359,
     3194      -1,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,  1369,
     3195      -1,    -1,   824,    -1,    -1,   827,    -1,   818,  1378,    -1,
     3196     832,    -1,   834,    -1,    -1,    -1,    -1,   839,    -1,   814,
     3197      -1,    -1,   581,   582,  1394,    -1,   154,    -1,    -1,   824,
     3198      -1,    -1,   827,    -1,    -1,    -1,    -1,   832,    -1,   834,
     3199      -1,    -1,    -1,    -1,   839,    -1,    -1,    -1,    -1,    -1,
     3200      -1,    -1,   611,   154,    -1,   614,   615,    -1,   617,   154,
     3201     619,   620,    -1,    -1,    -1,   624,   625,    -1,    -1,    -1,
     3202      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   901,
     3203    1450,  1451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3204      -1,    -1,    -1,  1463,    -1,    -1,    -1,    -1,    -1,    -1,
     3205    1470,    -1,    -1,    -1,    -1,    -1,   901,    -1,    -1,    -1,
     3206      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3207     931,   249,    -1,    -1,   219,    -1,   254,    -1,    -1,    -1,
     3208      -1,    -1,    -1,  1503,    -1,    -1,    -1,  1507,    -1,    -1,
     3209      -1,    -1,    -1,    -1,   703,    -1,    -1,    -1,   249,   708,
     3210     709,    -1,    -1,   254,   249,   714,    -1,    -1,    -1,    -1,
     3211      -1,    -1,    -1,   985,    -1,    -1,  1536,    -1,  1538,    -1,
     3212      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     3213      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
     3214     985,    29,    30,    31,    -1,    -1,  1566,  1567,    -1,  1010,
     3215      38,    39,    -1,    -1,  1574,  1575,    -1,    -1,    -1,    -1,
     3216      -1,    -1,    -1,    -1,    -1,  1026,  1038,  1039,    -1,  1041,
     3217    1042,   349,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
     3218      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,  1061,
     3219      -1,    -1,    -1,  1038,  1039,    -1,  1041,  1042,   349,    10,
     3220      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3221      21,    22,    23,    24,    25,    26,  1061,    -1,    29,    30,
     3222      31,    -1,   110,    -1,  1096,  1097,   114,    38,    -1,    -1,
     3223     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
     3224      -1,    -1,  1103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3225      -1,  1096,  1097,   431,    -1,    66,    -1,    -1,   436,    -1,
     3226      71,    -1,    73,    74,    75,   416,   444,    -1,    -1,    -1,
     3227      -1,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3228     431,    -1,    -1,    -1,    -1,   436,   431,    -1,  1160,    -1,
     3229      -1,    -1,   470,   444,    -1,    -1,    -1,   108,    -1,   110,
     3230      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
     3231     488,    -1,   490,    -1,    -1,  1160,    -1,    -1,    -1,   470,
     3232      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3233      -1,  1203,    -1,    -1,    -1,    -1,    -1,   488,    -1,   490,
     3234      -1,    -1,    -1,    -1,    -1,   490,    -1,    -1,    -1,    -1,
     3235      -1,    -1,    -1,  1225,   532,    -1,    -1,    -1,  1203,    -1,
     3236      -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,    -1,
     3237      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3238    1225,   532,    -1,    -1,    -1,    -1,    -1,   532,    -1,    -1,
     3239      -1,    -1,    -1,  1238,    -1,  1240,    -1,    -1,  1270,    -1,
     3240      -1,    -1,    -1,    -1,    -1,    -1,  1278,  1279,  1280,    -1,
     3241      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,   597,
     3242      -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
     3243      -1,  1303,    -1,  1278,  1279,  1280,    -1,    -1,    -1,    -1,
     3244      -1,    -1,    -1,    -1,  1289,  1290,   597,    -1,    -1,    -1,
     3245      -1,    -1,   597,    -1,  1326,    -1,    -1,    -1,  1303,    -1,
     3246      -1,    -1,    -1,    -1,   642,   643,   644,    -1,    -1,    -1,
     3247      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3248      -1,  1326,    -1,   661,    -1,    -1,    -1,    -1,    -1,  1098,
     3249      -1,   642,   643,   644,    -1,    -1,    -1,   642,   643,   644,
     3250      -1,   679,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3251     661,    -1,   690,    -1,    -1,    -1,   661,    -1,   696,    -1,
     3252      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,     7,
     3253      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,   690,
     3254      -1,    -1,  1414,    -1,    -1,   696,    -1,    -1,    -1,    -1,
     3255      -1,    -1,    -1,    -1,   732,    -1,    -1,   735,    36,    37,
     3256      38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1414,
     3257      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3258      -1,   732,    -1,    -1,   735,    -1,    -1,    65,    66,    -1,
     3259     735,  1463,    -1,    71,   772,    -1,    -1,    75,  1470,    -1,
     3260      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
     3261      -1,    -1,    -1,  1222,    -1,    93,    -1,    -1,  1463,    -1,
     3262      -1,   772,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
     3263     108,    -1,   110,    -1,    -1,    -1,   814,    -1,    -1,   117,
     3264     118,   119,   120,   121,   122,    -1,   824,    -1,    -1,   827,
     3265      -1,  1523,    -1,    -1,   832,    -1,   834,    -1,    -1,    -1,
     3266      -1,   839,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,
     3267      -1,    -1,    -1,   824,    -1,    -1,   827,    -1,  1523,    -1,
     3268      -1,   832,   827,   834,    -1,    -1,    -1,    -1,   839,   834,
     3269      -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,
     3270       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3271      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3272      25,    26,    -1,   901,    29,    30,    31,    32,    -1,    -1,
     3273      35,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    10,
     3274      11,    12,    13,    14,    -1,    10,    11,    12,    13,    14,
     3275     901,    -1,    -1,    -1,    -1,    -1,   901,    -1,    63,    -1,
     3276      -1,    66,    44,    68,    -1,    70,    71,    38,    73,    74,
     3277      75,    -1,    -1,    38,    -1,    -1,    -1,    82,    83,    -1,
     3278      -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3279      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
     3280      71,    66,    -1,   108,    75,   110,    71,   985,    -1,    -1,
     3281      75,    82,    83,   118,    -1,    -1,    -1,    82,    83,    -1,
     3282      -1,    -1,    -1,   968,    -1,    -1,    -1,   109,    -1,    -1,
     3283      -1,    -1,    -1,   115,   985,    -1,    -1,   108,    -1,    -1,
     3284     985,    -1,    -1,   108,    -1,    -1,    -1,   118,    -1,    -1,
     3285      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
     3286    1038,  1039,   144,  1041,  1042,    -1,    -1,    -1,    -1,    -1,
     3287      -1,    -1,   154,    -1,    -1,    -1,   158,    -1,    -1,    -1,
     3288      -1,    -1,    -1,  1061,    -1,    -1,    -1,  1038,  1039,    -1,
     3289    1041,  1042,    -1,    -1,    -1,    -1,  1041,  1042,    -1,    -1,
     3290      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3291    1061,    -1,    -1,    -1,    -1,    -1,  1061,    -1,  1096,  1097,
     3292      -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
     3293      -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,    -1,
     3294      -1,    -1,    -1,    -1,    -1,  1096,  1097,    -1,    -1,    -1,
     3295      -1,    36,    37,    -1,    39,   237,   238,    10,    11,    12,
     3296      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3297      23,    24,    25,    26,    -1,    -1,    29,    30,    31,   261,
     3298      65,    -1,  1160,    -1,    -1,    38,    71,   269,    -1,    -1,
     3299      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
     3300      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1160,
     3301      -1,   293,    -1,    66,   296,    -1,    -1,    -1,    -1,    -1,
     3302      73,    74,    -1,   108,    -1,  1203,    -1,    -1,    -1,    -1,
     3303      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
     3304      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1225,    -1,    -1,
     3305      -1,    -1,  1203,    -1,    -1,    -1,    -1,  1202,  1203,    -1,
     3306    1238,   343,  1240,    -1,    -1,   118,   348,    -1,    -1,    -1,
     3307      -1,    -1,    -1,    -1,  1225,    -1,    -1,    -1,    -1,    -1,
     3308    1225,    -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,
     3309      -1,    -1,  1270,    -1,    -1,    -1,    -1,    -1,    -1,  1244,
     3310    1278,  1279,  1280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3311      -1,  1289,  1290,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
     3312      -1,    -1,    -1,    -1,    -1,  1303,    -1,  1278,  1279,  1280,
     3313      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,
     3314      -1,    -1,   424,   425,  1289,  1290,    -1,    -1,  1326,   431,
     3315      -1,    -1,  1303,  1298,    -1,    -1,    -1,    -1,  1303,    -1,
     3316      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3317     452,    -1,    -1,   455,    -1,  1326,    -1,    -1,    -1,   461,
     3318      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3319      -1,    -1,  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3320      -1,    -1,    -1,    -1,    -1,    -1,   488,    -1,    -1,    -1,
     3321      63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   500,    -1,
     3322      73,    -1,    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,
     3323     512,    84,   514,    -1,    -1,   517,  1414,   519,   520,    -1,
     3324      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3325     532,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3326      -1,    -1,   115,  1414,   117,   118,   119,    -1,    -1,  1414,
     3327      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3328      -1,    -1,    -1,    -1,    -1,  1463,    -1,    43,    -1,    -1,
     3329      -1,    -1,  1470,    -1,    -1,  1440,    -1,    -1,    -1,    -1,
     3330      -1,    -1,    -1,   585,    -1,   158,    -1,    -1,    -1,    -1,
     3331      -1,    -1,  1463,    -1,    -1,   597,    -1,   599,  1463,  1470,
     3332     602,    -1,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
     3333      -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    -1,    -1,
     3334      -1,    -1,    -1,    99,    -1,  1523,   628,    -1,    -1,    -1,
     3335      -1,   633,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3336     642,   643,   644,    -1,    -1,    -1,   219,    -1,   221,   222,
     3337     223,    -1,  1523,    -1,    -1,    -1,    -1,    -1,  1523,   661,
     3338      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3339      19,    20,    21,    22,    23,    24,    25,    26,    27,   155,
     3340      29,    30,    31,    -1,   257,    -1,    -1,    -1,   261,    38,
     3341      -1,    -1,    -1,   169,   696,    -1,    -1,    -1,    -1,    -1,
     3342      -1,    -1,    -1,    -1,   277,    -1,    -1,    -1,    -1,    -1,
     3343      -1,    -1,    -1,    -1,    -1,   717,   192,    66,    -1,    -1,
     3344      -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,
     3345     206,    -1,    -1,   735,    -1,   737,    -1,    -1,    -1,   215,
     3346      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
     3347      -1,    -1,    -1,    -1,   327,    -1,    -1,    -1,    -1,   108,
     3348      -1,   110,    36,    37,    -1,    39,    -1,    -1,    -1,   118,
     3349     772,    -1,    -1,    -1,   250,   348,    -1,    -1,    -1,   255,
     3350     353,   354,    -1,    -1,    -1,    -1,    -1,    -1,   361,    -1,
     3351      -1,    65,   268,    -1,    -1,    -1,    -1,    71,   274,    -1,
     3352     276,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
     3353      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,   294,    93,
     3354      -1,    -1,    -1,    -1,    -1,   827,    -1,    -1,    -1,   831,
     3355      -1,   404,   834,    -1,   108,    -1,   110,    -1,    -1,   113,
     3356      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,   422,
     3357      -1,    -1,    -1,    -1,   427,    -1,   429,    -1,    -1,    -1,
     3358      -1,   337,    -1,    -1,    -1,    -1,   342,    -1,    -1,    -1,
     3359      -1,    -1,    -1,   446,    -1,    -1,   449,   450,    -1,    -1,
     3360      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3361      -1,    -1,   465,    -1,   370,    -1,    -1,    -1,   374,   375,
     3362      -1,   377,    -1,    -1,    -1,    -1,   479,    -1,   384,   385,
     3363      -1,   387,   388,   486,   390,    -1,   392,    -1,    -1,    -1,
     3364      -1,    -1,    -1,     7,    -1,   927,    10,    11,    12,    13,
     3365      14,    -1,    -1,   409,    -1,    -1,    -1,    -1,    -1,    -1,
     3366      -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3367      -1,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
     3368      -1,    -1,    -1,    -1,    -1,    -1,   442,   969,    -1,    -1,
     3369      -1,    -1,    -1,    -1,    -1,    -1,    -1,   453,    -1,    -1,
     3370      -1,    65,    66,   985,    -1,    -1,    -1,    71,    -1,    -1,
     3371      -1,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
     3372     476,    85,    86,    -1,    -1,    -1,   482,    -1,    -1,    93,
     3373      -1,   487,    -1,    -1,    -1,    -1,    -1,    -1,  1020,    -1,
     3374      -1,    -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   602,
     3375      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,  1041,
     3376    1042,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   524,    -1,
     3377      -1,    -1,    -1,    -1,    -1,    -1,    -1,   630,   280,    -1,
     3378     282,   283,   635,    -1,   540,    -1,    -1,    -1,   290,   291,
     3379      -1,    -1,    -1,   295,   296,    -1,    -1,    -1,    -1,    -1,
     3380      -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,    -1,
     3381      -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,  1101,
     3382      -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3383     586,    -1,    -1,    -1,    -1,    -1,    -1,   593,    -1,    -1,
     3384      -1,   343,   598,    -1,    65,    -1,    -1,    -1,    -1,    -1,
     3385      71,    -1,    -1,   609,    75,    -1,    -1,    78,    79,    80,
     3386      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
     3387     723,    -1,    93,    -1,    -1,    -1,    -1,   379,  1160,    -1,
     3388      -1,    -1,    -1,    -1,   737,    -1,    -1,   108,    -1,   110,
     3389      -1,    -1,    -1,    -1,   650,   116,   117,   118,   119,   120,
     3390     121,   122,    -1,    -1,   757,    -1,    -1,    -1,    -1,    -1,
     3391      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3392    1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3393     686,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
     3394      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3395      25,    26,    27,    -1,    29,    30,    31,    -1,  1240,    -1,
     3396      -1,    -1,    -1,    38,    -1,   818,    -1,    -1,    -1,    -1,
     3397      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,    -1,
     3398      -1,    -1,    -1,    -1,    -1,   741,    -1,    -1,    -1,    -1,
     3399      -1,    66,    -1,    -1,    -1,   751,   752,   850,    73,    74,
     3400      -1,    -1,    77,    -1,    -1,    -1,    -1,  1289,  1290,   765,
     3401      -1,    -1,    -1,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
     3402      -1,    -1,    -1,    -1,    -1,    -1,   782,    -1,   784,    -1,
     3403      -1,    -1,   788,   108,    -1,   110,    -1,    -1,    -1,    -1,
     3404      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
     3405      -1,    -1,    -1,    -1,   556,   557,   558,   559,   560,   561,
     3406     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
     3407     572,   573,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3408      36,    37,    -1,    39,   937,    -1,    -1,    -1,    -1,    -1,
     3409      -1,    -1,    -1,    -1,    -1,    -1,    -1,   599,   854,    -1,
     3410      -1,    -1,    -1,    -1,    -1,   861,    -1,    -1,    -1,    65,
     3411     963,    -1,    -1,    -1,    -1,    71,    -1,    -1,   874,    75,
     3412     876,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
     3413      86,    -1,  1414,    -1,   890,    -1,    -1,    93,   991,    -1,
     3414      -1,   897,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3415      -1,    -1,   108,   909,   110,    -1,   912,    -1,    -1,   115,
     3416      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
     3417    1023,    -1,    -1,    -1,   930,    -1,    -1,    -1,    -1,    -1,
     3418      -1,  1034,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3419    1472,    -1,  1474,    -1,    -1,    -1,   698,    -1,    10,    11,
     3420      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3421      22,    23,    24,    25,    26,    27,    -1,    -1,   720,    -1,
     3422      -1,    -1,    -1,    -1,    -1,    -1,    38,  1509,    -1,  1511,
     3423      -1,   733,    10,    11,    12,    13,    14,    15,    16,    17,
     3424      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
     3425      -1,    29,    30,    31,    66,    -1,    -1,  1539,    -1,    -1,
     3426      38,    -1,  1115,  1019,    -1,    77,    -1,    -1,    -1,   153,
     3427     154,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,    -1,
     3428      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
     3429      -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,    77,
     3430      -1,    -1,    -1,   187,    82,    83,    -1,    -1,    -1,   811,
     3431     194,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1075,
     3432      -1,    -1,    -1,    -1,   826,    -1,  1082,    -1,    -1,    -1,
     3433     108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3434     118,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,  1202,
     3435      -1,    -1,    -1,    -1,    -1,  1111,    -1,    -1,    -1,    -1,
     3436    1116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1124,    -1,
     3437      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
     3438      75,    -1,   266,    78,    79,    80,    81,    82,    83,    -1,
     3439      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1155,
     3440      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3441      -1,  1167,    -1,   108,  1170,   110,  1172,   112,   113,    -1,
     3442      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
     3443    1186,  1187,    -1,    -1,    -1,    -1,    -1,    -1,   322,    -1,
     3444      -1,    -1,    -1,    -1,    -1,  1298,   330,   331,    -1,   333,
     3445     334,    -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,   343,
     3446      -1,    -1,    -1,   347,    -1,    -1,    -1,    -1,    -1,    -1,
     3447      -1,    -1,    -1,    -1,    -1,   977,    -1,    -1,    -1,  1235,
     3448     144,    -1,   366,    -1,    -1,   369,    -1,    -1,    -1,    -1,
     3449     154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3450      -1,    -1,   166,   167,    -1,    -1,  1008,    -1,    -1,    -1,
     3451      -1,    -1,   396,    -1,    -1,    -1,   400,    -1,  1020,     4,
     3452       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3453      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3454      25,    26,    -1,    -1,    29,    30,    31,   431,    -1,    -1,
     3455      -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,  1061,
     3456      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3457     454,    -1,    -1,   237,    -1,    -1,  1332,    -1,  1334,    -1,
     3458      -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
     3459      -1,  1347,    -1,  1349,    -1,    -1,    -1,    -1,   262,    -1,
     3460      -1,   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,    -1,
     3461      -1,  1367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3462      -1,    -1,    -1,    -1,   109,   110,    -1,  1383,  1384,    -1,
     3463      -1,  1133,    -1,   118,    -1,    -1,    -1,    -1,    -1,  1395,
     3464      -1,    -1,  1398,    -1,   528,    -1,    -1,   531,   532,    -1,
     3465      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3466      -1,    -1,    -1,    -1,  1420,    -1,    -1,    -1,    -1,    -1,
     3467      -1,    -1,    -1,  1429,    -1,  1177,  1432,    -1,  1434,  1435,
     3468    1436,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1191,
     3469    1192,    -1,    -1,   577,   578,    -1,    -1,    -1,    -1,    -1,
     3470      -1,  1554,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3471      -1,    -1,   596,   597,   378,   599,    -1,    -1,    -1,    -1,
     3472    1476,    -1,  1478,    -1,   608,  1481,   610,   611,    -1,    -1,
     3473      -1,    -1,    -1,   617,    -1,    -1,    -1,    -1,    -1,    -1,
     3474    1496,    -1,    -1,   627,   628,    -1,    -1,    -1,    -1,   633,
     3475      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   642,   643,
     3476     644,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3477      -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,    -1,
     3478      -1,    -1,   666,   667,    -1,    -1,   670,   671,    -1,    -1,
     3479      -1,    -1,    -1,   677,    -1,    -1,    -1,    -1,    -1,    -1,
     3480      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3481      -1,   695,   696,   697,    -1,   699,   480,    -1,    -1,   703,
     3482      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3483      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
     3484      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,
     3485      -1,   735,   736,    -1,    -1,   519,    -1,    -1,    -1,    -1,
     3486      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   532,    -1,
     3487      -1,    -1,    -1,    -1,    -1,   539,    -1,    66,   542,    -1,
     3488      -1,    -1,    -1,    -1,    73,    74,    -1,   771,   772,   553,
     3489     554,    -1,   776,   777,    -1,    -1,    -1,    -1,    -1,  1401,
     3490      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3491      -1,   575,    -1,    -1,    -1,    -1,  1418,    -1,    -1,    -1,
     3492      -1,   585,    -1,    -1,    -1,    -1,    -1,    -1,   592,   118,
     3493      -1,    -1,    -1,   597,   818,    -1,    -1,    -1,    -1,    -1,
     3494      -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,   833,
     3495     834,    -1,    -1,    -1,   838,    -1,   840,    -1,    -1,    -1,
     3496      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
     3497      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3498      -1,    -1,    -1,   647,    -1,    -1,    -1,    -1,    -1,  1491,
     3499    1492,    -1,   656,    -1,    -1,    -1,    -1,    -1,    -1,     3,
     3500       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3501      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3502      24,    25,    26,    -1,    -1,    29,    30,    31,    32,    -1,
     3503      -1,    35,   696,    -1,    38,    39,    -1,    -1,    -1,   923,
     3504      -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,    36,    37,
     3505      -1,    39,    -1,   937,    -1,    -1,    -1,    -1,    -1,    63,
     3506      -1,   945,    66,    -1,    68,    -1,    70,    71,    -1,    73,
     3507      74,    75,    -1,    -1,   958,   959,    -1,    65,    82,    83,
     3508      -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
     3509      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
     3510      -1,   985,    -1,    -1,   108,    93,   110,   991,   772,    -1,
     3511     774,    -1,    -1,    -1,   118,    -1,   780,    -1,    -1,    -1,
     3512     108,    -1,   110,   787,    -1,   113,  1010,  1011,    -1,   117,
     3513     118,   119,   120,   121,   122,    -1,  1020,    -1,    -1,    -1,
     3514      -1,    -1,  1026,  1027,    -1,  1029,  1030,  1031,    -1,    -1,
     3515      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1041,  1042,    -1,
     3516      -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,   832,    -1,
     3517     834,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3518      -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,    -1,    -1,
     3519      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3520      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3521      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,  1103,
     3522    1104,    -1,    -1,    -1,    -1,   889,    -1,    -1,    -1,   893,
     3523      -1,  1115,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
     3524       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3525      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3526      -1,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
     3527      37,    38,    39,    40,    -1,    42,  1160,    -1,    45,    46,
     3528      47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
     3529      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    66,
     3530      -1,    68,    -1,    70,    71,   969,    73,    74,    75,    -1,
     3531      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
     3532      -1,   985,   986,    -1,    -1,    -1,    93,    -1,   992,    -1,
     3533      -1,    -1,    36,    37,   998,    39,  1220,  1001,    -1,  1003,
     3534      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
     3535     117,   118,   119,   120,   121,   122,  1240,    -1,    -1,  1023,
     3536     127,    65,    -1,    -1,   131,    -1,    -1,    71,    -1,    -1,
     3537    1034,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
     3538      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
     3539      -1,    -1,  1056,    -1,  1058,    -1,    -1,    -1,    -1,    -1,
     3540      -1,    -1,    -1,    -1,   108,  1289,  1290,    -1,    -1,  1073,
     3541    1074,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
     3542      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3543    1094,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
     3544       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3545      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3546      25,    26,    -1,    -1,    29,    30,    31,    32,    -1,    -1,
     3547      35,    36,    37,    38,    39,    -1,    -1,  1141,    -1,    -1,
     3548      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3549      36,    37,    -1,    39,    -1,    -1,  1160,    -1,    -1,    -1,
     3550      65,    66,    -1,    68,    -1,    70,    71,    -1,    73,    74,
     3551      75,  1175,  1176,    78,    79,    80,    81,    82,    83,    65,
     3552      85,    86,    -1,    -1,    -1,    71,    -1,    -1,    93,    75,
     3553    1414,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
     3554      86,    -1,    -1,   108,    -1,   110,    -1,    93,    -1,    -1,
     3555      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
     3556      -1,    -1,   108,    -1,   110,    -1,   131,    -1,    -1,    -1,
     3557      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
     3558      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3559      -1,    -1,  1256,    -1,    -1,    -1,     3,     4,     5,     6,
     3560       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3561      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3562    1504,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
     3563      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3564      -1,    -1,    -1,    -1,    -1,  1529,  1530,    -1,    -1,    -1,
     3565      -1,    -1,    -1,  1317,    -1,  1319,    -1,    -1,    65,    66,
     3566      -1,    68,    -1,    70,    71,    -1,    73,    74,    75,    -1,
     3567    1554,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
     3568      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
     3569      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3570      -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
     3571     117,   118,   119,   120,   121,   122,    -1,    -1,     4,     5,
    24153572       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    24163573      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2417        0,     0,    26,    27,    28,    29,     0,     0,    30,     0,
    2418        0,    31,     0,   830,   413,  1239,     0,     0,     0,     0,
    2419        0,     0,     0,     0,     0,     0,     0,   622,     0,     0,
    2420        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
    2421        0,    35,     0,    36,     0,     0,    38,    39,     0,     0,
    2422      321,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2423        0,     0,     0,     0,     0,     0,  1140,  1141,     0,     0,
    2424        0,     0,   363,   381,     0,     0,     0,   281,   282,   996,
    2425      283,     0,  1150,    44,   769,     0,     0,     0,     0,     0,
    2426        0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
    2427        0,     0,     0,     0,  1166,     0,   284,     0,     0,     0,
    2428        0,     0,   285,     0,     0,  1181,   286,     0,     0,   287,
    2429      288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
    2430        0,     0,   341,     0,   293,   281,   282,   381,   283,  1199,
    2431        0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
    2432        0,   378,     0,   363,   996,   996,     0,     0,   296,   380,
    2433      298,   299,   300,   301,   284,     0,     0,     0,     0,     0,
    2434      285,     0,     0,     0,   286,  1231,     0,   287,   288,   289,
    2435      290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
    2436        0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
    2437        0,     0,   363,   363,     0,     0,     0,   294,     0,   378,
    2438        0,     0,     0,     0,     0,     0,   296,   734,   298,   299,
    2439      300,   301,     0,   996,     0,     0,     0,     0,     0,     0,
    2440        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2441        0,     0,   889,     0,     0,     0,     0,     0,     0,     0,
    2442        0,     0,     0,     0,     0,     0,     0,  1284,  1285,     0,
    2443        0,     0,     0,     0,     0,     1,     2,   205,     4,     5,
     3574      26,  1405,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
     3575      36,    37,    38,    39,    -1,    10,    11,    12,    13,    14,
     3576      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3577      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    65,
     3578      66,    -1,    68,    38,    70,    71,    -1,    73,    74,    75,
     3579      -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
     3580      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
     3581      -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
     3582      -1,    -1,   108,  1487,   110,    -1,    -1,    82,    83,   115,
     3583      -1,   117,   118,   119,   120,   121,   122,     4,     5,     6,
     3584       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     3585      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3586      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
     3587      37,    38,    39,    -1,    -1,  1539,    -1,    10,    11,    12,
     3588      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3589      23,    24,    25,    26,    27,    -1,    -1,    -1,    65,    66,
     3590      -1,    68,    -1,    70,    71,    38,    73,    74,    75,    -1,
     3591      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
     3592      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
     3593      -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
     3594      -1,   108,    -1,   110,    77,    -1,    -1,    -1,   115,    -1,
     3595     117,   118,   119,   120,   121,   122,     4,     5,     6,     7,
     3596       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
     3597      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
     3598      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,
     3599      38,    39,    -1,    10,    11,    12,    13,    14,    15,    16,
     3600      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3601      -1,    -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,
     3602      68,    38,    70,    71,    -1,    73,    74,    75,    -1,    -1,
     3603      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
     3604      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,
     3605      -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
     3606     108,    -1,   110,    -1,    -1,    -1,    -1,   115,    -1,   117,
     3607     118,   119,   120,   121,   122,     4,     5,     6,     7,     8,
     3608       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3609      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
     3610      29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
     3611      39,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     3612      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
     3613      -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,    68,
     3614      38,    70,    71,    -1,    73,    74,    75,    -1,    -1,    78,
     3615      79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
     3616      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,
     3617      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,   108,
     3618      -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
     3619     119,   120,   121,   122,     4,     5,     6,     7,     8,     9,
     3620      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3621      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
     3622      30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,
     3623      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3624      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
     3625      -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,    38,
     3626      70,    71,    -1,    73,    74,    75,    -1,    -1,    78,    79,
     3627      80,    81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,
     3628      -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,    -1,
     3629      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,
     3630     110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,
     3631     120,   121,   122,     4,     5,     6,     7,     8,     9,    10,
     3632      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3633      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
     3634      31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
     3635      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3636      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3637      -1,    -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,
     3638      71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
     3639      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
     3640      -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3641      -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
     3642      -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
     3643     121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
     3644      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3645      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
     3646      -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,    -1,
     3647      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3648      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3649      -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,    71,
     3650      -1,    73,    74,    75,    -1,    -1,    78,    79,    80,    81,
     3651      82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
     3652      -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3653      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
     3654      -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,
     3655     122,     3,     4,     5,     6,     7,     8,     9,    10,    11,
     3656      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3657      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
     3658      32,    -1,    -1,    35,    -1,    -1,    38,    39,    -1,    -1,
     3659      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3660      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3661      -1,    63,    -1,    -1,    66,    -1,    68,    -1,    70,    71,
     3662      -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
     3663      82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3664      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3665      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
     3666      -1,    -1,   114,    -1,    -1,    -1,   118,     3,     4,     5,
    24443667       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    24453668      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2446        0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
    2447      282,    31,  1062,  1063,     0,  1064,     0,     0,  1065,  1066,
    2448     1067,  1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,
    2449        0,     0,     0,  1074,  1075,     0,    33,   363,   284,    34,
    2450        0,    35,     0,    36,   649,     0,    38,    39,   286,   996,
    2451        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2452        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2453        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2454        0,   294,     0,  1076,     0,     0,   170,     0,     0,     0,
    2455      296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
    2456     1077,     0,     0,     0,  -129,     0,     0,     0,     0,     0,
    2457     1392,     0,   769,     0,     0,     0,     0,     0,     0,     0,
    2458        0,     0,     0,     0,     0,     0,     0,   413,     8,     9,
     3669      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
     3670      -1,    -1,    38,    10,    11,    12,    13,    14,    15,    16,
     3671      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3672      -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
     3673      66,    38,    68,    -1,    70,    71,    -1,    73,    74,    75,
     3674      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    -1,    -1,
     3675      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
     3676      -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
     3677      -1,    -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,
     3678      -1,    -1,   118,     3,     4,     5,     6,     7,     8,     9,
    24593679      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2460       20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
    2461       28,     0,   413,   413,     0,     0,     0,    31,     0,     0,
    2462        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2463        0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
    2464        0,     0,     0,     0,     0,    34,     0,     0,     0,     0,
    2465        0,     0,   206,    39,     0,     0,     0,     0,  1452,     0,
    2466        0,     0,     0,     0,     0,     1,     2,   205,     4,     5,
     3680      20,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
     3681      30,    31,    32,    -1,    -1,    35,    -1,    -1,    38,    -1,
     3682      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3683      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3684      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
     3685      70,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,     3,
     3686       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3687      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3688      24,    25,    26,    -1,    -1,    29,    30,    31,    32,    -1,
     3689     110,    35,    -1,    -1,    38,    -1,    -1,    -1,   118,    -1,
     3690      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3691      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3692      -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
     3693      74,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
     3694      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3695      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
     3696      31,    -1,    -1,    -1,    -1,    -1,   110,    38,    -1,    -1,
     3697      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
     3698      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3699      -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
     3700      -1,    -1,    73,    74,     4,     5,     6,     7,     8,     9,
     3701      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3702      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
     3703      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,   110,
     3704      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
     3705      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3706      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
     3707      70,    71,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
     3708      -1,    -1,    82,    83,    -1,    -1,    10,    11,    12,    13,
     3709      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3710      24,    25,    26,    -1,    -1,    29,    30,    31,   108,    -1,
     3711     110,    -1,    -1,    -1,    38,    -1,    -1,    -1,   118,     4,
     3712       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3713      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3714      25,    26,    66,    -1,    29,    30,    31,    71,    -1,    73,
     3715      74,    75,    -1,    38,    -1,    -1,    -1,    -1,    82,    83,
     3716      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3717      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3718      -1,    66,    -1,    68,   108,    70,   110,    -1,    73,    74,
     3719      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
     3720      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3721      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3722      -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
     3723      -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
     3724      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3725      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
     3726      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
     3727      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3728      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3729      -1,    -1,    29,    30,    31,    -1,    66,    -1,    68,    -1,
     3730      70,    38,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,
     3731      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3732      -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    66,
     3733      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
     3734     110,    -1,    -1,    -1,    -1,    82,    83,    -1,   118,     4,
     3735       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
     3736      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3737      25,    26,    -1,   110,    29,    30,    31,    -1,    -1,    -1,
     3738      -1,   118,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,
     3739      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3740      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3741      -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
     3742       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
     3743      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3744      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
     3745      -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,    -1,
     3746      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
     3747      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3748      -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
     3749      74,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3750      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3751      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
     3752      -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,
     3753      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
     3754      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3755      -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
     3756      73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
     3757      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3758      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
     3759      -1,    -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,
     3760      -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,
     3761      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3762      -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
     3763      -1,    73,    74,    10,    11,    12,    13,    14,    15,    16,
     3764      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3765      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
     3766      37,    38,    39,    -1,    -1,    -1,    -1,    -1,   110,    -1,
     3767      -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,
     3768      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    66,
     3769      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
     3770      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
     3771      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
     3772      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3773      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
     3774     117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
     3775      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3776      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
     3777      -1,    -1,    36,    37,    38,    39,    10,    11,    12,    13,
     3778      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3779      24,    25,    26,    27,    -1,    29,    30,    31,    -1,    -1,
     3780      -1,    65,    66,    -1,    38,    -1,    -1,    71,    -1,    73,
     3781      74,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
     3782      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
     3783      -1,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,
     3784      74,    75,    -1,    77,   108,    -1,   110,   111,    82,    83,
     3785      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,    10,
     3786      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3787      21,    22,    23,    24,    25,    26,   110,    -1,    29,    30,
     3788      31,    -1,    -1,    -1,   118,    36,    37,    38,    39,    10,
     3789      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3790      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
     3791      31,    -1,    -1,    -1,    65,    66,    -1,    38,    -1,    -1,
     3792      71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
     3793      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
     3794      -1,    -1,    93,    -1,    -1,    66,    -1,    -1,    -1,    -1,
     3795      71,    -1,    73,    74,    -1,    -1,    -1,   108,   109,   110,
     3796      -1,    82,    83,    -1,    -1,    -1,   117,   118,   119,   120,
     3797     121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
     3798      18,    19,    20,    21,    22,    23,    24,    25,    26,   110,
     3799      -1,    29,    30,    31,    -1,    -1,    -1,   118,    36,    37,
     3800      38,    39,    10,    11,    12,    13,    14,    15,    16,    17,
     3801      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
     3802      -1,    29,    30,    31,    -1,    -1,    -1,    65,    66,    -1,
     3803      38,    39,    -1,    71,    -1,    73,    74,    75,    -1,    -1,
     3804      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
     3805      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    66,    -1,
     3806      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    -1,
     3807     108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,
     3808     118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
     3809      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3810      25,    26,   110,    -1,    29,    30,    31,    -1,    -1,    -1,
     3811     118,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
     3812      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
     3813      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3814      65,    66,    29,    30,    31,    -1,    71,    -1,    73,    74,
     3815      75,    38,    -1,    78,    79,    80,    81,    82,    83,    -1,
     3816      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
     3817      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
     3818      -1,    -1,    -1,   108,    -1,   110,    73,    74,    -1,    -1,
     3819      -1,    -1,   117,   118,   119,   120,   121,   122,    10,    11,
     3820      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3821      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
     3822      -1,   108,    -1,   110,    36,    37,    38,    39,    -1,    -1,
     3823      -1,   118,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
     3824      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3825      24,    25,    26,    65,    66,    29,    30,    31,    -1,    71,
     3826      -1,    73,    74,    75,    38,    -1,    78,    79,    80,    81,
     3827      82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
     3828      -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3829      -1,    -1,    66,    -1,    -1,    -1,   108,    -1,   110,    73,
     3830      74,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,
     3831     122,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3832      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
     3833      29,    30,    31,    -1,   108,    -1,   110,    36,    37,    38,
     3834      39,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    10,
     3835      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
     3836      21,    22,    23,    24,    25,    26,    65,    66,    29,    30,
     3837      31,    -1,    71,    -1,    73,    74,    75,    38,    39,    78,
     3838      79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
     3839      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
     3840      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   108,
     3841      -1,   110,    73,    74,    -1,    -1,    -1,    -1,   117,   118,
     3842     119,   120,   121,   122,     3,     4,     5,     6,     7,     8,
     3843       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
     3844      19,    20,    21,    22,    23,    24,    25,    26,    -1,   110,
     3845      29,    30,    31,   114,    -1,    -1,    -1,   118,    -1,    38,
     3846      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3847      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
     3848      30,    31,    -1,    -1,    -1,    -1,    -1,    66,    38,    68,
     3849      -1,    70,    -1,    -1,    73,    74,    -1,    -1,    10,    11,
     3850      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
     3851      22,    23,    24,    25,    26,    -1,    66,    29,    30,    31,
     3852      -1,    71,    -1,    73,    74,    75,    38,    -1,    -1,    -1,
     3853      -1,    -1,    82,    83,   113,    -1,    10,    11,    12,    13,
     3854      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3855      24,    25,    26,    -1,    66,    29,    30,    31,   108,    71,
     3856     110,    73,    74,    75,    38,    -1,    -1,    -1,   118,    -1,
     3857      82,    83,    -1,    -1,    10,    11,    12,    13,    14,    15,
     3858      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3859      26,    -1,    66,    29,    30,    31,   108,    -1,   110,    73,
     3860      74,    -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,
     3861      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3862      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
     3863      66,    -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,
     3864      -1,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
     3865      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3866      25,    26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,
     3867      73,    74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,
     3868      -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
     3869      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3870      -1,    66,    29,    30,    31,    -1,    -1,   110,    73,    74,
     3871      -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,    13,
     3872      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     3873      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    66,
     3874      -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,
     3875      -1,    -1,    -1,   118,    10,    11,    12,    13,    14,    15,
     3876      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
     3877      26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,
     3878      74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,
     3879      -1,   118,    10,    11,    12,    13,    14,    15,    16,    17,
     3880      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
     3881      66,    29,    30,    31,    -1,    -1,   110,    73,    74,    -1,
     3882      38,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
     3883      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
     3884      25,    26,    -1,    -1,    29,    30,    31,    -1,    66,    -1,
     3885      -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,    -1,
     3886      -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
     3887      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     3888      -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,    74,
     3889      -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3890     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3891      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
     3892      -1,    -1,    -1,    -1,    -1,   110,    73,    74,    -1,    -1,
     3893      -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
     3894      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
     3895      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
     3896      30,    31,    -1,   110,    -1,    -1,    -1,    -1,    38,    -1,
     3897      -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3898      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3899      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
     3900      70,    -1,    -1,    73,    74,    36,    37,    -1,    39,    40,
     3901      -1,    42,    -1,    -1,    45,    46,    47,    48,    49,    50,
     3902      51,    52,    -1,    -1,    55,    56,    -1,    -1,    -1,    60,
     3903      61,    -1,    63,    -1,    65,    -1,    -1,    -1,    -1,   109,
     3904      71,    -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,
     3905      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
     3906      -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3907      -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
     3908      -1,    -1,   113,    -1,    -1,    -1,   117,   118,   119,   120,
     3909     121,   122,    -1,    -1,    -1,    -1,   127,    -1,    36,    37,
     3910     131,    39,    40,    -1,    42,    -1,    -1,    45,    46,    47,
     3911      48,    49,    50,    51,    52,    -1,    -1,    -1,    56,    -1,
     3912      -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
     3913      -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
     3914      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
     3915      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
     3916      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3917     108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,   117,
     3918     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
     3919      -1,    36,    37,   131,    39,    40,    -1,    42,    43,    44,
     3920      45,    46,    47,    48,    49,    50,    51,    52,    -1,    -1,
     3921      55,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
     3922      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
     3923      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
     3924      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
     3925      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3926      -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,
     3927      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
     3928      36,    37,   127,    39,    40,    -1,    42,    43,    44,    45,
     3929      46,    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,
     3930      56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
     3931      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,
     3932      -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
     3933      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
     3934      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3935      -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,
     3936      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    36,
     3937      37,   127,    39,    40,    -1,    42,    -1,    -1,    45,    46,
     3938      47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
     3939      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
     3940      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,
     3941      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
     3942      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
     3943      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3944      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
     3945     117,   118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,
     3946     127,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3947      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3948      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
     3949      -1,    -1,    -1,    -1,    -1,    38,    -1,    36,    37,    -1,
     3950      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3951      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
     3952      -1,    -1,    -1,    66,    -1,    68,    65,    70,    -1,    -1,
     3953      73,    74,    71,    -1,    -1,    -1,    75,    -1,    -1,    78,
     3954      79,    80,    81,    82,    83,    65,    85,    86,    -1,    -1,
     3955      -1,    71,    95,    -1,    93,    75,    -1,    -1,    78,    79,
     3956      80,    81,    82,    83,    -1,    85,    86,    -1,    -1,   108,
     3957      -1,   110,    -1,    93,    36,    37,    -1,    39,   117,   118,
     3958     119,   120,   121,   122,    -1,    -1,    -1,    -1,   108,    -1,
     3959     110,    -1,    -1,    36,    37,    -1,    39,   117,   118,   119,
     3960     120,   121,   122,    65,    -1,    -1,    -1,    -1,    -1,    71,
     3961      -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,    81,
     3962      82,    83,    65,    85,    86,    -1,    -1,    -1,    71,    -1,
     3963      -1,    93,    75,    -1,    -1,    78,    79,    80,    81,    82,
     3964      83,    -1,    85,    86,    -1,    -1,   108,    -1,   110,    -1,
     3965      93,    36,    37,    -1,    39,   117,   118,   119,   120,   121,
     3966     122,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,
     3967      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
     3968      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
     3969      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
     3970      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
     3971      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3972      -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,
     3973      -1,    -1,   117,   118,   119,   120,   121,   122,     4,     5,
    24673974       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    24683975      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2469        0,     0,    26,    27,    28,    29,     0,   629,    30,   281,
    2470      282,    31,   283,     8,     9,    10,    11,    12,    13,    14,
    2471       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2472       25,     0,     0,    26,    27,    28,     0,     0,   284,    34,
    2473        0,    35,    31,    36,   285,     0,    38,    39,   286,     0,
    2474     1518,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2475        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2476       34,     0,     0,     0,     0,   109,     0,    38,    39,     0,
    2477        0,   294,     0,  1076,     0,     0,    41,    42,     0,     0,
    2478      296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
    2479        0,     0,   321,     0,  -129,     1,     2,   205,     4,     5,
    2480        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2481       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2482        0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
    2483      282,    31,   283,     8,     9,    10,    11,    12,    13,    14,
    2484       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2485       25,     0,     0,    26,    27,    28,     0,     0,   284,    34,
    2486        0,    35,    31,    36,   285,     0,    38,    39,   286,     0,
    2487        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2488        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2489       34,     0,     0,     0,     0,     0,     0,   206,    39,     0,
    2490        0,   294,     0,    44,     0,     0,     0,     0,     0,     0,
    2491      296,   297,   298,   299,   300,   301,     2,   205,     4,     5,
    2492        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2493       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2494        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2495      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2496        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2497        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2498        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2499        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2500        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2501        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2502        0,   294,     0,   343,     0,     0,     0,     0,   781,     0,
    2503      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2504        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2505       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2506        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2507      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2508        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2509        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2510        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2511        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2512        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2513        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2514        0,   294,     0,   931,     0,     0,     0,     0,   781,     0,
    2515      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2516        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2517       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2518        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2519      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2520        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2521        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2522        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2523        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2524        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2525        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2526        0,   294,     0,   931,     0,     0,     0,     0,   781,     0,
    2527      296,   600,   298,   299,   300,   301,     2,   205,     4,     5,
    2528        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2529       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2530        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2531      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2532        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2533        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2534        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2535        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2536        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2537        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2538        0,   294,     0,   343,     0,     0,     0,     0,     0,     0,
    2539      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2540        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2541       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2542        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2543      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2544        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2545        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2546        0,    35,     0,    36,   285,     0,    38,    39,   286,     0,
    2547        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2548        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2549        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2550        0,   294,     0,   931,     0,     0,     0,     0,     0,     0,
    2551      296,   344,   298,   299,   300,   301,     2,   205,     4,     5,
    2552        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2553       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2554        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2555      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2556        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2557        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2558        0,    35,     0,    36,   285,     0,   206,    39,   286,     0,
    2559        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2560        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2561        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2562        0,   294,     0,  1020,     0,     0,     0,     0,     0,     0,
    2563      296,  1021,   298,   299,   300,   301,     2,   205,     4,     5,
    2564        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2565       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2566        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2567      282,    31,   283,     0,     0,     0,     0,     0,     0,     0,
    2568        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2569        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2570        0,    35,     0,    36,   285,     0,   206,    39,   286,     0,
    2571        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2572        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2573        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2574        0,   294,     0,   378,     0,     0,     0,     0,     0,     0,
    2575      296,   380,   298,   299,   300,   301,   204,     2,   205,     4,
     3976      26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3977      -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3978      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3979      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3980      66,    -1,    68,    -1,    70,    71,    -1,    73,    74,    75,
     3981      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,     3,     4,
    25763982       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    25773983      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2578       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2579        0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
    2580        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2581        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2582       34,     0,    35,     0,    36,     0,     0,   206,    39,     0,
    2583        2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    2584       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2585       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2586        0,     0,     0,     0,   207,    31,     0,     0,     0,     0,
    2587        0,     0,   270,     0,     0,     0,     0,     0,     0,     0,
    2588        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2589        0,     0,     0,    34,     0,    35,     0,    36,    37,     0,
    2590      206,    39,    40,     0,     0,     0,     0,     0,     0,    41,
    2591       42,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2592        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2593        0,     0,     0,     0,     0,    43,     0,   207,     0,     0,
    2594        0,     0,     0,     0,     0,   208,     2,   205,     4,     5,
    2595        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    2596       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2597        0,     0,    26,    27,    28,     0,     0,     0,     0,     0,
    2598        0,    31,     0,     0,     0,     0,     8,     9,    10,    11,
    2599       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2600       22,    23,    24,    25,     0,     0,    26,    27,    28,    34,
    2601        0,    35,     0,    36,     0,    31,    38,    39,     0,     2,
    2602      205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    2603       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2604       23,    24,    25,    34,     0,    26,    27,    28,   109,     0,
    2605       38,    39,  -402,   687,    31,     0,     0,     0,     0,    41,
    2606       42,   634,     0,     0,     0,     0,     0,     0,     0,     0,
    2607        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2608        0,     0,    34,     0,    35,     0,    36,    44,     0,    38,
    2609       39,     0,     0,     0,     0,   110,     0,     0,     0,     0,
    2610        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2611        0,  1371,     0,     0,     0,     0,     0,     0,     0,     0,
    2612        0,     0,     0,     0,     0,     0,   687,     0,     0,     0,
    2613        0,     0,     0,     0,   634,     2,   205,     4,     5,     6,
    2614        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2615       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2616        0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
    2617       31,     0,     0,     0,     0,     8,     9,    10,    11,    12,
    2618       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2619       23,    24,    25,  -294,     0,    26,    27,    28,    34,     0,
    2620       35,     0,    36,     0,    31,    38,    39,     0,     0,     0,
    2621        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2622        0,     0,     0,     0,     0,     0,     0,  1373,     0,     0,
    2623        0,     0,    34,     0,     0,     0,     0,    37,     0,   336,
    2624      337,    40,   687,  -294,     0,     0,     0,     0,    41,    42,
    2625      634,     2,   205,     4,     5,     6,     7,     8,     9,    10,
    2626       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2627       21,    22,    23,    24,    25,     0,   338,    26,    27,    28,
    2628        0,     0,     0,     0,   110,     0,    31,     0,     0,     0,
    2629        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2630        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2631        0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
    2632        0,   206,    39,     0,     2,   205,     4,     5,     6,     7,
    2633        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2634       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2635       26,    27,    28,     0,     0,     0,     0,     0,   269,    31,
    2636        0,     0,     0,     0,     0,     0,   629,     0,     0,     0,
    2637        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2638        0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
    2639        0,    36,     0,     0,    38,    39,     0,     2,   205,     4,
    2640        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2641       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2642       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2643        0,   687,    31,     0,     0,     0,     0,     0,     0,   634,
    2644        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2645        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2646       34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
    2647        2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    2648       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2649       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2650        0,     0,     0,     0,   599,    31,     0,     0,     0,     0,
    2651        0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
    2652        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2653        0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
    2654      206,    39,     8,     9,    10,    11,    12,    13,    14,    15,
    2655       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2656        0,     0,    26,    27,    28,     0,     0,     0,     0,   281,
    2657      282,    31,   283,     0,     0,     0,     0,   207,     0,     0,
    2658        0,     0,     0,     0,     0,   270,     0,     0,     0,     0,
    2659        0,     0,     0,     0,     0,     0,     0,     0,   284,    34,
    2660        0,     0,     0,     0,   285,     0,    38,    39,   286,     0,
    2661        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2662        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2663        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2664        0,   294,     0,   525,     0,     0,   170,     0,     0,     0,
    2665      296,   297,   298,   299,   300,   301,     8,     9,    10,    11,
    2666       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2667       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2668        0,     0,     0,   281,   282,    31,   283,     8,     9,    10,
    2669       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2670       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2671        0,     0,   284,    34,     0,     0,    31,     0,   285,     0,
    2672       38,    39,   286,     0,     0,   287,   288,   289,   290,    41,
    2673       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2674      293,     0,     0,     0,    34,     0,     0,     0,     0,    37,
    2675        0,   336,   337,    40,     0,   294,     0,   599,    -3,     0,
    2676       41,    42,     0,     0,   296,   600,   298,   299,   300,   301,
    2677        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2678       18,    19,    20,    21,    22,    23,    24,    25,   338,     0,
    2679       26,    27,    28,     0,     0,     0,   110,   281,   282,    31,
    2680      283,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2681       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2682        0,    26,    27,    28,     0,     0,   284,    34,     0,     0,
    2683       31,   453,   649,     0,    38,    39,   286,     0,     0,   287,
    2684      288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
    2685        0,     0,     0,     0,   293,     0,     0,     0,    34,     0,
    2686        0,     0,     0,     0,     0,    38,    39,     0,     0,   294,
    2687      -35,   766,     0,     0,     0,     0,     0,     0,   296,   297,
    2688      298,   299,   300,   301,     8,     9,    10,    11,    12,    13,
    2689       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2690       24,    25,   454,     0,    26,    27,    28,     0,     0,     0,
    2691      110,   281,   282,    31,   283,     0,     0,     0,     0,     0,
    2692        0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2693       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2694      284,    34,    26,    27,    28,     0,   285,     0,    38,    39,
    2695      286,    31,     0,   287,   288,   289,   290,    41,    42,     0,
    2696      291,   292,     0,     0,     0,     0,     0,     0,   293,     0,
    2697        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
    2698        0,     0,     0,   294,     0,   295,    38,    39,     0,     0,
    2699        0,     0,   296,   297,   298,   299,   300,   301,     8,     9,
    2700       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2701       20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
    2702       28,   643,     0,   338,     0,   281,   282,    31,   283,     0,
    2703        0,   110,     0,     0,     0,     0,     8,     9,    10,    11,
    2704       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2705       22,    23,    24,    25,   284,    34,    26,    27,    28,     0,
    2706      285,     0,    38,    39,   286,    31,     0,   287,   288,   289,
    2707      290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
    2708        0,     0,   293,     0,     0,     0,     0,     0,     0,     0,
    2709        0,     0,     0,    34,     0,     0,     0,   294,     0,   156,
    2710       38,    39,     0,     0,     0,     0,   296,   297,   298,   299,
    2711      300,   301,     8,     9,    10,    11,    12,    13,    14,    15,
    2712       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2713        0,     0,    26,    27,    28,   643,     0,   338,     0,   281,
    2714      282,    31,   283,     0,     0,   634,     0,     0,     0,     0,
    2715        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2716       18,    19,    20,    21,    22,    23,    24,    25,   284,    34,
    2717       26,    27,    28,     0,   285,     0,    38,    39,   286,    31,
    2718        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2719        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2720        0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
    2721        0,   294,     0,   599,    38,    39,     0,     0,     0,     0,
    2722      296,   600,   298,   299,   300,   301,     8,     9,    10,    11,
    2723       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2724       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2725        0,   256,     0,   281,   282,    31,   283,     0,     0,   110,
    2726        0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
    2727       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2728       24,    25,   284,    34,    26,    27,    28,     0,   285,     0,
    2729       38,    39,   286,    31,     0,   287,   288,   289,   290,    41,
    2730       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2731      293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2732        0,    34,     0,     0,     0,   294,     0,   378,    38,    39,
    2733        0,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2734      474,     2,   205,     4,     5,     6,     7,     8,     9,    10,
    2735       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2736       21,    22,    23,    24,    25,   156,     0,    26,    27,    28,
    2737        0,     0,     0,   110,     0,     0,    31,     0,     0,     0,
    2738        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    2739       18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
    2740       26,    27,    28,     0,    34,     0,    35,     0,    36,    31,
    2741        0,    38,    39,     0,     0,     0,     0,     0,     8,     9,
    2742       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2743       20,    21,    22,    23,    24,    25,     0,    34,    26,    27,
    2744       28,     0,    37,     0,    38,    39,    40,    31,     0,     0,
    2745        0,    -3,     0,    41,    42,     0,     8,     9,    10,    11,
    2746       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2747       22,    23,    24,    25,     0,    34,    26,    27,    28,    43,
    2748       37,   156,    38,    39,    40,    31,     0,     0,     0,    45,
    2749        0,    41,    42,     0,     8,     9,    10,    11,    12,    13,
    2750       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2751       24,    25,     0,    34,    26,    27,    28,    43,    37,    44,
    2752      206,    39,    40,    31,     0,     0,     0,    45,     0,    41,
    2753       42,     0,     8,     9,    10,    11,    12,    13,    14,    15,
    2754       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    2755     -294,    34,    26,    27,    28,    43,    37,   269,   336,   337,
    2756       40,    31,     0,     0,     0,   208,     0,    41,    42,     0,
    2757        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2758        0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
    2759        0,     0,     0,   643,     0,   338,    38,    39,     0,     0,
    2760     -294,     0,     0,   634,     0,     8,     9,    10,    11,    12,
    2761       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2762       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2763        0,   643,     0,   338,    31,   453,     0,     0,     0,     0,
    2764        0,   634,     0,     8,     9,    10,    11,    12,    13,    14,
    2765       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2766       25,  -294,    34,    26,    27,    28,     0,     0,     0,    38,
    2767       39,     0,    31,     8,     9,    10,    11,    12,    13,    14,
    2768       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2769       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2770       34,     0,    31,   453,     0,     0,   454,    38,    39,     0,
    2771      711,  -294,     0,     0,   110,     0,     0,     0,     0,     0,
    2772        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2773       34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
    2774        0,     0,     0,     0,   338,     0,     0,     0,     0,     0,
    2775        0,     0,   110,     0,     0,     8,     9,    10,    11,    12,
    2776       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2777       23,    24,    25,     0,   454,    26,    27,    28,  1109,     0,
    2778        0,     0,   110,     0,    31,   453,     8,     9,    10,    11,
    2779       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2780       22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
    2781        0,     0,    34,     0,     0,    31,     0,     0,     0,    38,
    2782       39,     0,     0,     0,     8,     9,    10,    11,    12,    13,
    2783       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2784       24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
    2785      206,    39,     0,    31,     0,     0,   454,     0,     0,     0,
    2786     1236,     0,     0,     0,   110,     0,     0,     0,     0,     0,
    2787        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2788        0,    34,     0,     0,     0,     0,     0,   269,    38,    39,
    2789        0,     0,     0,     0,     0,   270,     0,     8,     9,    10,
    2790       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2791       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2792        0,     0,     0,     0,     0,   256,    31,     0,     0,     0,
    2793        0,     0,     0,   634,     0,     8,     9,    10,    11,    12,
    2794       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2795       23,    24,    25,     0,    34,    26,    27,    28,     0,     0,
    2796        0,    38,    39,     0,    31,     8,     9,    10,    11,    12,
    2797       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2798       23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
    2799        0,     0,    34,     0,    31,     0,     0,     0,   338,    38,
    2800       39,     0,     0,     0,     0,     0,   634,     0,     0,     0,
    2801        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2802        0,     0,    34,     0,     0,     0,     0,     0,     0,   206,
    2803       39,     0,     0,     0,     0,     0,   454,     0,     0,     0,
    2804        0,     0,     0,     0,   110,     0,     0,     8,     9,    10,
    2805       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2806       21,    22,    23,    24,    25,     0,   269,    26,    27,    28,
    2807        0,     0,     0,     0,   629,     0,    31,     8,     9,    10,
    2808       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
    2809       21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
    2810        0,     0,     0,     0,    34,     0,    31,     0,     0,     0,
    2811        0,    38,    39,     0,     0,     8,     9,    10,    11,    12,
    2812       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    2813       23,    24,    25,     0,    34,    26,    27,    28,     0,     0,
    2814        0,    38,    39,     0,    31,     0,     0,     0,   599,     0,
    2815        0,     0,     0,     0,     0,     0,   634,     0,     0,     0,
    2816        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2817        0,     0,    34,     0,     0,     0,     0,     0,   338,    38,
    2818       39,     0,     0,     0,     0,     0,   110,     2,   205,     4,
    2819        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2820       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2821       25,     0,     0,    26,    27,    28,    44,     0,     0,     0,
    2822        0,     0,    31,     0,   110,     0,     0,     0,     0,     0,
    2823        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2824        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2825       34,     0,    35,     0,    36,     0,     0,    38,    39,   281,
    2826      282,     0,   283,  1063,     0,  1064,     0,     0,  1065,  1066,
    2827     1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1551,  1073,
    2828        0,     0,     0,  1074,  1075,     0,    33,     0,   284,     0,
    2829        0,     0,     0,  -415,   649,     0,     0,     0,   286,     0,
    2830        0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
    2831        0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
    2832        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2833        0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
    2834      296,   380,   298,   299,   300,   301,     0,     0,     0,     0,
    2835     1077,     0,   281,   282,  -129,   283,  1063,     0,  1064,     0,
    2836        0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,     0,
    2837        0,     0,  1073,     0,     0,     0,  1074,  1075,     0,    33,
    2838        0,   284,     0,     0,     0,     0,     0,   649,     0,     0,
    2839        0,   286,     0,     0,   287,   288,   289,   290,    41,    42,
    2840        0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
    2841        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2842        0,     0,     0,     0,   294,     0,   378,     0,     0,   170,
    2843        0,     0,     0,   296,   380,   298,   299,   300,   301,     0,
    2844        0,     0,     0,  1077,     0,     0,     0,  -129,     2,   205,
    2845        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    2846       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2847       24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
    2848        0,     0,     0,    31,     0,   281,   282,     0,   283,  1063,
    2849        0,  1064,  1421,  1422,  1065,  1066,  1067,  1068,  1069,  1070,
    2850     1071,  1072,     0,     0,  1551,  1073,     0,     0,     0,  1074,
    2851     1075,    34,    33,    35,   284,    36,     0,     0,    38,    39,
    2852      649,     0,     0,     0,   286,     0,     0,   287,   288,   289,
    2853      290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
    2854     1330,     0,   293,     0,     0,     0,     0,     0,     0,     0,
    2855        0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
    2856        0,     0,   170,     0,     0,     0,   296,   380,   298,   299,
    2857      300,   301,     0,     0,   281,   282,  1077,   283,  1063,     0,
    2858     1064,  1421,  1422,  1065,  1066,  1067,  1068,  1069,  1070,  1071,
    2859     1072,     0,     0,     0,  1073,     0,     0,     0,  1074,  1075,
    2860        0,    33,     0,   284,     0,     0,     0,     0,     0,   649,
    2861        0,     0,     0,   286,     0,     0,   287,   288,   289,   290,
    2862       41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
    2863        0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
    2864        0,     0,     0,     0,     0,     0,   294,     0,   378,     0,
    2865        0,   170,     0,     0,     0,   296,   380,   298,   299,   300,
    2866      301,     0,     0,   281,   282,  1077,   283,  1063,     0,  1064,
    2867        0,     0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,
    2868        0,     0,     0,  1073,     0,     0,     0,  1074,  1075,     0,
    2869       33,     0,   284,     0,     0,     0,     0,     0,   649,     0,
    2870        0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
    2871       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2872      293,   281,   282,     0,   283,     0,     0,     0,     0,     0,
    2873        0,     0,     0,     0,     0,   294,     0,   378,     0,     0,
    2874      170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2875      284,     0,     0,     0,  1077,     0,   649,     0,     0,     0,
    2876      286,     0,     0,   287,   288,   289,   290,    41,    42,     0,
    2877      291,   292,     0,     0,     0,     0,     0,     0,   293,   281,
    2878      282,     0,   283,     0,     0,     0,     0,     0,     0,     0,
    2879        0,     0,     0,   294,     0,   785,     0,     0,   281,   282,
    2880        0,   283,   296,   380,   298,   299,   300,   301,   284,     0,
    2881        0,     0,     0,     0,   285,     0,     0,     0,   286,     0,
    2882        0,   287,   288,   289,   290,    41,    42,   284,   291,   292,
    2883        0,     0,     0,   285,     0,     0,   293,   286,     0,     0,
    2884      287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
    2885        0,   294,     0,   378,     0,   293,   281,   282,     0,   283,
    2886      296,   827,   298,   299,   300,   301,     0,     0,     0,     0,
    2887      513,     0,     0,     0,     0,   281,   282,     0,   283,   296,
    2888      380,   298,   299,   300,   301,   284,     0,     0,     0,     0,
    2889        0,   285,     0,     0,     0,   286,     0,     0,   287,   288,
    2890      289,   290,    41,    42,   284,   291,   292,     0,     0,     0,
    2891      285,     0,     0,   293,   286,     0,     0,   287,   288,   289,
    2892      290,    41,    42,     0,   291,   292,     0,     0,   294,     0,
    2893        0,     0,   293,   281,   282,     0,   283,   296,   380,   298,
    2894      299,   300,   301,     0,     0,     0,     0,   518,     0,     0,
    2895        0,     0,     0,     0,     0,     0,   296,   380,   298,   299,
    2896      300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
    2897        0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
    2898       42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
    2899      293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2900        0,     0,     0,     0,     0,   521,     0,     0,     0,     0,
    2901        0,     0,     0,     0,   296,   380,   298,   299,   300,   301,
    2902        2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
    2903       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    2904       22,    23,    24,    25,     0,     0,     0,     0,     0,     0,
    2905        0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
    2906        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2907        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2908        0,     0,     0,    34,     0,    35,     0,    36,    37,     0,
    2909      173,   174,    40,     0,     0,     0,     0,     0,     0,    41,
    2910       42,   204,     2,   205,     4,     5,     6,     7,     8,     9,
    2911       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    2912       20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
    2913       28,     0,     0,     0,     0,     0,     0,    31,     0,     0,
    2914        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2915        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2916        0,     0,     0,     0,     0,    34,     0,    35,     0,    36,
    2917        0,     0,   206,    39,   474,     2,   205,     4,     5,     6,
    2918        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    2919       17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
    2920        0,    26,    27,    28,     0,     0,     0,     0,     0,     0,
    2921       31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2922        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2923        0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
    2924       35,     0,    36,     0,     0,    38,    39,     2,   205,     4,
    2925        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    2926       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    2927       25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
    2928        0,     0,    31,     0,     8,     9,    10,    11,    12,    13,
    2929       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    2930       24,    25,     0,     0,    26,    27,    28,   492,   493,   494,
    2931       34,     0,    35,    31,    36,     0,     0,   206,    39,     0,
    2932        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2933        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    2934        0,    34,     0,     0,     0,     0,     0,     0,    38,    39
    2935 };
    2936 
    2937 #define yypact_value_is_default(yystate) \
    2938   ((yystate) == (-1332))
    2939 
    2940 #define yytable_value_is_error(yytable_value) \
    2941   YYID (0)
    2942 
    2943 static const yytype_int16 yycheck[] =
    2944 {
    2945        0,     1,     0,   203,   184,   184,   520,   698,   238,    43,
    2946      115,   184,     1,   698,    43,    43,   543,   185,   629,     0,
    2947      104,   218,   184,   280,   185,   456,   455,   698,   348,    29,
    2948       30,   184,    32,   184,    32,  1062,   184,   902,   167,   168,
    2949      609,   348,     1,    43,   656,    45,   278,    45,  1043,   611,
    2950     1006,    32,  1042,  1043,    32,    55,   497,     0,   759,   611,
    2951       28,    61,   612,    61,    64,   609,    64,    67,   618,    67,
    2952      154,   609,   499,   579,  1340,   718,   503,   999,    67,   609,
    2953      609,    81,    82,   780,   264,   264,   777,    51,   186,    32,
    2954     1421,   264,   777,   609,    82,   200,  1425,   265,   344,  1055,
    2955      529,    39,   264,   902,   265,   105,   777,     0,   108,    39,
    2956       78,   264,   417,   264,   609,   115,   264,     0,    43,    72,
    2957       43,    45,   363,   643,   644,   645,   367,   489,    44,    45,
    2958       83,    84,   437,    64,     0,    43,    82,    39,   227,    32,
    2959      445,    39,   662,    44,    45,   109,   146,    95,   146,    32,
    2960      184,     0,     1,    39,   154,   184,   184,   246,   111,   159,
    2961       63,   159,   260,   261,  1495,   111,    32,    44,    45,  1477,
    2962      109,    64,   613,   111,    85,   495,   617,  1443,   109,   109,
    2963       30,   111,   130,    32,   184,   185,   110,   185,     4,     5,
    2964        6,     7,     8,     9,  1523,   109,    39,   638,   114,  1528,
    2965      200,   642,   113,   255,  1512,    39,  1514,   109,   208,   111,
    2966      208,   294,   409,   114,   744,    64,   736,   217,    67,  1548,
    2967      220,   145,   220,   109,   902,   111,  1555,   227,   744,   132,
    2968      264,    81,    82,    96,    82,   264,   264,   405,   115,    11,
    2969      644,   645,   242,   489,   405,    82,   246,   109,  1243,   744,
    2970      250,   251,   250,    69,   511,    71,   112,   341,   662,   184,
    2971      123,   184,   110,  1062,   264,   265,   109,   265,   111,   250,
    2972      839,   271,   250,     0,     1,   109,   184,   111,   278,  1306,
    2973      117,   643,   644,   645,   208,   928,   370,   455,     0,   851,
    2974      395,   841,   251,   293,   455,   839,   114,   107,  1293,   851,
    2975      662,   839,  1292,  1293,   611,    32,     3,   250,   828,   839,
    2976      839,    82,  1009,   819,   238,   110,   132,   116,   423,   487,
    2977       32,   131,   117,   839,   429,   116,   487,   220,   328,   116,
    2978      328,    43,   736,    45,   293,   697,    82,  1259,   109,   951,
    2979       67,   132,   425,   426,   839,   132,   270,   347,   348,    61,
    2980      425,   426,    64,   116,   600,    67,   597,   250,   699,    55,
    2981       90,    91,  1227,   109,   364,   417,    72,   250,   368,   132,
    2982     1071,   220,   255,   297,   736,  1074,  1075,    83,    84,   379,
    2983      721,   109,   110,   629,   250,   437,   691,  1065,   634,   255,
    2984      959,    96,   242,   445,   109,   395,   126,   127,   960,   640,
    2985      110,   250,    72,   109,     3,   405,   116,   405,    82,   105,
    2986     1021,   773,   108,    83,    84,   959,   131,   116,   123,   676,
    2987      344,   959,  1417,   423,   828,   109,   501,  1417,  1227,   429,
    2988      513,   431,   873,    68,   146,   518,   110,    72,   521,  1466,
    2989       75,  1528,    77,   117,  1143,   520,  1473,   159,   532,    84,
    2990     1528,   697,    72,  1409,  1410,   455,   349,   121,   122,    72,
    2991      460,  1548,   132,    83,    84,   109,   828,   111,  1555,   116,
    2992       83,    84,   184,   185,   474,   119,   110,  1555,   116,   479,
    2993     1030,  1031,   699,   117,   112,   132,     0,   487,   116,   487,
    2994     1004,   491,   575,   491,   132,   495,   208,   131,   498,  1526,
    2995      500,   425,   426,     0,   721,   762,   119,  1306,   220,   938,
    2996      491,   586,   132,    88,    89,   474,   947,   946,   698,   698,
    2997      520,   217,   131,   250,   965,   698,   758,   773,   657,   379,
    2998     1142,   851,   700,    80,   417,   109,   698,   537,   250,   700,
    2999      540,   968,   542,   543,   851,   698,    72,   698,   491,  1227,
    3000      698,   417,   264,   116,   437,  1117,   109,    83,    84,   664,
    3001      110,   520,   445,   992,   111,   109,   113,   117,   666,   132,
    3002      117,   437,   115,   116,   110,   271,   211,   501,   537,   445,
    3003      116,   540,   278,   542,   543,   111,   109,   480,   131,   830,
    3004      590,   116,     3,   834,   109,   812,   520,   597,   491,    10,
    3005       11,    12,    13,    14,   109,  1306,   489,   132,   491,   609,
    3006      460,   611,   696,   116,    53,    72,   328,   598,   116,     4,
    3007        5,     6,     7,     8,     9,   491,    83,    84,    39,   132,
    3008      630,   590,   110,   116,   132,   119,   348,   978,   116,   691,
    3009      124,   125,   491,   112,   964,  1323,   646,   116,   498,   132,
    3010      500,   347,   652,   116,   111,   110,    67,    96,     0,     1,
    3011     1498,   661,   586,   663,   664,   665,  1504,  1466,   364,   132,
    3012       80,  1102,   368,   890,  1473,   129,   600,   131,   116,   116,
    3013     1042,   733,  1383,   924,    69,    72,    71,  1525,   772,   110,
    3014       32,   888,  1530,   405,   132,   132,    83,    84,   698,  1377,
    3015      700,   111,  1380,   113,   663,   629,   665,   117,   112,   109,
    3016      634,   111,   909,   713,   116,   110,   351,   112,   353,   719,
    3017      110,   116,    64,   723,   111,    67,   116,  1526,   110,   110,
    3018      132,   731,    45,   110,   116,   116,   131,   132,   631,   109,
    3019      970,   111,   110,   455,   744,   745,   112,  1425,    61,   119,
    3020      116,    64,  1430,   192,    67,   112,    72,   110,   758,   116,
    3021       76,   978,    72,   116,   491,   894,    76,    83,    84,  1470,
    3022      938,  1472,   731,    83,    84,  1021,   215,   938,   946,   491,
    3023      112,   110,  1460,   495,   116,   946,   225,    10,    11,    12,
    3024       13,    14,  1009,   109,  1135,  1322,    92,    93,   110,   109,
    3025     1162,   111,   652,   119,   116,   110,   441,    72,   691,   119,
    3026      109,   116,   111,   155,   697,   109,    39,   111,    83,    84,
    3027       10,    11,    12,    13,    14,   691,  1527,   109,   109,   111,
    3028      513,   724,   515,   146,  1034,   518,  1133,   119,   521,   839,
    3029     1137,  1532,  1059,   110,    67,   738,   159,  1532,   109,    39,
    3030      733,   851,  1193,  1194,   835,   294,   115,   116,   110,   110,
    3031      110,  1532,  1103,   713,   116,   116,   116,   733,  1546,   719,
    3032      116,   117,   185,   723,  1552,   115,  1133,    67,   220,   109,
    3033     1137,  1138,   109,   110,   111,  1563,   109,   132,   111,  1567,
    3034      773,   703,   110,   705,   894,   208,   119,   609,   116,   611,
    3035       72,   901,   902,   110,    76,   110,   111,   220,   250,   116,
    3036       64,    83,    84,   110,     1,   109,  1162,   111,  1135,   116,
    3037       72,   902,    74,    75,   924,    85,    86,    87,  1057,   109,
    3038     1292,    83,    84,    72,   630,    74,    75,   109,   938,   832,
    3039       58,    59,   110,   902,    83,    84,   946,   119,   116,   109,
    3040      646,   111,   109,   113,   114,   110,   112,   109,    45,   132,
    3041      110,   116,   114,   110,   964,   661,   116,   115,   116,   116,
    3042      109,   114,   109,   680,   111,   114,  1193,  1194,   114,    72,
    3043      969,    74,    75,    76,   984,   109,   698,   111,   700,   114,
    3044       83,    84,   109,   993,   111,   109,  1253,  1243,   109,   110,
    3045      111,  1001,   132,   442,  1004,   109,  1006,   111,    82,   902,
    3046       72,   132,    74,    75,   109,   328,   109,   104,   111,   902,
    3047     1125,    83,    84,   110,   117,   984,   119,    72,   109,    74,
    3048       75,    82,   744,   745,   116,   117,   902,   476,    83,    84,
    3049      112,   109,  1001,   111,   894,  1004,   970,  1006,   109,   110,
    3050      111,   901,   114,   902,   120,  1055,   116,   117,   145,   109,
    3051      110,   111,   758,  1404,   128,  1065,   111,   154,  1068,  1069,
    3052     1070,    58,    59,    60,   513,  1265,  1266,  1267,  1507,   518,
    3053     1421,  1062,   521,    72,  1341,    74,    75,    76,  1345,   129,
    3054      432,    94,   405,  1093,    83,    84,  1055,  1021,    44,    45,
    3055       10,    11,    12,    13,    14,   131,  1065,   111,   815,  1068,
    3056     1069,  1070,   564,   565,   566,   567,   109,   204,   825,   109,
    3057      969,   208,   110,  1206,  1207,  1125,  1209,   839,  1557,    39,
    3058      112,  1024,  1215,   840,    72,  1218,    74,    75,  1222,   851,
    3059      560,   561,   112,   993,   110,    83,    84,   562,   563,   491,
    3060      110,   238,   239,  1494,  1495,   110,    72,    67,    74,    75,
    3061       76,   110,    72,   110,    74,    75,    76,    83,    84,  1062,
    3062      568,   569,   109,    83,    84,   902,   112,   111,   131,  1062,
    3063      112,   114,   109,   270,   114,   116,   273,  1404,   114,   112,
    3064     1447,   533,   110,   109,    45,   111,  1062,   110,   112,   109,
    3065     1200,   111,   117,   119,  1421,   112,   112,   294,   112,   119,
    3066      297,    29,   117,  1062,   117,   116,  1205,   110,   110,   114,
    3067      117,   112,  1222,   110,   132,   115,   938,  1227,     3,   115,
    3068      115,   109,   116,   110,   946,    10,    11,    12,    13,    14,
    3069      679,   110,   969,  1093,   116,   110,  1227,   117,   110,   688,
    3070      110,   110,   964,   692,   341,   116,   598,   344,  1247,   110,
    3071      110,   110,     3,   110,    39,  1265,  1266,  1267,  1227,    10,
    3072       11,    12,    13,    14,   110,   110,   363,  1494,  1495,  1162,
    3073      367,   110,   110,   370,    10,    11,    12,    13,    14,   110,
    3074      110,   110,    67,   110,   110,  1400,  1379,   110,    39,    29,
    3075      115,   643,   644,   645,   131,   112,  1265,  1266,  1267,   110,
    3076      110,  1204,  1542,    39,   110,   110,   114,   116,   112,   112,
    3077      662,   110,  1322,  1323,   110,  1306,    67,   110,   116,   110,
    3078      117,   116,  1039,  1040,  1227,  1062,   116,   116,   425,   426,
    3079      112,    67,   116,   110,  1227,   110,   112,    85,    86,    87,
    3080     1200,  1340,  1532,  1532,   109,  1204,  1205,   208,   109,  1532,
    3081     1243,  1227,   109,  1322,  1323,  1533,   453,   109,   112,   456,
    3082     1532,   109,  1533,   111,   109,   113,   114,  1377,  1227,  1532,
    3083     1380,  1532,   132,   109,  1532,   111,   117,   474,   239,  1557,
    3084     1097,  1098,   115,   119,   736,   110,  1557,   110,  1247,  1399,
    3085     1400,   115,  1507,   110,   129,   115,   114,   112,  1301,  1409,
    3086     1410,   132,   499,  1306,   501,   110,   503,   116,  1377,   270,
    3087      112,  1380,   116,  1306,   112,  1425,   513,   110,   515,   110,
    3088     1430,   518,   110,   520,   521,   112,   471,   112,   112,   110,
    3089     1306,    47,   112,   294,   112,   532,   297,   112,  1448,   115,
    3090     1409,  1410,  1301,   132,  1443,   110,   132,  1306,   115,   132,
    3091     1460,   117,   110,   132,   115,   132,  1425,   112,   112,   112,
    3092      112,  1430,    72,   112,    74,    75,    76,   112,  1205,   112,
    3093      112,   110,   110,    83,    84,  1466,   828,   926,   112,  1448,
    3094      112,  1340,  1473,   835,     0,     1,   109,   109,  1532,   586,
    3095     1227,  1460,   109,  1532,  1532,    60,   110,  1507,  1508,   109,
    3096      597,   111,    55,   600,   110,   114,   132,  1517,   112,   119,
    3097     1247,   112,   117,  1523,   110,   112,    32,   110,  1528,    96,
    3098       96,   109,  1532,  1533,   109,  1533,   115,   110,   112,    45,
    3099      132,   110,   629,    42,   116,  1526,  1546,   634,  1548,  1508,
    3100      110,   110,  1552,   640,   117,  1555,   132,  1557,  1517,  1557,
    3101      902,    67,   105,  1563,  1523,   108,  1273,  1567,   132,  1528,
    3102      110,   110,    96,  1466,  1281,  1282,  1283,    96,   132,  1306,
    3103     1473,   110,   110,  1466,   132,   117,   132,  1546,   110,  1548,
    3104     1473,   112,   110,  1552,  1443,   115,  1555,   132,   104,   112,
    3105     1466,   109,   453,   115,  1563,   456,   132,  1473,  1567,   696,
    3106      115,   154,   110,  1340,    64,   110,   132,  1466,  1542,   110,
    3107      110,  1077,  1329,   571,  1473,   570,  1227,   969,   572,    64,
    3108       64,   718,   573,  1526,  1073,   574,  1495,  1385,  1567,    74,
    3109      146,  1316,  1138,  1526,   986,   680,  1473,    81,   154,   155,
    3110     1345,  1093,   705,   946,     4,     5,     6,     7,     8,     9,
    3111     1526,   748,   513,   453,   515,   471,   116,   518,   723,   453,
    3112      521,   948,   993,   590,   217,   894,   966,  1526,   658,   185,
    3113     1247,   116,   116,    33,   578,   772,   491,   758,    10,    11,
    3114       12,    13,    14,    -1,   200,   578,   748,   203,   204,   578,
    3115     1042,  1043,   208,  1399,    -1,    -1,    -1,    -1,    -1,   159,
    3116       -1,    -1,    -1,    -1,    -1,    -1,  1443,    39,    -1,    69,
    3117     1062,    71,    -1,   229,   159,   159,    -1,   233,   271,   235,
    3118       72,    -1,    74,    75,    76,   278,    -1,    -1,   244,  1466,
    3119       -1,    83,    84,   830,   250,    67,  1473,   834,    -1,   255,
    3120       72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   265,
    3121       -1,    83,    84,    -1,    -1,    -1,    -1,   273,   283,    -1,
    3122      220,    -1,    -1,    -1,    -1,    -1,    26,    27,    28,    -1,
    3123      815,   296,   297,    -1,    -1,   220,   220,   109,    -1,   111,
    3124      825,    -1,    -1,   308,    -1,    -1,    -1,   119,    -1,  1526,
    3125       -1,    -1,    -1,    -1,   347,   840,    -1,    -1,   258,    -1,
    3126       -1,    -1,   262,    10,    11,    12,    13,    14,    -1,    -1,
    3127     1532,   364,    -1,   258,   258,   368,    -1,   262,   262,   344,
    3128       -1,    -1,    -1,    -1,    -1,   341,    -1,   924,   344,    -1,
    3129       -1,   928,    39,   278,   350,    -1,    -1,    97,    -1,    99,
    3130       -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,
    3131      947,   367,  1204,  1205,   370,   380,    -1,   718,    -1,    -1,
    3132       67,    -1,    -1,    -1,   680,    72,  1315,    74,    75,    76,
    3133       -1,   968,   969,   970,    -1,  1227,    83,    84,   431,    -1,
    3134       72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,   349,
    3135       -1,    83,    84,    -1,    -1,  1247,    72,    -1,    74,    75,
    3136       76,   417,   109,    -1,   349,   349,    -1,    83,    84,    -1,
    3137       -1,    72,   119,    74,    75,    76,   432,   109,    -1,   111,
    3138      180,   437,    83,    84,  1021,    -1,    -1,   119,    -1,   445,
    3139      190,   191,    -1,   109,    -1,   195,    -1,   197,   198,    -1,
    3140     1292,  1293,    -1,   119,    -1,    -1,    -1,    -1,   109,  1301,
    3141       -1,    -1,    -1,    -1,  1306,   471,    -1,    -1,   474,    -1,
    3142       51,    -1,    53,    -1,    -1,    56,    57,    58,    -1,    60,
    3143      430,    -1,    -1,   489,    -1,   491,    -1,    -1,    -1,    -1,
    3144       -1,    -1,    -1,   499,    75,   430,   430,   503,  1340,    10,
    3145       11,    12,    13,    14,  1039,  1040,    87,    88,    -1,   815,
    3146       -1,    -1,   447,    -1,    -1,  1102,  1103,    -1,    -1,   825,
    3147       72,    -1,    74,    75,    76,    -1,   532,   533,    39,    -1,
    3148      480,    83,    84,    -1,   840,  1474,    -1,  1476,    -1,    -1,
    3149       -1,    -1,   557,   558,   559,   480,   480,    72,    -1,    74,
    3150       75,    76,    -1,    -1,   597,    -1,    67,   109,    83,    84,
    3151       -1,    -1,  1097,  1098,    -1,    -1,    -1,   119,    -1,    -1,
    3152       -1,    -1,  1511,   579,  1513,  1417,    -1,   928,    -1,    -1,
    3153       -1,    -1,    -1,    -1,   109,   600,    -1,   630,    -1,    -1,
    3154       -1,   597,   598,    -1,   600,    -1,   947,    -1,   109,    -1,
    3155      111,  1443,    -1,   646,    -1,   611,    -1,    -1,   119,    -1,
    3156       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1556,   661,  1558,
    3157       -1,    -1,    -1,   629,  1466,    -1,    -1,    -1,   634,    -1,
    3158       -1,  1473,  1571,  1572,   640,  1222,    -1,   643,   644,   645,
    3159       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3160        0,    -1,    -1,   603,    -1,    -1,   662,    -1,    -1,    -1,
    3161     1247,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   603,   603,
    3162       -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,    -1,    -1,
    3163       -1,   631,    32,    -1,  1526,   691,   636,    -1,    -1,    -1,
    3164      696,   697,    -1,    -1,   700,    -1,   631,   631,    -1,    -1,
    3165       -1,   636,   636,    -1,    -1,    -1,  1241,    -1,    -1,    -1,
    3166       -1,    -1,    -1,    -1,    -1,   758,    -1,    67,    -1,   734,
    3167       -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,
    3168      736,    -1,    -1,  1039,  1040,    -1,    -1,    -1,  1273,   745,
    3169       -1,    -1,   748,    -1,    -1,    -1,  1281,  1282,  1283,    -1,
    3170       -1,  1102,    -1,  1340,    -1,    -1,    -1,    -1,    -1,    -1,
    3171       -1,    -1,    -1,   344,   345,   780,   772,   773,    -1,    -1,
    3172       -1,    -1,   778,    -1,   724,   356,   357,    -1,    -1,    26,
    3173       27,    28,    -1,    -1,    -1,    -1,    -1,    -1,   738,   724,
    3174      724,  1097,  1098,    -1,  1329,    -1,    -1,    -1,    -1,    -1,
    3175       -1,    -1,    -1,   738,   738,   155,    -1,    -1,    -1,   815,
    3176       -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,    -1,   825,
    3177       -1,    -1,   828,   758,   830,    -1,    -1,   833,   834,   835,
    3178       -1,    -1,   582,   583,   840,    -1,    -1,    -1,    -1,    -1,
    3179       -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,    -1,    -1,
    3180       97,    -1,    99,    -1,    -1,    -1,  1443,    10,    11,    12,
    3181       13,    14,   612,    -1,    -1,   615,   616,    -1,   618,    -1,
    3182      620,   621,    -1,    -1,    -1,   625,   626,   124,    -1,   229,
    3183       -1,   924,   832,    -1,    -1,    -1,    39,    -1,  1475,    -1,
    3184     1477,    -1,    -1,    -1,    -1,    -1,   902,   832,   832,    -1,
    3185      250,    -1,    -1,    -1,    -1,   255,   188,    -1,    -1,    -1,
    3186       -1,    -1,    -1,   195,    67,    -1,    -1,    -1,   924,    72,
    3187       -1,    74,    75,    76,    -1,  1512,    -1,  1514,    -1,    -1,
    3188       83,    84,    -1,   180,    -1,  1241,    -1,    -1,    -1,    -1,
    3189       -1,   188,    -1,   190,   191,    -1,    -1,    -1,   195,    -1,
    3190      197,   198,    -1,    -1,   960,  1542,   109,    -1,   111,   709,
    3191      710,    -1,   968,   969,    -1,   715,   119,  1273,    -1,    10,
    3192       11,    12,    13,    14,    -1,  1281,  1282,  1283,    -1,    -1,
    3193      986,    -1,    -1,    -1,    -1,   267,    -1,    -1,    -1,    10,
    3194       11,    12,    13,    14,    -1,    -1,    -1,    -1,    39,    -1,
    3195      350,    -1,    -1,    -1,    -1,    -1,  1021,    -1,    -1,    -1,
    3196       -1,    -1,    -1,    -1,    -1,  1021,    -1,    -1,    39,    -1,
    3197      267,    -1,    -1,  1329,    -1,    -1,    67,    -1,  1034,    -1,
    3198       -1,    72,    -1,  1039,  1040,    76,  1042,  1043,    -1,    -1,
    3199       -1,   323,    83,    84,    -1,    -1,    67,  1062,    -1,   331,
    3200       -1,    72,   334,    74,    75,    76,  1062,    -1,    -1,    -1,
    3201       -1,    -1,    83,    84,    -1,    -1,    -1,   417,   109,    -1,
    3202       -1,     0,    -1,    -1,  1024,    -1,    -1,    -1,   119,    -1,
    3203       -1,    -1,   432,    -1,    -1,    -1,    -1,   437,   109,  1024,
    3204     1024,  1097,  1098,    -1,    -1,   445,    -1,  1103,   119,    -1,
    3205       -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,
    3206       -1,    -1,    -1,    -1,    -1,   397,    -1,    -1,    -1,   401,
    3207       -1,   471,    -1,    -1,  1475,    -1,  1477,    -1,    97,    98,
    3208       99,   100,   101,   102,   103,   104,   105,   106,    67,   489,
    3209       -1,   491,    -1,    -1,   725,    -1,   727,    -1,    -1,    -1,
    3210       -1,    -1,    -1,   734,   735,    -1,  1162,    -1,   739,    -1,
    3211       -1,  1512,   131,  1514,  1179,    10,    11,    12,    13,    14,
    3212      751,    -1,    -1,    -1,    -1,   756,    -1,    -1,    -1,  1222,
    3213       -1,    -1,    -1,   533,    -1,    -1,    -1,    -1,    -1,    -1,
    3214       -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,  1205,
    3215       -1,   782,    -1,    -1,   486,    -1,    -1,    -1,    -1,    -1,
    3216       -1,    -1,    -1,    -1,    -1,    -1,  1222,    -1,    -1,    -1,
    3217       -1,  1227,    67,    -1,    -1,    -1,   155,    72,    -1,    -1,
    3218       -1,    76,    -1,    -1,    -1,  1241,    -1,  1243,    83,    84,
    3219       -1,  1247,    -1,    -1,    -1,    -1,   827,    -1,   598,    -1,
    3220       -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,    -1,    -1,
    3221       -1,    -1,    -1,    -1,   109,    -1,    -1,  1273,    -1,  1204,
    3222     1204,    -1,    -1,    -1,   119,  1281,  1282,  1283,    -1,    -1,
    3223       -1,    -1,    -1,    -1,    -1,    -1,  1292,  1293,    -1,    -1,
    3224       -1,    -1,    -1,   643,   644,   645,   578,   579,    -1,    -1,
    3225     1306,    -1,    -1,   884,   885,   886,   887,    -1,   889,    -1,
    3226       -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3227       -1,   250,    -1,  1329,   905,    -1,   255,    -1,    -1,    -1,
    3228      680,    -1,    -1,    -1,  1340,   582,   583,    -1,   919,    -1,
    3229       -1,   691,    -1,    -1,    -1,    -1,    -1,   697,    -1,  1099,
    3230       -1,  1301,    -1,    -1,    -1,    -1,  1399,    -1,    -1,    -1,
    3231       -1,    -1,    -1,    -1,    -1,   612,  1301,  1301,   615,   616,
    3232       -1,   618,    -1,   620,   621,    -1,    -1,   958,   625,   626,
    3233       -1,    -1,    -1,   733,    -1,   667,   736,    -1,    -1,   671,
    3234       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3235       20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
    3236       -1,  1417,    -1,    -1,    -1,    -1,    -1,   998,    -1,    39,
    3237       -1,   350,   704,   773,  1005,    -1,    -1,    -1,    -1,  1010,
    3238       -1,    -1,    -1,    -1,  1015,    -1,  1017,  1443,    -1,    -1,
    3239     1021,  1022,  1023,    -1,    -1,  1026,    -1,    67,    -1,    -1,
    3240       -1,    -1,    -1,    -1,  1035,    -1,    -1,   704,    78,    -1,
    3241     1466,    -1,   709,   710,    -1,   815,    -1,  1473,   715,    -1,
    3242       -1,    -1,  1053,  1054,  1224,   825,    -1,    -1,   828,    -1,
    3243       -1,    -1,    -1,   833,    -1,   835,    -1,    -1,   417,    -1,
    3244      840,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1080,
    3245       -1,    -1,  1083,   432,    -1,    -1,    -1,    -1,   437,    -1,
    3246       -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,    -1,
    3247     1526,    -1,    -1,    -1,    -1,    -1,    -1,  1533,    -1,    -1,
    3248       -1,    -1,    -1,    -1,    -1,    -1,    -1,   819,    -1,    -1,
    3249       -1,  1122,   471,    -1,    -1,    -1,    -1,  1128,  1129,    -1,
    3250       -1,    -1,   902,    -1,    -1,    -1,    -1,    -1,    -1,  1140,
    3251      489,    -1,   491,     0,  1145,    -1,    -1,  1148,    -1,  1150,
    3252       -1,    -1,  1153,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3253       -1,    -1,    -1,    -1,    -1,  1166,    -1,    -1,    -1,    -1,
    3254       -1,    -1,    -1,    -1,    -1,    32,    37,    38,  1179,    40,
    3255     1181,  1182,  1183,  1184,   533,    -1,    -1,    -1,    -1,    -1,
    3256       -1,    -1,    -1,    -1,    -1,    -1,  1197,    -1,  1199,    -1,
    3257       -1,    -1,  1203,    -1,    -1,    66,    -1,    -1,    -1,    -1,
    3258       67,    72,    -1,    74,    75,    76,   986,    -1,    79,    80,
    3259       81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
    3260      932,  1232,  1233,    94,    -1,    -1,    -1,    -1,    -1,    -1,
    3261       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   598,
    3262      111,    -1,   113,   114,    -1,    -1,    -1,   118,   119,   120,
    3263      121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,  1039,
    3264     1040,    -1,  1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,
    3265       -1,    -1,    -1,  1284,  1285,    -1,    -1,    -1,    -1,    -1,
    3266       -1,    -1,  1062,  1294,   643,   644,   645,    -1,   155,    -1,
    3267       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1011,
    3268       -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,    -1,
    3269       -1,    -1,    -1,    -1,    -1,  1027,    -1,  1097,  1098,    -1,
    3270       -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3271       -1,    -1,   691,    -1,    -1,  1346,    -1,    -1,   697,    -1,
    3272       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1358,    -1,  1360,
    3273     1361,  1362,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
    3274       -1,  1372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3275     1381,    -1,    -1,    -1,   733,    -1,    -1,   736,    -1,    -1,
    3276       -1,    66,  1162,   250,    -1,    -1,  1397,    72,   255,    -1,
    3277       -1,    76,  1104,    -1,    79,    80,    81,    82,    83,    84,
    3278       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,     0,    94,
    3279       -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,
    3280       -1,    -1,  1099,    -1,   109,  1205,   111,    -1,    -1,   114,
    3281       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3282       32,    -1,  1453,  1454,    -1,    -1,    -1,  1227,    -1,    -1,
    3283       -1,    -1,    -1,    -1,    -1,  1466,   815,    -1,    -1,    -1,
    3284       -1,  1241,  1473,  1243,    -1,    -1,   825,    -1,    -1,   828,
    3285       -1,    -1,    -1,    -1,   833,    67,   835,    -1,    -1,    -1,
    3286       -1,   840,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,
    3287       -1,    -1,    -1,  1273,    -1,  1506,    -1,    -1,    -1,  1510,
    3288       -1,  1281,  1282,  1283,    -1,    -1,    -1,    -1,    -1,    -1,
    3289       -1,    -1,  1292,  1293,    -1,    -1,    -1,    -1,    -1,    -1,
    3290       -1,    -1,    -1,    -1,    -1,    -1,  1306,    -1,  1539,    -1,
    3291     1541,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3292       -1,    -1,    -1,   902,    -1,    -1,    -1,  1224,    -1,  1329,
    3293      417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1569,  1570,
    3294       -1,    -1,    -1,   155,    -1,   432,  1577,  1578,    -1,    -1,
    3295      437,    -1,    -1,    -1,    -1,    -1,     0,    -1,   445,     3,
    3296        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3297       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3298       24,    25,    26,    27,   471,    -1,    30,    31,    32,    33,
    3299       -1,    -1,    36,    -1,    -1,    39,    40,    -1,    -1,    -1,
    3300       -1,    -1,   489,    -1,   491,    -1,    -1,   986,    -1,    -1,
    3301       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1417,    -1,    -1,
    3302       64,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
    3303       74,    75,    76,    -1,    -1,    -1,    -1,    -1,   250,    83,
    3304       84,    -1,    -1,   255,    -1,    -1,   533,    -1,     7,    -1,
    3305       -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
    3306     1039,  1040,    -1,  1042,  1043,   109,  1466,   111,    -1,    -1,
    3307       -1,    -1,    -1,  1473,    -1,   119,    -1,    -1,    37,    38,
    3308       39,    40,    -1,  1062,    -1,    10,    11,    12,    13,    14,
    3309       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3310       25,    26,    27,    28,    -1,    -1,    -1,    66,    67,    -1,
    3311       -1,   598,    -1,    72,    39,    -1,    -1,    76,  1097,  1098,
    3312       79,    80,    81,    82,    83,    84,  1526,    86,    87,    -1,
    3313       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,   350,    -1,
    3314       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3315      109,    -1,   111,    78,    -1,    -1,   643,   644,   645,   118,
    3316      119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,    -1,
    3317       -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,
    3318       -1,    -1,    -1,  1162,    -1,    -1,    -1,    -1,    -1,    -1,
    3319       -1,    -1,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,
    3320       -1,    -1,    -1,    -1,   691,   417,    -1,    -1,    -1,    45,
    3321      697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3322      432,    -1,    -1,    -1,    -1,   437,  1205,    -1,    64,    -1,
    3323       -1,    -1,    -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,
    3324       -1,    -1,    -1,    -1,    -1,    -1,   733,    -1,  1227,   736,
    3325       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   471,
    3326       -1,    -1,  1241,    -1,  1243,    -1,    -1,    -1,    -1,    -1,
    3327       -1,    -1,    -1,    -1,   110,    -1,    -1,   489,    -1,   491,
    3328      116,    -1,    -1,    -1,    -1,    -1,   773,    -1,    -1,    -1,
    3329       -1,    -1,    -1,    -1,  1273,    -1,    -1,    -1,    -1,    -1,
    3330       -1,    -1,  1281,  1282,  1283,    -1,    -1,    -1,    -1,   145,
    3331       -1,    -1,    -1,  1292,  1293,    -1,    -1,    -1,    -1,   155,
    3332       -1,   533,    -1,   159,    -1,    -1,    -1,  1306,   815,    -1,
    3333       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   825,    -1,
    3334       -1,   828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,
    3335     1329,    -1,    -1,   840,    10,    11,    12,    13,    14,    15,
    3336       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3337       26,    27,   208,    -1,    30,    31,    32,    -1,    -1,    -1,
    3338       -1,    -1,    -1,    39,   220,    -1,   598,    -1,    -1,    -1,
    3339       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3340       -1,    -1,   238,   239,    -1,    -1,    -1,    -1,    -1,    -1,
    3341       -1,    67,    -1,    -1,    -1,   902,    -1,    -1,    74,    75,
    3342       -1,    -1,    -1,    -1,    -1,    -1,   262,    -1,    -1,    -1,
    3343       -1,   643,   644,   645,   270,    -1,    -1,    -1,  1417,    -1,
    3344       -1,    -1,    -1,    -1,   281,    -1,   283,   284,    -1,    -1,
    3345      662,    -1,    -1,    -1,   291,   292,    -1,    -1,   294,   296,
    3346      297,   297,    -1,   119,    -1,    -1,    -1,    -1,   680,    -1,
    3347       -1,   308,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   691,
    3348       -1,    -1,    -1,    -1,    -1,   697,    -1,  1466,    37,    38,
    3349       -1,    40,    -1,    -1,  1473,    -1,    -1,    -1,    -1,   986,
    3350       -1,    -1,    -1,    -1,    -1,    -1,    -1,   344,   344,    -1,
    3351       -1,    -1,    -1,   349,    -1,    -1,    -1,    66,    -1,    -1,
    3352       -1,   733,    -1,    72,   736,    -1,    -1,    76,    -1,    -1,
    3353       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    3354       -1,    -1,    -1,   380,    -1,    94,    -1,  1526,    -1,    -1,
    3355       -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,    -1,    -1,
    3356      109,   773,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
    3357      119,   120,   121,   122,   123,  1062,    -1,    -1,    -1,    -1,
    3358       -1,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,   425,
    3359      426,    -1,    -1,    -1,    -1,    74,   432,    76,    -1,    78,
    3360       -1,    -1,    -1,   815,    -1,    -1,    85,    -1,    -1,    -1,
    3361     1097,  1098,    -1,   825,    -1,    -1,   828,   453,    -1,    -1,
    3362      456,   833,    -1,   835,    -1,    -1,    -1,    -1,   840,    -1,
    3363       -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,   118,
    3364      119,   120,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3365       -1,    -1,    -1,   489,    -1,    -1,    -1,    -1,    -1,    -1,
    3366       -1,    -1,    -1,    -1,    -1,   501,    -1,    -1,    -1,    -1,
    3367       -1,    -1,    -1,    -1,    -1,  1162,    -1,   513,    -1,   515,
    3368      159,    -1,   518,    -1,   520,   521,    -1,    -1,    -1,    -1,
    3369      902,    -1,    -1,    -1,    -1,    -1,    -1,   533,    -1,    -1,
    3370       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3371       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1205,    -1,
    3372      557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
    3373      567,   568,   569,   570,   571,   572,   573,   574,    -1,    -1,
    3374     1227,   220,    -1,   222,   223,   224,    -1,    -1,    -1,    -1,
    3375      586,    -1,    -1,    -1,  1241,    -1,  1243,    -1,    -1,    -1,
    3376       -1,    -1,   598,   600,   600,    -1,    -1,   603,    -1,    -1,
    3377       -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,   258,
    3378       -1,    -1,    -1,   262,    -1,    -1,  1273,    -1,    -1,    -1,
    3379       -1,    -1,    -1,   629,  1281,  1282,  1283,    -1,   634,   278,
    3380       -1,    -1,    -1,    -1,    -1,  1292,  1293,   643,   644,   645,
    3381       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1306,
    3382       -1,    -1,    -1,    -1,    -1,    -1,   662,  1039,  1040,    -1,
    3383     1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3384       -1,    -1,  1329,    -1,    -1,    -1,    -1,    -1,    -1,   328,
    3385     1062,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3386       -1,   697,   699,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3387      349,    -1,    -1,    -1,    -1,   354,   355,    44,    -1,    -1,
    3388       -1,    -1,   718,   362,   721,  1097,  1098,    -1,    -1,    -1,
    3389       -1,    -1,    -1,    -1,    -1,    -1,    -1,   734,    -1,    -1,
    3390      736,    -1,   738,    10,    11,    12,    13,    14,    15,    16,
    3391       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3392       27,    -1,    -1,    90,    -1,    -1,   405,    -1,    -1,    -1,
    3393     1417,    -1,    39,   100,    -1,    -1,    -1,   773,    -1,    -1,
    3394       -1,    -1,    -1,   780,   423,    -1,    -1,    -1,    -1,   428,
    3395     1162,   430,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3396       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   447,    -1,
    3397       -1,   450,   451,    -1,    -1,   812,    -1,    -1,    -1,  1466,
    3398       -1,    -1,    -1,    -1,    -1,    -1,  1473,   466,    -1,   156,
    3399      827,    -1,   828,  1205,    -1,    -1,   832,    -1,    -1,   835,
    3400       -1,   480,    -1,   170,    -1,    -1,    -1,    -1,   487,    -1,
    3401       -1,    -1,    -1,    -1,    -1,  1227,    -1,    -1,    -1,    -1,
    3402       -1,    -1,    -1,    -1,    -1,    -1,   193,    -1,    -1,  1241,
    3403       -1,  1243,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1526,
    3404      207,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   216,
    3405       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   226,
    3406       -1,  1273,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1281,
    3407     1282,  1283,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3408     1292,  1293,    -1,    -1,   251,    -1,    -1,    -1,    -1,   256,
    3409       -1,    -1,   928,    -1,  1306,    -1,    -1,    -1,    -1,    -1,
    3410       -1,    -1,   269,    -1,    -1,    -1,    -1,    -1,   275,    -1,
    3411      277,   947,    -1,    -1,    -1,    -1,    -1,  1329,    -1,    -1,
    3412       -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,   295,    -1,
    3413       -1,    -1,    -1,    -1,   970,    -1,    -1,    -1,    -1,    -1,
    3414       -1,   978,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3415      986,    -1,   631,    -1,    -1,    -1,    -1,   636,    -1,    -1,
    3416       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3417       -1,   338,  1009,    -1,    -1,    -1,   343,    -1,    -1,    -1,
    3418       -1,    -1,    -1,    -1,  1021,  1021,    -1,    -1,    -1,    -1,
    3419       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3420       -1,    -1,    -1,    -1,   371,  1417,  1042,  1043,   375,   376,
    3421       -1,   378,    -1,    -1,    -1,    -1,    -1,    -1,   385,   386,
    3422       -1,   388,   389,    -1,   391,  1062,   393,    -1,    -1,    -1,
    3423       -1,    -1,     7,    -1,    -1,    10,    11,    12,    13,    14,
    3424       -1,    -1,    -1,   410,    -1,   724,    -1,    -1,    -1,    -1,
    3425       -1,   418,    -1,    -1,  1466,    -1,    -1,    -1,    -1,   738,
    3426       -1,  1473,    37,    38,    39,    40,  1102,    -1,    -1,    -1,
    3427       -1,    -1,    -1,    -1,    -1,    -1,   443,    -1,    -1,   758,
    3428       -1,    -1,    -1,    -1,    -1,    -1,    -1,   454,    -1,    -1,
    3429       -1,    66,    67,    -1,    -1,    -1,    -1,    72,  1135,    -1,
    3430       -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3431      477,    86,    87,    -1,  1526,    -1,   483,    -1,    -1,    94,
    3432       -1,   488,    -1,    -1,    -1,    -1,  1162,    -1,    -1,    -1,
    3433       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
    3434      819,    -1,  1179,   118,   119,   120,   121,   122,   123,    -1,
    3435       -1,    -1,    -1,   832,    -1,    -1,  1193,  1194,   525,    -1,
    3436       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,
    3437       -1,    -1,   851,    -1,   541,    -1,    -1,    -1,    -1,    -1,
    3438       -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    3439       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3440       22,    23,    24,    25,    26,    27,    -1,  1243,    30,    31,
    3441       32,   578,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    3442      587,    -1,    -1,    -1,    -1,    -1,    -1,   594,    -1,    -1,
    3443       -1,    -1,   599,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3444       -1,    -1,    -1,   610,    -1,    67,    -1,    69,    -1,    71,
    3445       72,    -1,    74,    75,    76,    -1,  1292,  1293,    -1,   938,
    3446       -1,    83,    84,    -1,    -1,  1301,    -1,    -1,    -1,    -1,
    3447       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3448       -1,    -1,    -1,    -1,   651,   964,    -1,   109,    -1,   111,
    3449       -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,
    3450       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3451       -1,    -1,    -1,   992,    -1,    -1,    -1,    -1,    -1,    -1,
    3452      687,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3453       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3454       24,    25,    26,    27,    28,  1024,    30,    31,    32,    -1,
    3455       -1,    -1,    -1,    -1,    -1,    39,  1035,    -1,    -1,    -1,
    3456       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1404,    -1,    -1,
    3457       -1,    -1,    -1,    -1,    -1,   742,    -1,    -1,    -1,    -1,
    3458       -1,  1417,    -1,    67,  1421,   752,   753,    -1,    -1,    -1,
    3459       74,    75,    -1,    -1,    78,    -1,    -1,    -1,    -1,   766,
    3460       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3461       -1,    -1,    -1,    -1,    -1,    -1,   783,    -1,   785,    -1,
    3462       -1,    -1,   789,    -1,    -1,   109,    -1,   111,    -1,    -1,
    3463       -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,  1117,  1475,
    3464       -1,  1477,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3465       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1494,  1495,    -1,
    3466       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3467       37,    38,    -1,    40,    -1,    -1,  1512,    -1,  1514,    -1,
    3468       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   855,    -1,
    3469       -1,    -1,    -1,    -1,    -1,   862,    -1,    -1,    -1,    66,
    3470       -1,    -1,    -1,    -1,    -1,    72,  1542,    -1,   875,    76,
    3471      877,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3472       87,    -1,    -1,    -1,   891,  1204,    -1,    94,    -1,    -1,
    3473       -1,   898,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3474       -1,    -1,   109,   910,   111,    -1,   913,    -1,    -1,   116,
    3475       -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
    3476       -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,    -1,
    3477       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3478       -1,    -1,    -1,    -1,   154,   155,    -1,    -1,    -1,    -1,
     3984      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
     3985      -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,    -1,
    34793986      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    34803987      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3481       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   188,    -1,
    3482       -1,    -1,  1301,    -1,    -1,   195,    -1,     3,     4,     5,
    3483        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    3484       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3485       26,    27,    -1,  1020,    30,    31,    32,    33,    -1,    -1,
    3486       36,    -1,    -1,    39,    40,    10,    11,    12,    13,    14,
    3487       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3488       25,    26,    27,    -1,    -1,    30,    31,    32,    64,    -1,
    3489       -1,    67,    -1,    69,    39,    71,    72,   267,    74,    75,
    3490       76,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,  1076,
    3491       -1,    -1,    -1,    -1,    -1,    -1,  1083,    -1,    -1,    -1,
    3492       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
    3493       75,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,   115,
    3494       -1,    -1,    -1,   119,    -1,   145,  1113,    -1,    -1,    -1,
    3495       -1,  1118,    -1,   323,    -1,   155,    -1,    -1,    -1,  1126,
    3496       -1,   331,   332,    -1,   334,   335,    -1,   167,   168,    -1,
    3497       -1,    -1,    -1,    -1,   344,    -1,    -1,    -1,   348,    -1,
    3498       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3499     1157,    -1,    -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,
    3500      370,    -1,  1169,    -1,    -1,  1172,    -1,  1174,    -1,    -1,
    3501       37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,
    3502       -1,  1188,  1189,    -1,    -1,    -1,    -1,   397,    -1,    -1,
    3503       -1,   401,    -1,    -1,    -1,    -1,    -1,    -1,   238,    66,
    3504       -1,    -1,    -1,  1210,    -1,    72,    -1,    -1,    -1,    76,
    3505       -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
    3506       87,    -1,   432,   263,    -1,    -1,    -1,    94,    -1,    -1,
    3507     1237,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1557,    -1,
    3508       -1,    -1,   109,    -1,   111,   455,    -1,   114,    -1,    -1,
    3509       -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
    3510       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3511       -1,    -1,    -1,    -1,    -1,    -1,   486,    -1,    -1,   489,
    3512       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
    3513        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3514       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
    3515       -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,   529,
    3516       39,    -1,   532,   533,    -1,    -1,    -1,    -1,  1335,    -1,
    3517     1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
    3518       -1,    -1,    -1,  1350,    -1,  1352,    -1,    -1,    67,    -1,
    3519       69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,    78,
    3520       -1,    -1,    -1,  1370,    -1,    -1,    -1,    -1,   578,   579,
    3521       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1386,
    3522     1387,    -1,    -1,    -1,    -1,    -1,    -1,   597,   598,    -1,
    3523      600,  1398,   111,    -1,  1401,    -1,    -1,    -1,    -1,   609,
    3524      119,   611,   612,    -1,    -1,    -1,    -1,    -1,   618,    -1,
    3525       -1,    -1,    -1,    -1,    -1,    -1,  1423,    -1,   628,   629,
    3526       -1,    -1,    -1,    -1,   634,  1432,    -1,    -1,  1435,    -1,
    3527     1437,  1438,  1439,   643,   644,   645,    -1,    -1,    -1,    -1,
    3528       -1,   481,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3529       -1,    -1,   662,    -1,    -1,    -1,    -1,   667,   668,    -1,
    3530       -1,   671,   672,    -1,    -1,    -1,    -1,    -1,   678,    -1,
    3531       -1,    -1,  1479,    -1,  1481,    -1,    -1,  1484,    -1,    -1,
    3532      520,    -1,    -1,    -1,    -1,    -1,   696,   697,   698,    -1,
    3533      700,    -1,  1499,   533,   704,    -1,    -1,    -1,    -1,    -1,
    3534      540,    -1,    -1,   543,    -1,    -1,    -1,    -1,    -1,    -1,
    3535       -1,    -1,    -1,    -1,   554,   555,    -1,    -1,    -1,    -1,
    3536       -1,    -1,    -1,    -1,    -1,    -1,   736,   737,    -1,    -1,
    3537       -1,    -1,    -1,    -1,    -1,    -1,   576,    -1,    -1,    -1,
    3538       -1,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,    -1,
    3539       -1,    -1,    -1,   593,    -1,    -1,    -1,    -1,   598,    -1,
    3540       -1,    -1,   772,   773,    -1,    -1,    -1,   777,   778,    -1,
    3541       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
    3542        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3543       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3544       -1,    30,    31,    32,    33,    -1,    -1,    36,   648,   819,
    3545       39,    40,    -1,    -1,    -1,    -1,    -1,   657,   828,    -1,
    3546       -1,    -1,    -1,    -1,   834,   835,    -1,    -1,    -1,   839,
    3547       -1,   841,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
    3548       69,   851,    71,    72,    -1,    74,    75,    76,    -1,    -1,
    3549       -1,    -1,    -1,    -1,    83,    84,    -1,   697,    -1,    -1,
     3988      -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
     3989       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
     3990      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
     3991      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
     3992      -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,
    35503993      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    35513994      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3552      109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3553      119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3554       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3555       25,    26,    27,    28,   924,    30,    31,    32,    -1,    -1,
    3556       -1,    -1,   932,    -1,    39,    -1,    -1,    -1,   938,    -1,
    3557       -1,    -1,    -1,   773,    -1,   775,   946,    -1,    -1,    -1,
    3558       -1,   781,    -1,    -1,    -1,    -1,    -1,    -1,   788,   959,
    3559      960,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
    3560       75,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,
    3561       -1,    -1,    -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,
    3562       -1,    -1,   992,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3563       -1,    -1,   832,   833,   109,   835,   111,    -1,    -1,    -1,
    3564       -1,  1011,  1012,    -1,   119,    -1,    -1,    -1,    -1,    -1,
    3565      850,  1021,    -1,    -1,    -1,    -1,    -1,  1027,  1028,    -1,
    3566     1030,  1031,  1032,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3567       -1,    -1,  1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,
    3568       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3569      890,    -1,    -1,    -1,   894,     3,     4,     5,     6,     7,
    3570        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3571       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3572       -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,
    3573       -1,    39,    -1,  1103,  1104,  1105,    -1,    -1,    -1,    -1,
    3574       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1117,    -1,    -1,
    3575       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
    3576       -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,    -1,
    3577      970,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3578       -1,    -1,    -1,    -1,    -1,    -1,   986,   987,    -1,    -1,
    3579       -1,    -1,  1162,   993,    -1,    -1,    -1,    37,    38,   999,
    3580       40,    -1,  1002,   111,  1004,    -1,    -1,    -1,    -1,    -1,
    3581       -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3582       -1,    -1,    -1,    -1,  1024,    -1,    66,    -1,    -1,    -1,
    3583       -1,    -1,    72,    -1,    -1,  1035,    76,    -1,    -1,    79,
    3584       80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
    3585       -1,    -1,  1222,    -1,    94,    37,    38,  1057,    40,  1059,
    3586       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
    3587       -1,   111,    -1,  1243,  1074,  1075,    -1,    -1,   118,   119,
    3588      120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,    -1,
    3589       72,    -1,    -1,    -1,    76,  1095,    -1,    79,    80,    81,
    3590       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    3591       -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3592       -1,    -1,  1292,  1293,    -1,    -1,    -1,   109,    -1,   111,
    3593       -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
    3594      122,   123,    -1,  1143,    -1,    -1,    -1,    -1,    -1,    -1,
    3595       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3596       -1,    -1,  1162,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3597       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1177,  1178,    -1,
    3598       -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
    3599        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3600       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3601       -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
    3602       38,    39,    40,    41,    -1,    43,    -1,    -1,    46,    47,
    3603       48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
    3604       -1,    -1,    -1,    61,    62,    -1,    64,  1417,    66,    67,
    3605       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,  1259,
    3606       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3607       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3608       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3609       -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    3610      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3611      128,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,    -1,
    3612     1320,    -1,  1322,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3613       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1507,    10,    11,
     3995      -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
     3996      73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
    36143997      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3615       22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
    3616       32,    -1,  1532,  1533,    -1,    -1,    -1,    39,    -1,    -1,
    3617       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3618       -1,    -1,    -1,    -1,    -1,    -1,    -1,  1557,    -1,    -1,
    3619       -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
    3620       -1,    -1,    74,    75,    -1,    -1,    -1,    -1,  1408,    -1,
    3621       -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
    3622        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3623       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3624       -1,    -1,    30,    31,    32,    33,    -1,   119,    36,    37,
    3625       38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
    3626       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3627       27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
    3628       -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
    3629     1490,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3630       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3631       67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    -1,
    3632       -1,   109,    -1,   111,    -1,    -1,    83,    84,    -1,    -1,
    3633      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3634       -1,    -1,  1542,    -1,   132,     3,     4,     5,     6,     7,
    3635        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3636       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3637       -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
    3638       38,    39,    40,    10,    11,    12,    13,    14,    15,    16,
    3639       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3640       27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,    67,
    3641       -1,    69,    39,    71,    72,    -1,    74,    75,    76,    -1,
    3642       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3643       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3644       67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
    3645       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3646      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3647        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3648       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3649       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3650       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3651       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3652       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3653       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3654       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3655       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3657       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
    3658      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3659        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3660       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3661       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3662       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3663       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3664       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3665       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3666       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3667       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3668       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3669       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
    3670      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3671        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3672       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3673       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3674       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3675       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3676       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3677       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3678       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3679       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3680       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3681       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,   116,    -1,
    3682      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3683        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3684       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3685       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3686       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3687       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3688       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3689       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3690       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3691       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3692       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3693       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3694      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3695        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3696       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3697       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3698       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3699       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3700       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3701       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3702       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3703       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3704       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3705       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3706      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3707        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3708       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3709       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3710       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3711       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3712       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3713       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3714       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3715       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3716       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3717       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3718      118,   119,   120,   121,   122,   123,     4,     5,     6,     7,
    3719        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3720       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3721       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3722       38,    39,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3723       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3724       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3725       -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
    3726       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3727       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3728       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3729       -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,
    3730      118,   119,   120,   121,   122,   123,     3,     4,     5,     6,
    3731        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3732       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3733       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3734       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     3998      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
     3999      -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,
    37354000      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    37364001      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3737       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
    3738        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3739       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3740       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3741       -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
    3742       -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3743       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3744       -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
    3745       74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
    3746       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3747       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3748       -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
    3749       -1,    -1,    -1,    -1,    -1,   119,     4,     5,     6,     7,
    3750        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
    3751       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3752       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,
    3753       -1,    39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3754       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3755       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    67,
    3756       -1,    69,    -1,    71,    -1,    39,    74,    75,    -1,     4,
    3757        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    3758       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3759       25,    26,    27,    67,    -1,    30,    31,    32,    72,    -1,
    3760       74,    75,   110,   111,    39,    -1,    -1,    -1,    -1,    83,
    3761       84,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3762       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3763       -1,    -1,    67,    -1,    69,    -1,    71,   111,    -1,    74,
    3764       75,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
    3765       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3766       -1,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3767       -1,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
    3768       -1,    -1,    -1,    -1,   119,     4,     5,     6,     7,     8,
    3769        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3770       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3771       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
    3772       39,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
    3773       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3774       25,    26,    27,    28,    -1,    30,    31,    32,    67,    -1,
    3775       69,    -1,    71,    -1,    39,    74,    75,    -1,    -1,    -1,
    3776       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3777       -1,    -1,    -1,    -1,    -1,    -1,    -1,    96,    -1,    -1,
    3778       -1,    -1,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
    3779       75,    76,   111,    78,    -1,    -1,    -1,    -1,    83,    84,
    3780      119,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3781       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3782       23,    24,    25,    26,    27,    -1,   111,    30,    31,    32,
    3783       -1,    -1,    -1,    -1,   119,    -1,    39,    -1,    -1,    -1,
    3784       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3785       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3786       -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,
    3787       -1,    74,    75,    -1,     4,     5,     6,     7,     8,     9,
    3788       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3789       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3790       30,    31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,
    3791       -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
    3792       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3793       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,
    3794       -1,    71,    -1,    -1,    74,    75,    -1,     4,     5,     6,
    3795        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3796       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3797       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3798       -1,   111,    39,    -1,    -1,    -1,    -1,    -1,    -1,   119,
    3799       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3800       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3801       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -1,
    3802        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    3803       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3804       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3805       -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
    3806       -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3807       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3808       -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
    3809       74,    75,    10,    11,    12,    13,    14,    15,    16,    17,
    3810       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3811       -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,    37,
    3812       38,    39,    40,    -1,    -1,    -1,    -1,   111,    -1,    -1,
    3813       -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
    3814       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
    3815       -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,    -1,
    3816       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3817       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3818       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3819       -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    3820      118,   119,   120,   121,   122,   123,    10,    11,    12,    13,
    3821       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3822       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3823       -1,    -1,    -1,    37,    38,    39,    40,    10,    11,    12,
    3824       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3825       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3826       -1,    -1,    66,    67,    -1,    -1,    39,    -1,    72,    -1,
    3827       74,    75,    76,    -1,    -1,    79,    80,    81,    82,    83,
    3828       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    3829       94,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,    72,
    3830       -1,    74,    75,    76,    -1,   109,    -1,   111,   112,    -1,
    3831       83,    84,    -1,    -1,   118,   119,   120,   121,   122,   123,
    3832       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3833       20,    21,    22,    23,    24,    25,    26,    27,   111,    -1,
    3834       30,    31,    32,    -1,    -1,    -1,   119,    37,    38,    39,
    3835       40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    3836       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    3837       -1,    30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,
    3838       39,    40,    72,    -1,    74,    75,    76,    -1,    -1,    79,
    3839       80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
    3840       -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,
    3841       -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
    3842      110,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
    3843      120,   121,   122,   123,    10,    11,    12,    13,    14,    15,
    3844       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3845       26,    27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,
    3846      119,    37,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
    3847       -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3848       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3849       66,    67,    30,    31,    32,    -1,    72,    -1,    74,    75,
    3850       76,    39,    -1,    79,    80,    81,    82,    83,    84,    -1,
    3851       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,
    3852       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
    3853       -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,
    3854       -1,    -1,   118,   119,   120,   121,   122,   123,    10,    11,
    3855       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3856       22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
    3857       32,   109,    -1,   111,    -1,    37,    38,    39,    40,    -1,
    3858       -1,   119,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
    3859       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3860       24,    25,    26,    27,    66,    67,    30,    31,    32,    -1,
    3861       72,    -1,    74,    75,    76,    39,    -1,    79,    80,    81,
    3862       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    3863       -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3864       -1,    -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,
    3865       74,    75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
    3866      122,   123,    10,    11,    12,    13,    14,    15,    16,    17,
    3867       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3868       -1,    -1,    30,    31,    32,   109,    -1,   111,    -1,    37,
    3869       38,    39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,
    3870       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3871       20,    21,    22,    23,    24,    25,    26,    27,    66,    67,
    3872       30,    31,    32,    -1,    72,    -1,    74,    75,    76,    39,
    3873       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3874       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3875       -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
    3876       -1,   109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,
    3877      118,   119,   120,   121,   122,   123,    10,    11,    12,    13,
    3878       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3879       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3880       -1,   111,    -1,    37,    38,    39,    40,    -1,    -1,   119,
    3881       -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
    3882       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3883       26,    27,    66,    67,    30,    31,    32,    -1,    72,    -1,
    3884       74,    75,    76,    39,    -1,    79,    80,    81,    82,    83,
    3885       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    3886       94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3887       -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,    75,
    3888       -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    3889        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
    3890       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3891       23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
    3892       -1,    -1,    -1,   119,    -1,    -1,    39,    -1,    -1,    -1,
    3893       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    3894       20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
    3895       30,    31,    32,    -1,    67,    -1,    69,    -1,    71,    39,
    3896       -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    10,    11,
    3897       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    3898       22,    23,    24,    25,    26,    27,    -1,    67,    30,    31,
    3899       32,    -1,    72,    -1,    74,    75,    76,    39,    -1,    -1,
    3900       -1,   114,    -1,    83,    84,    -1,    10,    11,    12,    13,
    3901       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3902       24,    25,    26,    27,    -1,    67,    30,    31,    32,   109,
    3903       72,   111,    74,    75,    76,    39,    -1,    -1,    -1,   119,
    3904       -1,    83,    84,    -1,    10,    11,    12,    13,    14,    15,
    3905       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3906       26,    27,    -1,    67,    30,    31,    32,   109,    72,   111,
    3907       74,    75,    76,    39,    -1,    -1,    -1,   119,    -1,    83,
    3908       84,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
    3909       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
    3910       28,    67,    30,    31,    32,   109,    72,   111,    74,    75,
    3911       76,    39,    -1,    -1,    -1,   119,    -1,    83,    84,    -1,
    3912       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3913       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
    3914       -1,    -1,    -1,   109,    -1,   111,    74,    75,    -1,    -1,
    3915       78,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
    3916       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3917       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3918       -1,   109,    -1,   111,    39,    40,    -1,    -1,    -1,    -1,
    3919       -1,   119,    -1,    10,    11,    12,    13,    14,    15,    16,
    3920       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3921       27,    28,    67,    30,    31,    32,    -1,    -1,    -1,    74,
    3922       75,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
    3923       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3924       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    3925       67,    -1,    39,    40,    -1,    -1,   111,    74,    75,    -1,
    3926      115,    78,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
    3927       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3928       67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
    3929       -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
    3930       -1,    -1,   119,    -1,    -1,    10,    11,    12,    13,    14,
    3931       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3932       25,    26,    27,    -1,   111,    30,    31,    32,   115,    -1,
    3933       -1,    -1,   119,    -1,    39,    40,    10,    11,    12,    13,
    3934       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    3935       24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
    3936       -1,    -1,    67,    -1,    -1,    39,    -1,    -1,    -1,    74,
    3937       75,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
    3938       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    3939       26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
    3940       74,    75,    -1,    39,    -1,    -1,   111,    -1,    -1,    -1,
    3941      115,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
    3942       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3943       -1,    67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,
    3944       -1,    -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,
    3945       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3946       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3947       -1,    -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,
    3948       -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
    3949       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3950       25,    26,    27,    -1,    67,    30,    31,    32,    -1,    -1,
    3951       -1,    74,    75,    -1,    39,    10,    11,    12,    13,    14,
    3952       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3953       25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
    3954       -1,    -1,    67,    -1,    39,    -1,    -1,    -1,   111,    74,
    3955       75,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
    3956       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3957       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
    3958       75,    -1,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,
    3959       -1,    -1,    -1,    -1,   119,    -1,    -1,    10,    11,    12,
    3960       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3961       23,    24,    25,    26,    27,    -1,   111,    30,    31,    32,
    3962       -1,    -1,    -1,    -1,   119,    -1,    39,    10,    11,    12,
    3963       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    3964       23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
    3965       -1,    -1,    -1,    -1,    67,    -1,    39,    -1,    -1,    -1,
    3966       -1,    74,    75,    -1,    -1,    10,    11,    12,    13,    14,
    3967       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    3968       25,    26,    27,    -1,    67,    30,    31,    32,    -1,    -1,
    3969       -1,    74,    75,    -1,    39,    -1,    -1,    -1,   111,    -1,
    3970       -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
    3971       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3972       -1,    -1,    67,    -1,    -1,    -1,    -1,    -1,   111,    74,
    3973       75,    -1,    -1,    -1,    -1,    -1,   119,     4,     5,     6,
    3974        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    3975       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    3976       27,    -1,    -1,    30,    31,    32,   111,    -1,    -1,    -1,
    3977       -1,    -1,    39,    -1,   119,    -1,    -1,    -1,    -1,    -1,
    3978       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3979       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3980       67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    37,
    3981       38,    -1,    40,    41,    -1,    43,    -1,    -1,    46,    47,
    3982       48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
    3983       -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,
    3984       -1,    -1,    -1,   110,    72,    -1,    -1,    -1,    76,    -1,
    3985       -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
    3986       -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
    3987       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3988       -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
    3989      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    3990      128,    -1,    37,    38,   132,    40,    41,    -1,    43,    -1,
    3991       -1,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
    3992       -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,    64,
    3993       -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
    3994       -1,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
    3995       -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
    3996       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    3997       -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
    3998       -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
    3999       -1,    -1,    -1,   128,    -1,    -1,    -1,   132,     4,     5,
    4000        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
    4001       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4002       26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
    4003       -1,    -1,    -1,    39,    -1,    37,    38,    -1,    40,    41,
    4004       -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
    4005       52,    53,    -1,    -1,    56,    57,    -1,    -1,    -1,    61,
    4006       62,    67,    64,    69,    66,    71,    -1,    -1,    74,    75,
    4007       72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
    4008       82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
    4009       96,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4010       -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
    4011       -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
    4012      122,   123,    -1,    -1,    37,    38,   128,    40,    41,    -1,
    4013       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
    4014       53,    -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,
    4015       -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,
    4016       -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,
    4017       83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
    4018       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4019       -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,
    4020       -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,   122,
    4021      123,    -1,    -1,    37,    38,   128,    40,    41,    -1,    43,
    4022       -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
    4023       -1,    -1,    -1,    57,    -1,    -1,    -1,    61,    62,    -1,
    4024       64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
    4025       -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
    4026       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    4027       94,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,    -1,
    4028       -1,    -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,
    4029      114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    4030       66,    -1,    -1,    -1,   128,    -1,    72,    -1,    -1,    -1,
    4031       76,    -1,    -1,    79,    80,    81,    82,    83,    84,    -1,
    4032       86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    37,
    4033       38,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4034       -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,    38,
    4035       -1,    40,   118,   119,   120,   121,   122,   123,    66,    -1,
    4036       -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
    4037       -1,    79,    80,    81,    82,    83,    84,    66,    86,    87,
    4038       -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,    -1,
    4039       79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
    4040       -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,    40,
    4041      118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
    4042      109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,   118,
    4043      119,   120,   121,   122,   123,    66,    -1,    -1,    -1,    -1,
    4044       -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
    4045       81,    82,    83,    84,    66,    86,    87,    -1,    -1,    -1,
    4046       72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,    81,
    4047       82,    83,    84,    -1,    86,    87,    -1,    -1,   109,    -1,
    4048       -1,    -1,    94,    37,    38,    -1,    40,   118,   119,   120,
    4049      121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,    -1,
    4050       -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,   121,
    4051      122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
    4052       -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
    4053       84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
    4054       94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4055       -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,    -1,
    4056       -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
    4057        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
    4058       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
    4059       24,    25,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,
    4060       -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
    4061       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4062       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4063       -1,    -1,    -1,    67,    -1,    69,    -1,    71,    72,    -1,
    4064       74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    83,
    4065       84,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    4066       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    4067       22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
    4068       32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
    4069       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4070       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4071       -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,    71,
    4072       -1,    -1,    74,    75,     3,     4,     5,     6,     7,     8,
    4073        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
    4074       19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
    4075       -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
    4076       39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4077       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4078       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
    4079       69,    -1,    71,    -1,    -1,    74,    75,     4,     5,     6,
    4080        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    4081       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    4082       27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
    4083       -1,    -1,    39,    -1,    10,    11,    12,    13,    14,    15,
    4084       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
    4085       26,    27,    -1,    -1,    30,    31,    32,    33,    34,    35,
    4086       67,    -1,    69,    39,    71,    -1,    -1,    74,    75,    -1,
    4087       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4088       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    4089       -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75
     4002      -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
     4003      -1,    73,    74
    40904004};
    40914005
     
    40964010       0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
    40974011      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
    4098       22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
    4099       36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
    4100       76,    83,    84,   109,   111,   119,   137,   140,   197,   211,
     4012      22,    23,    24,    25,    26,    29,    30,    31,    32,    35,
     4013      38,    39,    63,    66,    68,    70,    71,    73,    74,    75,
     4014      82,    83,   108,   110,   118,   136,   139,   196,   210,   211,
    41014015     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
    4102      222,   223,   224,   225,   226,   227,   228,   230,   231,   232,
    4103      233,   234,   235,   236,   237,   239,   240,   241,   242,   243,
    4104      244,   246,   254,   255,   282,   283,   284,   292,   295,   301,
    4105      302,   304,   306,   307,   313,   318,   322,   323,   324,   325,
    4106      326,   327,   328,   329,   349,   366,   367,   368,   369,    72,
    4107      119,   139,   140,   214,   216,   224,   226,   236,   240,   242,
    4108      283,    82,   109,   311,   312,   313,   311,   311,    72,    74,
    4109       75,    76,   138,   139,   272,   273,   293,   294,    74,    75,
    4110      273,   109,   304,    11,   198,   109,   119,   318,   323,   324,
    4111      325,   327,   328,   329,   112,   134,   111,   217,   224,   226,
    4112      322,   326,   365,   366,   369,   370,   135,   107,   131,   276,
    4113      114,   135,   172,    74,    75,   137,   271,   135,   135,   135,
    4114      116,   135,    74,    75,   109,   119,   308,   317,   318,   319,
    4115      320,   321,   322,   326,   330,   331,   332,   333,   334,   340,
    4116        3,    28,    78,   238,     3,     5,    74,   111,   119,   216,
    4117      227,   231,   234,   243,   284,   322,   326,   369,   214,   216,
    4118      226,   236,   240,   242,   283,   322,   326,    33,   232,   232,
    4119      227,   234,   135,   232,   227,   232,   227,    75,   109,   114,
    4120      273,   284,   114,   273,   232,   227,   116,   135,   135,     0,
    4121      134,   109,   172,   311,   311,   134,   111,   224,   226,   367,
    4122      271,   271,   226,   131,   109,   119,   308,   318,   322,   111,
    4123      119,   369,   305,   229,   313,   109,   289,   109,   109,    51,
    4124      109,    37,    38,    40,    66,    72,    76,    79,    80,    81,
    4125       82,    86,    87,    94,   109,   111,   118,   119,   120,   121,
    4126      122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
     4016     222,   223,   224,   225,   226,   227,   229,   230,   231,   232,
     4017     233,   234,   235,   236,   238,   239,   240,   241,   242,   243,
     4018     244,   252,   253,   279,   280,   281,   289,   292,   298,   299,
     4019     301,   303,   304,   310,   315,   319,   320,   321,   322,   323,
     4020     324,   325,   326,   346,   363,   364,   365,   366,    71,   118,
     4021     138,   139,   213,   215,   223,   225,   235,   239,   241,   280,
     4022      81,   108,   308,   309,   310,   308,   308,    71,    73,    74,
     4023      75,   137,   138,   269,   270,   290,   291,    73,    74,   270,
     4024     108,   301,    11,   197,   108,   118,   315,   320,   321,   322,
     4025     324,   325,   326,   111,   133,   110,   216,   223,   225,   319,
     4026     323,   362,   363,   366,   367,   134,   106,   130,   273,   113,
     4027     134,   171,    73,    74,   136,   268,   134,   134,   134,   115,
     4028     134,    73,    74,   108,   118,   305,   314,   315,   316,   317,
     4029     318,   319,   323,   327,   328,   329,   330,   331,   337,     3,
     4030      27,    77,   237,     3,     5,    73,   110,   118,   215,   226,
     4031     230,   233,   242,   281,   319,   323,   366,   213,   215,   225,
     4032     235,   239,   241,   280,   319,   323,    32,   231,   231,   226,
     4033     233,   134,   231,   226,   231,   226,    74,   108,   113,   270,
     4034     281,   113,   270,   231,   226,   115,   134,   134,     0,   133,
     4035     108,   171,   308,   308,   133,   110,   223,   225,   364,   268,
     4036     268,   225,   130,   108,   118,   305,   315,   319,   110,   118,
     4037     366,   302,   228,   310,   108,   286,   108,   108,    50,   108,
     4038      36,    37,    39,    65,    71,    75,    78,    79,    80,    81,
     4039      85,    86,    93,   108,   110,   117,   118,   119,   120,   121,
     4040     122,   135,   139,   140,   141,   142,   147,   148,   149,   150,
    41274041     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
    4128      161,   163,   165,   224,   275,   291,   365,   370,   226,   110,
    4129      110,   110,   110,   110,   110,   110,    74,    75,   111,   224,
    4130      271,   349,   367,   111,   119,   163,   216,   217,   223,   226,
    4131      230,   231,   236,   239,   240,   242,   261,   262,   266,   267,
    4132      268,   269,   283,   349,   361,   362,   363,   364,   369,   370,
    4133      112,   109,   322,   326,   369,   109,   116,   132,   111,   114,
    4134      119,   163,   277,   277,   115,   134,   116,   132,   109,   116,
    4135      132,   116,   132,   116,   132,   311,   132,   318,   319,   320,
    4136      321,   331,   332,   333,   334,   226,   317,   330,    64,   310,
    4137      111,   311,   348,   349,   311,   311,   172,   134,   109,   311,
    4138      348,   311,   311,   226,   308,   109,   109,   225,   226,   224,
    4139      226,   112,   134,   224,   365,   370,   172,   134,   271,   276,
    4140      216,   231,   322,   326,   172,   134,   293,   226,   236,   132,
    4141      226,   226,   291,    40,   111,   224,   247,   248,   249,   250,
    4142      365,   369,   245,   257,   273,   256,   226,   293,   132,   132,
    4143      304,   134,   139,   270,     3,   135,   206,   207,   221,   223,
    4144      226,   134,   310,   109,   310,   163,   318,   226,   109,   134,
    4145      271,   114,    33,    34,    35,   224,   285,   286,   288,   134,
    4146      129,   131,   290,   134,   227,   233,   234,   271,   314,   315,
    4147      316,   109,   141,   109,   148,   109,   148,   150,   109,   148,
    4148      109,   109,   148,   148,   139,   111,   163,   168,   172,   224,
    4149      274,   365,   112,   134,   150,   150,    82,    85,    86,    87,
    4150      109,   111,   113,   114,    97,    98,    99,   100,   101,   102,
    4151      103,   104,   105,   106,   131,   167,   150,   119,   124,   125,
    4152      121,   122,    88,    89,    90,    91,   126,   127,    92,    93,
    4153      120,   128,   129,    94,    95,   130,   131,   372,   109,   119,
    4154      344,   345,   346,   347,   348,   110,   116,   109,   348,   349,
    4155      109,   348,   349,   134,   109,   224,   367,   112,   134,   111,
    4156      119,   135,   224,   226,   360,   361,   369,   370,   135,   109,
    4157      111,   119,   318,   335,   336,   337,   338,   339,   340,   341,
    4158      342,   343,   349,   350,   351,   352,   353,   354,   355,   119,
    4159      369,   226,   135,   135,   119,   224,   226,   362,   271,   224,
    4160      349,   362,   271,   109,   134,   134,   134,   112,   134,    72,
    4161       80,   111,   113,   140,   273,   277,   278,   279,   280,   281,
    4162      134,   134,   134,   134,   134,   134,   308,   110,   110,   110,
    4163      110,   110,   110,   110,   317,   330,   109,   276,   112,   206,
    4164      134,   308,   168,   275,   168,   275,   308,   111,   206,   310,
    4165      172,   134,   206,   110,   249,   250,   112,   134,   109,   117,
    4166      119,   251,   253,   317,   318,   330,   348,   356,   357,   358,
    4167      359,   115,   248,   116,   132,   116,   132,   273,   114,   116,
    4168      371,   131,   258,   114,   226,   263,   264,   265,   268,   269,
    4169      110,   116,   172,   134,   119,   163,   134,   223,   226,   262,
    4170      361,   369,   302,   303,   109,   119,   335,   110,   116,   372,
    4171      273,   285,   109,   114,   273,   275,   285,   110,   116,   109,
    4172      141,   110,   117,   274,   274,   274,   111,   139,   145,   163,
    4173      275,   274,   112,   134,   110,   116,   110,   109,   119,   356,
    4174      110,   116,   163,   111,   139,   111,   144,   145,   134,   111,
    4175      139,   144,   163,   163,   150,   150,   150,   151,   151,   152,
    4176      152,   153,   153,   153,   153,   154,   154,   155,   156,   157,
    4177      158,   159,   117,   168,   163,   134,   345,   346,   347,   226,
    4178      344,   311,   311,   163,   275,   134,   270,   119,   134,   224,
    4179      349,   362,   226,   230,   112,   134,   112,   369,   112,   109,
    4180      134,   318,   336,   337,   338,   341,   351,   352,   353,   112,
    4181      134,   226,   335,   339,   350,   109,   311,   354,   372,   311,
    4182      311,   372,   109,   311,   354,   311,   311,   311,   311,   349,
    4183      224,   360,   370,   271,   112,   116,   112,   116,   372,   224,
    4184      362,   372,   259,   260,   261,   262,   259,   259,   271,   163,
    4185      134,   111,   273,   117,   116,   371,   277,    80,   111,   117,
    4186      281,    29,   208,   209,   271,   259,   139,   308,   139,   310,
    4187      109,   348,   349,   109,   348,   349,   141,   349,   172,   263,
    4188      110,   110,   110,   110,   112,   172,   206,   172,   114,   132,
    4189      132,   111,   318,   357,   358,   359,   161,   162,   226,   356,
    4190      252,   253,   252,   311,   311,   273,   311,   247,   273,   115,
    4191      162,   257,   135,   135,   139,   221,   135,   135,   259,   109,
    4192      119,   369,   135,   115,   226,   286,   287,   135,   134,   134,
    4193      109,   135,   110,   315,   168,   169,   117,   132,   111,   141,
    4194      199,   200,   201,   110,   116,   110,   134,   117,   110,   110,
    4195      110,   163,   226,   114,   150,   165,   163,   164,   166,   116,
    4196      135,   134,   134,   110,   116,   163,   134,   115,   161,   117,
    4197      263,   110,   110,   110,   344,   263,   110,   259,   224,   362,
    4198      111,   119,   163,   163,   226,   341,   263,   110,   110,   110,
    4199      110,   110,   110,   110,     7,   226,   335,   339,   350,   134,
    4200      134,   372,   134,   134,   110,   135,   135,   135,   135,   276,
    4201      135,   161,   162,   163,   309,   134,   277,   279,   115,   134,
    4202      210,   273,    40,    41,    43,    46,    47,    48,    49,    50,
    4203       51,    52,    53,    57,    61,    62,   111,   128,   139,   169,
    4204      170,   171,   172,   173,   174,   176,   177,   189,   191,   192,
    4205      197,   211,   307,    29,   135,   131,   276,   134,   134,   110,
    4206      135,   172,   247,   112,   110,   110,   110,   356,   251,   115,
    4207      258,   371,   110,   116,   112,   112,   135,   226,   116,   372,
    4208      289,   110,   285,   214,   216,   224,   297,   298,   299,   300,
    4209      291,   110,   110,   117,   162,   109,   110,   117,   116,   139,
    4210      163,   163,   278,   116,   135,   166,   112,   139,   146,   147,
    4211      163,   145,   135,   146,   161,   165,   135,   109,   348,   349,
    4212      135,   135,   134,   135,   135,   135,   163,   110,   135,   109,
    4213      348,   349,   109,   354,   109,   354,   349,   225,     7,   119,
    4214      135,   163,   263,   263,   262,   266,   266,   267,   116,   116,
    4215      110,   110,   112,    96,   123,   135,   135,   146,   277,   163,
    4216      116,   132,   211,   215,   226,   230,   109,   109,   170,   109,
    4217      109,   132,   139,   132,   139,   119,   139,   169,   109,   172,
    4218      164,   164,   112,   143,   117,   132,   135,   134,   135,   210,
    4219      110,   163,   263,   263,   311,   110,   115,   109,   348,   349,
    4220      115,   134,   110,   134,   135,   308,   115,   134,   135,   135,
    4221      110,   114,   199,   112,   162,   132,   199,   201,   110,   116,
    4222      135,   371,   164,   112,   135,    85,   113,   116,   135,   135,
    4223      112,   135,   110,   134,   110,   110,   112,   112,   112,   135,
    4224      110,   134,   134,   134,   163,   163,   135,   112,   135,   135,
    4225      135,   135,   134,   134,   162,   162,   112,   112,   135,   135,
    4226      273,   226,   168,   168,    47,   168,   134,   132,   132,   168,
    4227      132,   132,   168,    58,    59,    60,   193,   194,   195,   132,
    4228       63,   132,   114,   311,   174,   115,   132,   135,   135,   134,
    4229       96,   268,   269,   110,   298,   116,   132,   116,   132,   115,
    4230      296,   117,   141,   110,   110,   117,   166,   112,   115,   112,
    4231      111,   147,   111,   147,   147,   112,   112,   112,   263,   112,
    4232      263,   263,   263,   135,   135,   112,   112,   110,   110,   112,
    4233      116,    96,   262,    96,   135,   112,   112,   110,   110,   109,
    4234      110,   169,   190,   211,   132,   110,   109,   109,   172,   195,
    4235       58,    59,   163,   144,   170,   110,   110,   263,   114,   134,
    4236      134,   297,   141,   202,   109,   132,   202,   135,   117,   134,
    4237      134,   135,   135,   135,   135,   112,   112,   134,   135,   112,
    4238      170,    44,    45,   114,   180,   181,   182,   168,   170,   135,
    4239      110,   169,   114,   182,    96,   134,    96,   134,   109,   109,
    4240      132,   115,   135,   134,   271,   308,   115,   116,   117,   162,
    4241      110,   112,   163,   146,   146,   110,   110,   110,   110,   266,
    4242       42,   162,   178,   179,   309,   117,   134,   170,   180,   110,
    4243      132,   170,   132,   134,   110,   134,   110,   134,    96,   134,
    4244       96,   134,   132,   110,   297,   141,   139,   203,   110,   132,
    4245      117,   135,   135,   170,    96,   116,   117,   135,   204,   205,
    4246      211,   132,   169,   169,   204,   172,   196,   224,   365,   172,
    4247      196,   110,   134,   110,   134,   115,   110,   116,   163,   112,
    4248      112,   162,   178,   181,   183,   184,   134,   132,   181,   185,
    4249      186,   135,   109,   119,   308,   356,   139,   135,   172,   196,
    4250      172,   196,   109,   132,   139,   170,   175,   115,   181,   211,
    4251      169,    56,   175,   188,   115,   181,   110,   226,   110,   135,
    4252      135,   291,   170,   175,   132,   187,   188,   175,   188,   172,
    4253      172,   110,   110,   110,   187,   135,   135,   172,   172,   135,
    4254      135
     4042     162,   164,   223,   272,   288,   362,   367,   225,   109,   109,
     4043     109,   109,   109,   109,   109,    73,    74,   110,   223,   268,
     4044     346,   364,   110,   118,   162,   215,   216,   222,   225,   229,
     4045     230,   235,   238,   239,   241,   258,   259,   263,   264,   265,
     4046     266,   280,   346,   358,   359,   360,   361,   366,   367,   111,
     4047     108,   319,   323,   366,   108,   115,   131,   110,   113,   118,
     4048     162,   274,   274,   114,   133,   115,   131,   108,   115,   131,
     4049     115,   131,   115,   131,   308,   131,   315,   316,   317,   318,
     4050     328,   329,   330,   331,   225,   314,   327,    63,   307,   110,
     4051     308,   345,   346,   308,   308,   171,   133,   108,   308,   345,
     4052     308,   308,   225,   305,   108,   108,   224,   225,   223,   225,
     4053     111,   133,   223,   362,   367,   171,   133,   268,   273,   215,
     4054     230,   319,   323,   171,   133,   290,   225,   235,   131,   225,
     4055     225,   288,    39,   110,   223,   245,   246,   247,   248,   362,
     4056     366,   113,   254,   270,   113,   225,   290,   131,   131,   301,
     4057     133,   138,   267,     3,   134,   205,   206,   220,   222,   225,
     4058     133,   307,   108,   307,   162,   315,   225,   108,   133,   268,
     4059     113,    32,    33,    34,   223,   282,   283,   285,   133,   128,
     4060     130,   287,   133,   226,   232,   233,   268,   311,   312,   313,
     4061     108,   140,   108,   147,   108,   147,   149,   108,   147,   108,
     4062     108,   147,   147,   138,   110,   162,   167,   171,   223,   271,
     4063     362,   111,   133,   149,   149,    81,    84,    85,    86,   108,
     4064     110,   112,   113,    96,    97,    98,    99,   100,   101,   102,
     4065     103,   104,   105,   130,   166,   149,   118,   123,   124,   120,
     4066     121,    87,    88,    89,    90,   125,   126,    91,    92,   119,
     4067     127,   128,    93,    94,   129,   130,   369,   108,   118,   341,
     4068     342,   343,   344,   345,   109,   115,   108,   345,   346,   108,
     4069     345,   346,   133,   108,   223,   364,   111,   133,   110,   118,
     4070     134,   223,   225,   357,   358,   366,   367,   134,   108,   110,
     4071     118,   315,   332,   333,   334,   335,   336,   337,   338,   339,
     4072     340,   346,   347,   348,   349,   350,   351,   352,   118,   366,
     4073     225,   134,   134,   118,   223,   225,   359,   268,   223,   346,
     4074     359,   268,   108,   133,   133,   133,   111,   133,    71,    79,
     4075     110,   112,   139,   270,   274,   275,   276,   277,   278,   133,
     4076     133,   133,   133,   133,   133,   305,   109,   109,   109,   109,
     4077     109,   109,   109,   314,   327,   108,   273,   111,   205,   133,
     4078     305,   167,   272,   167,   272,   305,   110,   205,   307,   171,
     4079     133,   205,   109,   247,   248,   111,   133,   108,   116,   118,
     4080     249,   251,   314,   315,   327,   345,   353,   354,   355,   356,
     4081     114,   246,   115,   131,   115,   131,   270,   245,   115,   368,
     4082     130,   255,   254,   225,   260,   261,   262,   265,   266,   109,
     4083     115,   171,   133,   118,   162,   133,   222,   225,   259,   358,
     4084     366,   299,   300,   108,   118,   332,   109,   115,   369,   270,
     4085     282,   108,   113,   270,   272,   282,   109,   115,   108,   140,
     4086     109,   116,   271,   271,   271,   110,   138,   144,   162,   272,
     4087     271,   111,   133,   109,   115,   109,   108,   118,   353,   109,
     4088     115,   162,   110,   138,   110,   143,   144,   133,   110,   138,
     4089     143,   162,   162,   149,   149,   149,   150,   150,   151,   151,
     4090     152,   152,   152,   152,   153,   153,   154,   155,   156,   157,
     4091     158,   116,   167,   162,   133,   342,   343,   344,   225,   341,
     4092     308,   308,   162,   272,   133,   267,   118,   133,   223,   346,
     4093     359,   225,   229,   111,   133,   111,   366,   111,   108,   133,
     4094     315,   333,   334,   335,   338,   348,   349,   350,   111,   133,
     4095     225,   332,   336,   347,   108,   308,   351,   369,   308,   308,
     4096     369,   108,   308,   351,   308,   308,   308,   308,   346,   223,
     4097     357,   367,   268,   111,   115,   111,   115,   369,   223,   359,
     4098     369,   256,   257,   258,   259,   256,   256,   268,   162,   133,
     4099     110,   270,   116,   115,   368,   274,    79,   110,   116,   278,
     4100      28,   207,   208,   268,   256,   138,   305,   138,   307,   108,
     4101     345,   346,   108,   345,   346,   140,   346,   171,   260,   109,
     4102     109,   109,   109,   111,   171,   205,   171,   113,   131,   131,
     4103     110,   315,   354,   355,   356,   160,   161,   225,   353,   250,
     4104     251,   250,   308,   308,   270,   308,   114,   270,   114,   161,
     4105     368,   134,   134,   138,   220,   134,   134,   256,   108,   118,
     4106     366,   134,   114,   225,   283,   284,   134,   133,   133,   108,
     4107     134,   109,   312,   167,   168,   116,   131,   110,   140,   198,
     4108     199,   200,   109,   115,   109,   133,   116,   109,   109,   109,
     4109     162,   225,   113,   149,   164,   162,   163,   165,   115,   134,
     4110     133,   133,   109,   115,   162,   133,   114,   160,   116,   260,
     4111     109,   109,   109,   341,   260,   109,   256,   223,   359,   110,
     4112     118,   162,   162,   225,   338,   260,   109,   109,   109,   109,
     4113     109,   109,   109,     7,   225,   332,   336,   347,   133,   133,
     4114     369,   133,   133,   109,   134,   134,   134,   134,   273,   134,
     4115     160,   161,   162,   306,   133,   274,   276,   114,   133,   209,
     4116     270,    39,    40,    42,    45,    46,    47,    48,    49,    50,
     4117      51,    52,    56,    60,    61,   110,   127,   138,   168,   169,
     4118     170,   171,   172,   173,   175,   176,   188,   190,   191,   196,
     4119     210,   304,    28,   134,   130,   273,   133,   133,   109,   134,
     4120     171,   245,   111,   109,   109,   109,   353,   249,   255,   114,
     4121     109,   115,   111,   111,   134,   225,   115,   369,   286,   109,
     4122     282,   213,   215,   223,   294,   295,   296,   297,   288,   109,
     4123     109,   116,   161,   108,   109,   116,   115,   138,   162,   162,
     4124     275,   115,   134,   165,   111,   138,   145,   146,   162,   144,
     4125     134,   145,   160,   164,   134,   108,   345,   346,   134,   134,
     4126     133,   134,   134,   134,   162,   109,   134,   108,   345,   346,
     4127     108,   351,   108,   351,   346,   224,     7,   118,   134,   162,
     4128     260,   260,   259,   263,   263,   264,   115,   115,   109,   109,
     4129     111,    95,   122,   134,   134,   145,   274,   162,   115,   131,
     4130     210,   214,   225,   229,   108,   108,   169,   108,   108,   131,
     4131     138,   131,   138,   118,   138,   168,   108,   171,   163,   163,
     4132     111,   142,   116,   131,   134,   133,   134,   209,   109,   162,
     4133     260,   260,   308,   109,   114,   108,   345,   346,   133,   109,
     4134     133,   134,   305,   114,   133,   134,   134,   109,   113,   198,
     4135     111,   161,   131,   198,   200,   109,   115,   134,   368,   163,
     4136     111,   134,    84,   112,   115,   134,   134,   111,   134,   109,
     4137     133,   109,   109,   111,   111,   111,   134,   109,   133,   133,
     4138     133,   162,   162,   134,   111,   134,   134,   134,   134,   133,
     4139     133,   161,   161,   111,   111,   134,   134,   270,   225,   167,
     4140     167,    46,   167,   133,   131,   131,   167,   131,   131,   167,
     4141      57,    58,    59,   192,   193,   194,   131,    62,   131,   113,
     4142     308,   173,   114,   131,   134,   134,   133,    95,   265,   266,
     4143     109,   295,   115,   131,   115,   131,   114,   293,   116,   140,
     4144     109,   109,   116,   165,   111,   114,   111,   110,   146,   110,
     4145     146,   146,   111,   111,   111,   260,   111,   260,   260,   260,
     4146     134,   134,   111,   111,   109,   109,   111,   115,    95,   259,
     4147      95,   134,   111,   111,   109,   109,   108,   109,   168,   189,
     4148     210,   131,   109,   108,   108,   171,   194,    57,    58,   162,
     4149     143,   169,   109,   109,   260,   113,   133,   133,   294,   140,
     4150     201,   108,   131,   201,   134,   116,   133,   133,   134,   134,
     4151     134,   134,   111,   111,   133,   134,   111,   169,    43,    44,
     4152     113,   179,   180,   181,   167,   169,   134,   109,   168,   113,
     4153     181,    95,   133,    95,   133,   108,   108,   131,   114,   134,
     4154     133,   268,   305,   114,   115,   116,   161,   109,   111,   162,
     4155     145,   145,   109,   109,   109,   109,   263,    41,   161,   177,
     4156     178,   306,   116,   133,   169,   179,   109,   131,   169,   131,
     4157     133,   109,   133,   109,   133,    95,   133,    95,   133,   131,
     4158     109,   294,   140,   138,   202,   109,   131,   116,   134,   134,
     4159     169,    95,   115,   116,   134,   203,   204,   210,   131,   168,
     4160     168,   203,   171,   195,   223,   362,   171,   195,   109,   133,
     4161     109,   133,   114,   109,   115,   162,   111,   111,   161,   177,
     4162     180,   182,   183,   133,   131,   180,   184,   185,   134,   108,
     4163     118,   305,   353,   138,   134,   171,   195,   171,   195,   108,
     4164     131,   138,   169,   174,   114,   180,   210,   168,    55,   174,
     4165     187,   114,   180,   109,   225,   109,   134,   134,   288,   169,
     4166     174,   131,   186,   187,   174,   187,   171,   171,   109,   109,
     4167     109,   186,   134,   134,   171,   171,   134,   134
    42554168};
    42564169
     
    50895002
    50905003/* Line 1806 of yacc.c  */
    5091 #line 292 "parser.yy"
     5004#line 290 "parser.yy"
    50925005    {
    50935006                        typedefTable.enterScope();
     
    50985011
    50995012/* Line 1806 of yacc.c  */
    5100 #line 298 "parser.yy"
     5013#line 296 "parser.yy"
    51015014    {
    51025015                        typedefTable.leaveScope();
     
    51075020
    51085021/* Line 1806 of yacc.c  */
     5022#line 305 "parser.yy"
     5023    { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     5024    break;
     5025
     5026  case 5:
     5027
     5028/* Line 1806 of yacc.c  */
     5029#line 306 "parser.yy"
     5030    { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     5031    break;
     5032
     5033  case 6:
     5034
     5035/* Line 1806 of yacc.c  */
    51095036#line 307 "parser.yy"
    5110     { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
    5111     break;
    5112 
    5113   case 5:
    5114 
    5115 /* Line 1806 of yacc.c  */
    5116 #line 308 "parser.yy"
    5117     { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
    5118     break;
    5119 
    5120   case 6:
    5121 
    5122 /* Line 1806 of yacc.c  */
    5123 #line 309 "parser.yy"
    51245037    { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
    51255038    break;
     
    51285041
    51295042/* Line 1806 of yacc.c  */
    5130 #line 334 "parser.yy"
     5043#line 332 "parser.yy"
    51315044    { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
    51325045    break;
     
    51355048
    51365049/* Line 1806 of yacc.c  */
    5137 #line 335 "parser.yy"
     5050#line 333 "parser.yy"
    51385051    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
    51395052    break;
    51405053
    51415054  case 18:
     5055
     5056/* Line 1806 of yacc.c  */
     5057#line 340 "parser.yy"
     5058    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     5059    break;
     5060
     5061  case 19:
    51425062
    51435063/* Line 1806 of yacc.c  */
     
    51465066    break;
    51475067
    5148   case 19:
     5068  case 20:
    51495069
    51505070/* Line 1806 of yacc.c  */
    51515071#line 344 "parser.yy"
    5152     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    5153     break;
    5154 
    5155   case 20:
     5072    { (yyval.en) = (yyvsp[(2) - (3)].en); }
     5073    break;
     5074
     5075  case 21:
    51565076
    51575077/* Line 1806 of yacc.c  */
    51585078#line 346 "parser.yy"
    5159     { (yyval.en) = (yyvsp[(2) - (3)].en); }
    5160     break;
    5161 
    5162   case 21:
    5163 
    5164 /* Line 1806 of yacc.c  */
    5165 #line 348 "parser.yy"
    51665079    { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
    51675080    break;
     
    51705083
    51715084/* Line 1806 of yacc.c  */
     5085#line 356 "parser.yy"
     5086    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
     5087    break;
     5088
     5089  case 24:
     5090
     5091/* Line 1806 of yacc.c  */
    51725092#line 358 "parser.yy"
    5173     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
    5174     break;
    5175 
    5176   case 24:
    5177 
    5178 /* Line 1806 of yacc.c  */
    5179 #line 360 "parser.yy"
    51805093    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
    51815094    break;
     
    51845097
    51855098/* Line 1806 of yacc.c  */
    5186 #line 364 "parser.yy"
     5099#line 362 "parser.yy"
    51875100    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51885101    break;
     
    51915104
    51925105/* Line 1806 of yacc.c  */
    5193 #line 367 "parser.yy"
     5106#line 365 "parser.yy"
    51945107    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
    51955108    break;
     
    51985111
    51995112/* Line 1806 of yacc.c  */
     5113#line 368 "parser.yy"
     5114    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
     5115    break;
     5116
     5117  case 30:
     5118
     5119/* Line 1806 of yacc.c  */
    52005120#line 370 "parser.yy"
    5201     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
    5202     break;
    5203 
    5204   case 30:
     5121    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     5122    break;
     5123
     5124  case 31:
    52055125
    52065126/* Line 1806 of yacc.c  */
    52075127#line 372 "parser.yy"
    5208     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
    5209     break;
    5210 
    5211   case 31:
     5128    { (yyval.en) = 0; }
     5129    break;
     5130
     5131  case 32:
    52125132
    52135133/* Line 1806 of yacc.c  */
    52145134#line 374 "parser.yy"
    5215     { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
    5216     break;
    5217 
    5218   case 32:
    5219 
    5220 /* Line 1806 of yacc.c  */
    5221 #line 376 "parser.yy"
    52225135    {
    52235136                        Token fn; fn.str = new std::string( "?{}" ); // location undefined
     
    52295142
    52305143/* Line 1806 of yacc.c  */
    5231 #line 385 "parser.yy"
     5144#line 383 "parser.yy"
    52325145    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    52335146    break;
     
    52365149
    52375150/* Line 1806 of yacc.c  */
    5238 #line 390 "parser.yy"
     5151#line 388 "parser.yy"
    52395152    { (yyval.en) = 0; }
    52405153    break;
     
    52435156
    52445157/* Line 1806 of yacc.c  */
    5245 #line 393 "parser.yy"
     5158#line 391 "parser.yy"
    52465159    { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
    52475160    break;
     
    52505163
    52515164/* Line 1806 of yacc.c  */
     5165#line 396 "parser.yy"
     5166    { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     5167    break;
     5168
     5169  case 39:
     5170
     5171/* Line 1806 of yacc.c  */
    52525172#line 398 "parser.yy"
    5253     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
    5254     break;
    5255 
    5256   case 39:
    5257 
    5258 /* Line 1806 of yacc.c  */
    5259 #line 400 "parser.yy"
    52605173    { (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) )))); }
    52615174    break;
     
    52645177
    52655178/* Line 1806 of yacc.c  */
    5266 #line 405 "parser.yy"
     5179#line 403 "parser.yy"
    52675180    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    52685181    break;
     
    52715184
    52725185/* Line 1806 of yacc.c  */
    5273 #line 410 "parser.yy"
     5186#line 408 "parser.yy"
    52745187    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
    52755188    break;
     
    52785191
    52795192/* Line 1806 of yacc.c  */
     5193#line 412 "parser.yy"
     5194    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     5195    break;
     5196
     5197  case 44:
     5198
     5199/* Line 1806 of yacc.c  */
    52805200#line 414 "parser.yy"
    5281     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    5282     break;
    5283 
    5284   case 44:
     5201    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     5202    break;
     5203
     5204  case 45:
    52855205
    52865206/* Line 1806 of yacc.c  */
    52875207#line 416 "parser.yy"
    5288     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    5289     break;
    5290 
    5291   case 45:
     5208    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     5209    break;
     5210
     5211  case 46:
    52925212
    52935213/* Line 1806 of yacc.c  */
    52945214#line 418 "parser.yy"
    5295     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
    5296     break;
    5297 
    5298   case 46:
    5299 
    5300 /* Line 1806 of yacc.c  */
    5301 #line 420 "parser.yy"
    53025215    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
    53035216    break;
    53045217
    53055218  case 48:
     5219
     5220/* Line 1806 of yacc.c  */
     5221#line 426 "parser.yy"
     5222    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     5223    break;
     5224
     5225  case 49:
    53065226
    53075227/* Line 1806 of yacc.c  */
     
    53105230    break;
    53115231
    5312   case 49:
     5232  case 50:
    53135233
    53145234/* Line 1806 of yacc.c  */
    53155235#line 430 "parser.yy"
    5316     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
    5317     break;
    5318 
    5319   case 50:
     5236    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     5237    break;
     5238
     5239  case 51:
    53205240
    53215241/* Line 1806 of yacc.c  */
    53225242#line 432 "parser.yy"
    5323     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
    5324     break;
    5325 
    5326   case 51:
     5243    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     5244    break;
     5245
     5246  case 52:
    53275247
    53285248/* Line 1806 of yacc.c  */
    53295249#line 434 "parser.yy"
    5330     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
    5331     break;
    5332 
    5333   case 52:
     5250    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     5251    break;
     5252
     5253  case 53:
    53345254
    53355255/* Line 1806 of yacc.c  */
    53365256#line 436 "parser.yy"
    5337     { (yyval.en) = (yyvsp[(2) - (2)].en); }
    5338     break;
    5339 
    5340   case 53:
     5257    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     5258    break;
     5259
     5260  case 54:
    53415261
    53425262/* Line 1806 of yacc.c  */
    53435263#line 438 "parser.yy"
    5344     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
    5345     break;
    5346 
    5347   case 54:
     5264    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
     5265    break;
     5266
     5267  case 55:
    53485268
    53495269/* Line 1806 of yacc.c  */
    53505270#line 440 "parser.yy"
    5351     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
    5352     break;
    5353 
    5354   case 55:
    5355 
    5356 /* Line 1806 of yacc.c  */
    5357 #line 442 "parser.yy"
    53585271    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
    53595272    break;
     
    53625275
    53635276/* Line 1806 of yacc.c  */
     5277#line 446 "parser.yy"
     5278    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     5279    break;
     5280
     5281  case 57:
     5282
     5283/* Line 1806 of yacc.c  */
    53645284#line 448 "parser.yy"
    5365     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
    5366     break;
    5367 
    5368   case 57:
     5285    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5286    break;
     5287
     5288  case 58:
    53695289
    53705290/* Line 1806 of yacc.c  */
    53715291#line 450 "parser.yy"
    5372     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    5373     break;
    5374 
    5375   case 58:
     5292    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
     5293    break;
     5294
     5295  case 59:
    53765296
    53775297/* Line 1806 of yacc.c  */
    53785298#line 452 "parser.yy"
    5379     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
    5380     break;
    5381 
    5382   case 59:
     5299    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     5300    break;
     5301
     5302  case 60:
    53835303
    53845304/* Line 1806 of yacc.c  */
    53855305#line 454 "parser.yy"
    5386     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
    5387     break;
    5388 
    5389   case 60:
     5306    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     5307    break;
     5308
     5309  case 61:
    53905310
    53915311/* Line 1806 of yacc.c  */
    53925312#line 456 "parser.yy"
    5393     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
    5394     break;
    5395 
    5396   case 61:
     5313    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     5314    break;
     5315
     5316  case 62:
    53975317
    53985318/* Line 1806 of yacc.c  */
    53995319#line 458 "parser.yy"
    5400     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
    5401     break;
    5402 
    5403   case 62:
     5320    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     5321    break;
     5322
     5323  case 63:
    54045324
    54055325/* Line 1806 of yacc.c  */
    54065326#line 460 "parser.yy"
    5407     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
    5408     break;
    5409 
    5410   case 63:
     5327    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
     5328    break;
     5329
     5330  case 64:
    54115331
    54125332/* Line 1806 of yacc.c  */
    54135333#line 462 "parser.yy"
    5414     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
    5415     break;
    5416 
    5417   case 64:
    5418 
    5419 /* Line 1806 of yacc.c  */
    5420 #line 464 "parser.yy"
    54215334    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); }
    54225335    break;
     
    54255338
    54265339/* Line 1806 of yacc.c  */
     5340#line 466 "parser.yy"
     5341    { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     5342    break;
     5343
     5344  case 66:
     5345
     5346/* Line 1806 of yacc.c  */
     5347#line 467 "parser.yy"
     5348    { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     5349    break;
     5350
     5351  case 67:
     5352
     5353/* Line 1806 of yacc.c  */
    54275354#line 468 "parser.yy"
    5428     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
    5429     break;
    5430 
    5431   case 66:
     5355    { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     5356    break;
     5357
     5358  case 68:
    54325359
    54335360/* Line 1806 of yacc.c  */
    54345361#line 469 "parser.yy"
    5435     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
    5436     break;
    5437 
    5438   case 67:
    5439 
    5440 /* Line 1806 of yacc.c  */
    5441 #line 470 "parser.yy"
    5442     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
    5443     break;
    5444 
    5445   case 68:
    5446 
    5447 /* Line 1806 of yacc.c  */
    5448 #line 471 "parser.yy"
    54495362    { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
    54505363    break;
    54515364
    54525365  case 70:
     5366
     5367/* Line 1806 of yacc.c  */
     5368#line 475 "parser.yy"
     5369    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     5370    break;
     5371
     5372  case 71:
    54535373
    54545374/* Line 1806 of yacc.c  */
     
    54575377    break;
    54585378
    5459   case 71:
    5460 
    5461 /* Line 1806 of yacc.c  */
    5462 #line 479 "parser.yy"
    5463     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
    5464     break;
    5465 
    54665379  case 73:
    54675380
    54685381/* Line 1806 of yacc.c  */
     5382#line 483 "parser.yy"
     5383    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5384    break;
     5385
     5386  case 74:
     5387
     5388/* Line 1806 of yacc.c  */
    54695389#line 485 "parser.yy"
    5470     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5471     break;
    5472 
    5473   case 74:
     5390    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5391    break;
     5392
     5393  case 75:
    54745394
    54755395/* Line 1806 of yacc.c  */
    54765396#line 487 "parser.yy"
    5477     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5478     break;
    5479 
    5480   case 75:
    5481 
    5482 /* Line 1806 of yacc.c  */
    5483 #line 489 "parser.yy"
    54845397    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54855398    break;
     
    54885401
    54895402/* Line 1806 of yacc.c  */
     5403#line 493 "parser.yy"
     5404    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5405    break;
     5406
     5407  case 78:
     5408
     5409/* Line 1806 of yacc.c  */
    54905410#line 495 "parser.yy"
    5491     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5492     break;
    5493 
    5494   case 78:
    5495 
    5496 /* Line 1806 of yacc.c  */
    5497 #line 497 "parser.yy"
    54985411    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    54995412    break;
     
    55025415
    55035416/* Line 1806 of yacc.c  */
     5417#line 501 "parser.yy"
     5418    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5419    break;
     5420
     5421  case 81:
     5422
     5423/* Line 1806 of yacc.c  */
    55045424#line 503 "parser.yy"
    5505     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5506     break;
    5507 
    5508   case 81:
    5509 
    5510 /* Line 1806 of yacc.c  */
    5511 #line 505 "parser.yy"
    55125425    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55135426    break;
     
    55165429
    55175430/* Line 1806 of yacc.c  */
     5431#line 509 "parser.yy"
     5432    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5433    break;
     5434
     5435  case 84:
     5436
     5437/* Line 1806 of yacc.c  */
    55185438#line 511 "parser.yy"
    5519     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5520     break;
    5521 
    5522   case 84:
     5439    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5440    break;
     5441
     5442  case 85:
    55235443
    55245444/* Line 1806 of yacc.c  */
    55255445#line 513 "parser.yy"
    5526     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5527     break;
    5528 
    5529   case 85:
     5446    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5447    break;
     5448
     5449  case 86:
    55305450
    55315451/* Line 1806 of yacc.c  */
    55325452#line 515 "parser.yy"
    5533     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5534     break;
    5535 
    5536   case 86:
    5537 
    5538 /* Line 1806 of yacc.c  */
    5539 #line 517 "parser.yy"
    55405453    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55415454    break;
     
    55445457
    55455458/* Line 1806 of yacc.c  */
     5459#line 521 "parser.yy"
     5460    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5461    break;
     5462
     5463  case 89:
     5464
     5465/* Line 1806 of yacc.c  */
    55465466#line 523 "parser.yy"
    5547     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5548     break;
    5549 
    5550   case 89:
    5551 
    5552 /* Line 1806 of yacc.c  */
    5553 #line 525 "parser.yy"
    55545467    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55555468    break;
     
    55585471
    55595472/* Line 1806 of yacc.c  */
    5560 #line 531 "parser.yy"
     5473#line 529 "parser.yy"
    55615474    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55625475    break;
     
    55655478
    55665479/* Line 1806 of yacc.c  */
    5567 #line 537 "parser.yy"
     5480#line 535 "parser.yy"
    55685481    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55695482    break;
     
    55725485
    55735486/* Line 1806 of yacc.c  */
    5574 #line 543 "parser.yy"
     5487#line 541 "parser.yy"
    55755488    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55765489    break;
     
    55795492
    55805493/* Line 1806 of yacc.c  */
    5581 #line 549 "parser.yy"
     5494#line 547 "parser.yy"
    55825495    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55835496    break;
     
    55865499
    55875500/* Line 1806 of yacc.c  */
    5588 #line 555 "parser.yy"
     5501#line 553 "parser.yy"
    55895502    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    55905503    break;
     
    55935506
    55945507/* Line 1806 of yacc.c  */
     5508#line 559 "parser.yy"
     5509    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     5510    break;
     5511
     5512  case 102:
     5513
     5514/* Line 1806 of yacc.c  */
    55955515#line 561 "parser.yy"
     5516    { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     5517    break;
     5518
     5519  case 103:
     5520
     5521/* Line 1806 of yacc.c  */
     5522#line 563 "parser.yy"
    55965523    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    55975524    break;
    55985525
    5599   case 102:
    5600 
    5601 /* Line 1806 of yacc.c  */
    5602 #line 563 "parser.yy"
    5603     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    5604     break;
    5605 
    5606   case 103:
    5607 
    5608 /* Line 1806 of yacc.c  */
    5609 #line 565 "parser.yy"
    5610     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
    5611     break;
    5612 
    56135526  case 106:
    56145527
    56155528/* Line 1806 of yacc.c  */
     5529#line 574 "parser.yy"
     5530    { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5531    break;
     5532
     5533  case 107:
     5534
     5535/* Line 1806 of yacc.c  */
    56165536#line 576 "parser.yy"
    5617     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5618     break;
    5619 
    5620   case 107:
     5537    { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     5538    break;
     5539
     5540  case 108:
    56215541
    56225542/* Line 1806 of yacc.c  */
    56235543#line 578 "parser.yy"
    5624     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    5625     break;
    5626 
    5627   case 108:
    5628 
    5629 /* Line 1806 of yacc.c  */
    5630 #line 580 "parser.yy"
    56315544    { (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) ); }
    56325545    break;
     
    56355548
    56365549/* Line 1806 of yacc.c  */
    5637 #line 585 "parser.yy"
     5550#line 583 "parser.yy"
    56385551    { (yyval.en) = new NullExprNode; }
    56395552    break;
     
    56425555
    56435556/* Line 1806 of yacc.c  */
     5557#line 591 "parser.yy"
     5558    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     5559    break;
     5560
     5561  case 112:
     5562
     5563/* Line 1806 of yacc.c  */
    56445564#line 593 "parser.yy"
    5645     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
    5646     break;
    5647 
    5648   case 112:
     5565    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     5566    break;
     5567
     5568  case 113:
    56495569
    56505570/* Line 1806 of yacc.c  */
    56515571#line 595 "parser.yy"
    5652     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
    5653     break;
    5654 
    5655   case 113:
     5572    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     5573    break;
     5574
     5575  case 114:
    56565576
    56575577/* Line 1806 of yacc.c  */
    56585578#line 597 "parser.yy"
    5659     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
    5660     break;
    5661 
    5662   case 114:
    5663 
    5664 /* Line 1806 of yacc.c  */
    5665 #line 599 "parser.yy"
    56665579    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
    56675580    break;
     
    56705583
    56715584/* Line 1806 of yacc.c  */
    5672 #line 605 "parser.yy"
     5585#line 603 "parser.yy"
    56735586    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    56745587    break;
     
    56775590
    56785591/* Line 1806 of yacc.c  */
     5592#line 607 "parser.yy"
     5593    { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     5594    break;
     5595
     5596  case 118:
     5597
     5598/* Line 1806 of yacc.c  */
     5599#line 608 "parser.yy"
     5600    { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     5601    break;
     5602
     5603  case 119:
     5604
     5605/* Line 1806 of yacc.c  */
    56795606#line 609 "parser.yy"
    5680     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
    5681     break;
    5682 
    5683   case 118:
     5607    { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     5608    break;
     5609
     5610  case 120:
    56845611
    56855612/* Line 1806 of yacc.c  */
    56865613#line 610 "parser.yy"
    5687     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
    5688     break;
    5689 
    5690   case 119:
     5614    { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     5615    break;
     5616
     5617  case 121:
    56915618
    56925619/* Line 1806 of yacc.c  */
    56935620#line 611 "parser.yy"
    5694     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
    5695     break;
    5696 
    5697   case 120:
     5621    { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     5622    break;
     5623
     5624  case 122:
    56985625
    56995626/* Line 1806 of yacc.c  */
    57005627#line 612 "parser.yy"
    5701     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
    5702     break;
    5703 
    5704   case 121:
     5628    { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     5629    break;
     5630
     5631  case 123:
    57055632
    57065633/* Line 1806 of yacc.c  */
    57075634#line 613 "parser.yy"
    5708     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
    5709     break;
    5710 
    5711   case 122:
     5635    { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     5636    break;
     5637
     5638  case 124:
    57125639
    57135640/* Line 1806 of yacc.c  */
    57145641#line 614 "parser.yy"
    5715     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
    5716     break;
    5717 
    5718   case 123:
     5642    { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     5643    break;
     5644
     5645  case 125:
    57195646
    57205647/* Line 1806 of yacc.c  */
    57215648#line 615 "parser.yy"
    5722     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
    5723     break;
    5724 
    5725   case 124:
     5649    { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     5650    break;
     5651
     5652  case 126:
    57265653
    57275654/* Line 1806 of yacc.c  */
    57285655#line 616 "parser.yy"
    5729     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
    5730     break;
    5731 
    5732   case 125:
    5733 
    5734 /* Line 1806 of yacc.c  */
    5735 #line 617 "parser.yy"
    5736     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
    5737     break;
    5738 
    5739   case 126:
    5740 
    5741 /* Line 1806 of yacc.c  */
    5742 #line 618 "parser.yy"
    57435656    { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
    57445657    break;
     
    57475660
    57485661/* Line 1806 of yacc.c  */
    5749 #line 624 "parser.yy"
     5662#line 622 "parser.yy"
    57505663    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    57515664    break;
     
    57545667
    57555668/* Line 1806 of yacc.c  */
    5756 #line 629 "parser.yy"
     5669#line 627 "parser.yy"
    57575670    { (yyval.en) = 0; }
    57585671    break;
     
    57615674
    57625675/* Line 1806 of yacc.c  */
    5763 #line 638 "parser.yy"
     5676#line 636 "parser.yy"
    57645677    { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
    57655678    break;
     
    57685681
    57695682/* Line 1806 of yacc.c  */
    5770 #line 645 "parser.yy"
     5683#line 643 "parser.yy"
    57715684    {
    57725685                        Token fn; fn.str = new std::string( "^?{}" ); // location undefined
     
    57795692
    57805693/* Line 1806 of yacc.c  */
    5781 #line 654 "parser.yy"
     5694#line 652 "parser.yy"
    57825695    {
    57835696                        (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
     
    57885701
    57895702/* Line 1806 of yacc.c  */
    5790 #line 661 "parser.yy"
     5703#line 659 "parser.yy"
    57915704    { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
    57925705    break;
     
    57955708
    57965709/* Line 1806 of yacc.c  */
    5797 #line 668 "parser.yy"
     5710#line 666 "parser.yy"
    57985711    { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
    57995712    break;
     
    58025715
    58035716/* Line 1806 of yacc.c  */
    5804 #line 674 "parser.yy"
     5717#line 672 "parser.yy"
    58055718    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
    58065719    break;
     
    58095722
    58105723/* Line 1806 of yacc.c  */
     5724#line 677 "parser.yy"
     5725    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     5726    break;
     5727
     5728  case 146:
     5729
     5730/* Line 1806 of yacc.c  */
    58115731#line 679 "parser.yy"
     5732    { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
     5733    break;
     5734
     5735  case 147:
     5736
     5737/* Line 1806 of yacc.c  */
     5738#line 681 "parser.yy"
    58125739    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    58135740    break;
    58145741
    5815   case 146:
    5816 
    5817 /* Line 1806 of yacc.c  */
    5818 #line 681 "parser.yy"
    5819     { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
    5820     break;
    5821 
    5822   case 147:
    5823 
    5824 /* Line 1806 of yacc.c  */
    5825 #line 683 "parser.yy"
    5826     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
    5827     break;
    5828 
    58295742  case 150:
    58305743
    58315744/* Line 1806 of yacc.c  */
    5832 #line 690 "parser.yy"
     5745#line 688 "parser.yy"
    58335746    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
    58345747    break;
     
    58375750
    58385751/* Line 1806 of yacc.c  */
    5839 #line 695 "parser.yy"
     5752#line 693 "parser.yy"
    58405753    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
    58415754    break;
     
    58445757
    58455758/* Line 1806 of yacc.c  */
     5759#line 699 "parser.yy"
     5760    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     5761    break;
     5762
     5763  case 153:
     5764
     5765/* Line 1806 of yacc.c  */
    58465766#line 701 "parser.yy"
    5847     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    5848     break;
    5849 
    5850   case 153:
     5767    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     5768    break;
     5769
     5770  case 154:
    58515771
    58525772/* Line 1806 of yacc.c  */
    58535773#line 703 "parser.yy"
    5854     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
    5855     break;
    5856 
    5857   case 154:
     5774    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     5775    break;
     5776
     5777  case 155:
    58585778
    58595779/* Line 1806 of yacc.c  */
    58605780#line 705 "parser.yy"
    5861     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    5862     break;
    5863 
    5864   case 155:
    5865 
    5866 /* Line 1806 of yacc.c  */
    5867 #line 707 "parser.yy"
    58685781    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
    58695782    break;
     
    58725785
    58735786/* Line 1806 of yacc.c  */
     5787#line 710 "parser.yy"
     5788    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     5789    break;
     5790
     5791  case 157:
     5792
     5793/* Line 1806 of yacc.c  */
    58745794#line 712 "parser.yy"
    5875     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    5876     break;
    5877 
    5878   case 157:
    5879 
    5880 /* Line 1806 of yacc.c  */
    5881 #line 714 "parser.yy"
    58825795    { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
    58835796    break;
     
    58865799
    58875800/* Line 1806 of yacc.c  */
     5801#line 719 "parser.yy"
     5802    { (yyval.en) = (yyvsp[(1) - (1)].en); }
     5803    break;
     5804
     5805  case 159:
     5806
     5807/* Line 1806 of yacc.c  */
    58885808#line 721 "parser.yy"
    5889     { (yyval.en) = (yyvsp[(1) - (1)].en); }
    5890     break;
    5891 
    5892   case 159:
    5893 
    5894 /* Line 1806 of yacc.c  */
    5895 #line 723 "parser.yy"
    58965809    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
    58975810    break;
     
    59005813
    59015814/* Line 1806 of yacc.c  */
    5902 #line 730 "parser.yy"
     5815#line 728 "parser.yy"
    59035816    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
    59045817    break;
     
    59075820
    59085821/* Line 1806 of yacc.c  */
    5909 #line 734 "parser.yy"
     5822#line 732 "parser.yy"
    59105823    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
    59115824    break;
     
    59145827
    59155828/* Line 1806 of yacc.c  */
    5916 #line 735 "parser.yy"
     5829#line 733 "parser.yy"
    59175830    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
    59185831    break;
     
    59215834
    59225835/* Line 1806 of yacc.c  */
    5923 #line 741 "parser.yy"
     5836#line 739 "parser.yy"
    59245837    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
    59255838    break;
     
    59285841
    59295842/* Line 1806 of yacc.c  */
    5930 #line 745 "parser.yy"
     5843#line 743 "parser.yy"
    59315844    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    59325845    break;
     
    59355848
    59365849/* Line 1806 of yacc.c  */
    5937 #line 750 "parser.yy"
     5850#line 748 "parser.yy"
    59385851    { (yyval.sn) = 0; }
    59395852    break;
     
    59425855
    59435856/* Line 1806 of yacc.c  */
     5857#line 754 "parser.yy"
     5858    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     5859    break;
     5860
     5861  case 171:
     5862
     5863/* Line 1806 of yacc.c  */
    59445864#line 756 "parser.yy"
     5865    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     5866    break;
     5867
     5868  case 172:
     5869
     5870/* Line 1806 of yacc.c  */
     5871#line 761 "parser.yy"
     5872    { (yyval.sn) = 0; }
     5873    break;
     5874
     5875  case 174:
     5876
     5877/* Line 1806 of yacc.c  */
     5878#line 767 "parser.yy"
    59455879    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    59465880    break;
    59475881
    5948   case 171:
    5949 
    5950 /* Line 1806 of yacc.c  */
    5951 #line 758 "parser.yy"
     5882  case 175:
     5883
     5884/* Line 1806 of yacc.c  */
     5885#line 769 "parser.yy"
     5886    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
     5887    break;
     5888
     5889  case 176:
     5890
     5891/* Line 1806 of yacc.c  */
     5892#line 771 "parser.yy"
    59525893    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    59535894    break;
    59545895
    5955   case 172:
    5956 
    5957 /* Line 1806 of yacc.c  */
    5958 #line 763 "parser.yy"
     5896  case 177:
     5897
     5898/* Line 1806 of yacc.c  */
     5899#line 773 "parser.yy"
     5900    { (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) ))))); }
     5901    break;
     5902
     5903  case 178:
     5904
     5905/* Line 1806 of yacc.c  */
     5906#line 778 "parser.yy"
    59595907    { (yyval.sn) = 0; }
    59605908    break;
    59615909
    5962   case 174:
    5963 
    5964 /* Line 1806 of yacc.c  */
    5965 #line 769 "parser.yy"
    5966     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
    5967     break;
    5968 
    5969   case 175:
    5970 
    5971 /* Line 1806 of yacc.c  */
    5972 #line 771 "parser.yy"
    5973     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
    5974     break;
    5975 
    5976   case 176:
    5977 
    5978 /* Line 1806 of yacc.c  */
    5979 #line 773 "parser.yy"
    5980     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
    5981     break;
    5982 
    5983   case 177:
    5984 
    5985 /* Line 1806 of yacc.c  */
    5986 #line 775 "parser.yy"
    5987     { (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) ))))); }
    5988     break;
    5989 
    5990   case 178:
    5991 
    5992 /* Line 1806 of yacc.c  */
    5993 #line 780 "parser.yy"
    5994     { (yyval.sn) = 0; }
    5995     break;
    5996 
    59975910  case 180:
    59985911
    59995912/* Line 1806 of yacc.c  */
    6000 #line 785 "parser.yy"
     5913#line 783 "parser.yy"
    60015914    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    60025915    break;
     
    60055918
    60065919/* Line 1806 of yacc.c  */
    6007 #line 786 "parser.yy"
     5920#line 784 "parser.yy"
    60085921    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
    60095922    break;
     
    60125925
    60135926/* Line 1806 of yacc.c  */
     5927#line 789 "parser.yy"
     5928    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     5929    break;
     5930
     5931  case 183:
     5932
     5933/* Line 1806 of yacc.c  */
    60145934#line 791 "parser.yy"
    6015     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
    6016     break;
    6017 
    6018   case 183:
     5935    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     5936    break;
     5937
     5938  case 184:
    60195939
    60205940/* Line 1806 of yacc.c  */
    60215941#line 793 "parser.yy"
    6022     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
    6023     break;
    6024 
    6025   case 184:
    6026 
    6027 /* Line 1806 of yacc.c  */
    6028 #line 795 "parser.yy"
    60295942    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
    60305943    break;
     
    60335946
    60345947/* Line 1806 of yacc.c  */
     5948#line 798 "parser.yy"
     5949    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     5950    break;
     5951
     5952  case 186:
     5953
     5954/* Line 1806 of yacc.c  */
    60355955#line 800 "parser.yy"
    6036     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
    6037     break;
    6038 
    6039   case 186:
    6040 
    6041 /* Line 1806 of yacc.c  */
    6042 #line 802 "parser.yy"
    60435956    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
    60445957    break;
     
    60475960
    60485961/* Line 1806 of yacc.c  */
    6049 #line 807 "parser.yy"
     5962#line 805 "parser.yy"
    60505963    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
    60515964    break;
     
    60545967
    60555968/* Line 1806 of yacc.c  */
    6056 #line 811 "parser.yy"
     5969#line 809 "parser.yy"
    60575970    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
    60585971    break;
     
    60615974
    60625975/* Line 1806 of yacc.c  */
    6063 #line 814 "parser.yy"
     5976#line 812 "parser.yy"
    60645977    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
    60655978    break;
     
    60685981
    60695982/* Line 1806 of yacc.c  */
    6070 #line 818 "parser.yy"
     5983#line 816 "parser.yy"
    60715984    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
    60725985    break;
     
    60755988
    60765989/* Line 1806 of yacc.c  */
    6077 #line 821 "parser.yy"
     5990#line 819 "parser.yy"
    60785991    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
    60795992    break;
     
    60825995
    60835996/* Line 1806 of yacc.c  */
     5997#line 823 "parser.yy"
     5998    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     5999    break;
     6000
     6001  case 193:
     6002
     6003/* Line 1806 of yacc.c  */
    60846004#line 825 "parser.yy"
    6085     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
    6086     break;
    6087 
    6088   case 193:
     6005    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     6006    break;
     6007
     6008  case 194:
    60896009
    60906010/* Line 1806 of yacc.c  */
    60916011#line 827 "parser.yy"
    6092     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
    6093     break;
    6094 
    6095   case 194:
    6096 
    6097 /* Line 1806 of yacc.c  */
    6098 #line 829 "parser.yy"
    60996012    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    61006013    break;
     
    61036016
    61046017/* Line 1806 of yacc.c  */
     6018#line 831 "parser.yy"
     6019    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     6020    break;
     6021
     6022  case 196:
     6023
     6024/* Line 1806 of yacc.c  */
    61056025#line 833 "parser.yy"
    6106     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
    6107     break;
    6108 
    6109   case 196:
    6110 
    6111 /* Line 1806 of yacc.c  */
    6112 #line 835 "parser.yy"
    61136026    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
    61146027    break;
    61156028
    61166029  case 197:
     6030
     6031/* Line 1806 of yacc.c  */
     6032#line 840 "parser.yy"
     6033    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     6034    break;
     6035
     6036  case 198:
    61176037
    61186038/* Line 1806 of yacc.c  */
     
    61216041    break;
    61226042
    6123   case 198:
     6043  case 199:
    61246044
    61256045/* Line 1806 of yacc.c  */
    61266046#line 844 "parser.yy"
    6127     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
    6128     break;
    6129 
    6130   case 199:
    6131 
    6132 /* Line 1806 of yacc.c  */
    6133 #line 846 "parser.yy"
    61346047    {
    61356048                        (yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
     
    61416054
    61426055/* Line 1806 of yacc.c  */
     6056#line 855 "parser.yy"
     6057    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     6058    break;
     6059
     6060  case 202:
     6061
     6062/* Line 1806 of yacc.c  */
    61436063#line 857 "parser.yy"
     6064    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     6065    break;
     6066
     6067  case 203:
     6068
     6069/* Line 1806 of yacc.c  */
     6070#line 859 "parser.yy"
    61446071    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    61456072    break;
    61466073
    6147   case 202:
    6148 
    6149 /* Line 1806 of yacc.c  */
    6150 #line 859 "parser.yy"
     6074  case 204:
     6075
     6076/* Line 1806 of yacc.c  */
     6077#line 861 "parser.yy"
    61516078    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    61526079    break;
    61536080
    6154   case 203:
    6155 
    6156 /* Line 1806 of yacc.c  */
    6157 #line 861 "parser.yy"
    6158     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
    6159     break;
    6160 
    6161   case 204:
    6162 
    6163 /* Line 1806 of yacc.c  */
    6164 #line 863 "parser.yy"
    6165     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
    6166     break;
    6167 
    61686081  case 205:
    61696082
    61706083/* Line 1806 of yacc.c  */
     6084#line 866 "parser.yy"
     6085    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     6086    break;
     6087
     6088  case 206:
     6089
     6090/* Line 1806 of yacc.c  */
    61716091#line 868 "parser.yy"
     6092    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     6093    break;
     6094
     6095  case 207:
     6096
     6097/* Line 1806 of yacc.c  */
     6098#line 870 "parser.yy"
    61726099    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    61736100    break;
    61746101
    6175   case 206:
    6176 
    6177 /* Line 1806 of yacc.c  */
    6178 #line 870 "parser.yy"
     6102  case 208:
     6103
     6104/* Line 1806 of yacc.c  */
     6105#line 872 "parser.yy"
    61796106    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    61806107    break;
    61816108
    6182   case 207:
    6183 
    6184 /* Line 1806 of yacc.c  */
    6185 #line 872 "parser.yy"
    6186     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
    6187     break;
    6188 
    6189   case 208:
    6190 
    6191 /* Line 1806 of yacc.c  */
    6192 #line 874 "parser.yy"
    6193     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
    6194     break;
    6195 
    61966109  case 209:
    61976110
    61986111/* Line 1806 of yacc.c  */
    6199 #line 879 "parser.yy"
     6112#line 877 "parser.yy"
    62006113    {
    62016114                        (yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
     
    62076120
    62086121/* Line 1806 of yacc.c  */
    6209 #line 893 "parser.yy"
     6122#line 891 "parser.yy"
    62106123    {
    62116124                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62176130
    62186131/* Line 1806 of yacc.c  */
     6132#line 896 "parser.yy"
     6133    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     6134    break;
     6135
     6136  case 213:
     6137
     6138/* Line 1806 of yacc.c  */
    62196139#line 898 "parser.yy"
    6220     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    6221     break;
    6222 
    6223   case 213:
    6224 
    6225 /* Line 1806 of yacc.c  */
    6226 #line 900 "parser.yy"
    62276140    {
    62286141                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    62346147
    62356148/* Line 1806 of yacc.c  */
     6149#line 907 "parser.yy"
     6150    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     6151    break;
     6152
     6153  case 216:
     6154
     6155/* Line 1806 of yacc.c  */
    62366156#line 909 "parser.yy"
    6237     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
    6238     break;
    6239 
    6240   case 216:
     6157    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     6158    break;
     6159
     6160  case 217:
    62416161
    62426162/* Line 1806 of yacc.c  */
    62436163#line 911 "parser.yy"
    6244     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
    6245     break;
    6246 
    6247   case 217:
     6164    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     6165    break;
     6166
     6167  case 218:
    62486168
    62496169/* Line 1806 of yacc.c  */
    62506170#line 913 "parser.yy"
    6251     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
    6252     break;
    6253 
    6254   case 218:
     6171    { (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) ); }
     6172    break;
     6173
     6174  case 219:
    62556175
    62566176/* Line 1806 of yacc.c  */
    62576177#line 915 "parser.yy"
    6258     { (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) ); }
    6259     break;
    6260 
    6261   case 219:
    6262 
    6263 /* Line 1806 of yacc.c  */
    6264 #line 917 "parser.yy"
    62656178    { (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) ); }
    62666179    break;
     
    62696182
    62706183/* Line 1806 of yacc.c  */
     6184#line 920 "parser.yy"
     6185    { (yyval.flag) = false; }
     6186    break;
     6187
     6188  case 221:
     6189
     6190/* Line 1806 of yacc.c  */
    62716191#line 922 "parser.yy"
    6272     { (yyval.flag) = false; }
    6273     break;
    6274 
    6275   case 221:
    6276 
    6277 /* Line 1806 of yacc.c  */
    6278 #line 924 "parser.yy"
    62796192    { (yyval.flag) = true; }
    62806193    break;
     
    62836196
    62846197/* Line 1806 of yacc.c  */
    6285 #line 929 "parser.yy"
     6198#line 927 "parser.yy"
    62866199    { (yyval.en) = 0; }
    62876200    break;
     
    62906203
    62916204/* Line 1806 of yacc.c  */
    6292 #line 936 "parser.yy"
     6205#line 934 "parser.yy"
    62936206    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
    62946207    break;
     
    62976210
    62986211/* Line 1806 of yacc.c  */
     6212#line 939 "parser.yy"
     6213    { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     6214    break;
     6215
     6216  case 227:
     6217
     6218/* Line 1806 of yacc.c  */
    62996219#line 941 "parser.yy"
    6300     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
    6301     break;
    6302 
    6303   case 227:
    6304 
    6305 /* Line 1806 of yacc.c  */
    6306 #line 943 "parser.yy"
    63076220    { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
    63086221    break;
     
    63116224
    63126225/* Line 1806 of yacc.c  */
     6226#line 946 "parser.yy"
     6227    { (yyval.constant) = 0; }
     6228    break;
     6229
     6230  case 229:
     6231
     6232/* Line 1806 of yacc.c  */
    63136233#line 948 "parser.yy"
    6314     { (yyval.constant) = 0; }
    6315     break;
    6316 
    6317   case 229:
     6234    { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     6235    break;
     6236
     6237  case 230:
    63186238
    63196239/* Line 1806 of yacc.c  */
    63206240#line 950 "parser.yy"
    6321     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
    6322     break;
    6323 
    6324   case 230:
    6325 
    6326 /* Line 1806 of yacc.c  */
    6327 #line 952 "parser.yy"
    63286241    { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
    63296242    break;
     
    63326245
    63336246/* Line 1806 of yacc.c  */
     6247#line 955 "parser.yy"
     6248    { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     6249    break;
     6250
     6251  case 232:
     6252
     6253/* Line 1806 of yacc.c  */
    63346254#line 957 "parser.yy"
    6335     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
    6336     break;
    6337 
    6338   case 232:
    6339 
    6340 /* Line 1806 of yacc.c  */
    6341 #line 959 "parser.yy"
    63426255    { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
    63436256    break;
     
    63466259
    63476260/* Line 1806 of yacc.c  */
    6348 #line 966 "parser.yy"
     6261#line 964 "parser.yy"
    63496262    { (yyval.decl) = 0; }
    63506263    break;
     
    63536266
    63546267/* Line 1806 of yacc.c  */
    6355 #line 973 "parser.yy"
     6268#line 971 "parser.yy"
    63566269    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    63576270    break;
     
    63606273
    63616274/* Line 1806 of yacc.c  */
    6362 #line 978 "parser.yy"
     6275#line 976 "parser.yy"
    63636276    { (yyval.decl) = 0; }
    63646277    break;
     
    63676280
    63686281/* Line 1806 of yacc.c  */
    6369 #line 985 "parser.yy"
     6282#line 983 "parser.yy"
    63706283    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    63716284    break;
     
    63746287
    63756288/* Line 1806 of yacc.c  */
    6376 #line 999 "parser.yy"
     6289#line 997 "parser.yy"
    63776290    {}
    63786291    break;
     
    63816294
    63826295/* Line 1806 of yacc.c  */
    6383 #line 1000 "parser.yy"
     6296#line 998 "parser.yy"
    63846297    {}
    63856298    break;
     
    63886301
    63896302/* Line 1806 of yacc.c  */
    6390 #line 1029 "parser.yy"
     6303#line 1027 "parser.yy"
    63916304    {
    63926305                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6393                         (yyval.decl) = (yyvsp[(1) - (2)].decl)->addInitializer( (yyvsp[(2) - (2)].in) );
     6306                        (yyval.decl) = (yyvsp[(1) - (2)].decl);
    63946307                }
    63956308    break;
     
    63986311
    63996312/* Line 1806 of yacc.c  */
    6400 #line 1036 "parser.yy"
     6313#line 1034 "parser.yy"
    64016314    {
    64026315                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    6403                         (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].in) );;
     6316                        (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) );
    64046317                }
    64056318    break;
     
    64086321
    64096322/* Line 1806 of yacc.c  */
    6410 #line 1041 "parser.yy"
     6323#line 1039 "parser.yy"
    64116324    {
    64126325                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
    6413                         (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) )->addInitializer( (yyvsp[(6) - (6)].in) ) );
     6326                        (yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneType( (yyvsp[(5) - (6)].tok) ) );
    64146327                }
    64156328    break;
     
    64186331
    64196332/* Line 1806 of yacc.c  */
    6420 #line 1051 "parser.yy"
     6333#line 1049 "parser.yy"
    64216334    {
    64226335                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    64286341
    64296342/* Line 1806 of yacc.c  */
    6430 #line 1056 "parser.yy"
     6343#line 1054 "parser.yy"
    64316344    {
    64326345                        typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
     
    64386351
    64396352/* Line 1806 of yacc.c  */
    6440 #line 1061 "parser.yy"
     6353#line 1059 "parser.yy"
    64416354    {
    64426355                        typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
     
    64486361
    64496362/* Line 1806 of yacc.c  */
    6450 #line 1069 "parser.yy"
     6363#line 1067 "parser.yy"
    64516364    {
    64526365                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64586371
    64596372/* Line 1806 of yacc.c  */
    6460 #line 1074 "parser.yy"
     6373#line 1072 "parser.yy"
    64616374    {
    64626375                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64686381
    64696382/* Line 1806 of yacc.c  */
    6470 #line 1079 "parser.yy"
     6383#line 1077 "parser.yy"
    64716384    {
    64726385                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64786391
    64796392/* Line 1806 of yacc.c  */
    6480 #line 1084 "parser.yy"
     6393#line 1082 "parser.yy"
    64816394    {
    64826395                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    64886401
    64896402/* Line 1806 of yacc.c  */
    6490 #line 1089 "parser.yy"
     6403#line 1087 "parser.yy"
    64916404    {
    64926405                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    64986411
    64996412/* Line 1806 of yacc.c  */
    6500 #line 1097 "parser.yy"
     6413#line 1095 "parser.yy"
    65016414    {
    65026415                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
     
    65076420
    65086421/* Line 1806 of yacc.c  */
    6509 #line 1120 "parser.yy"
     6422#line 1118 "parser.yy"
    65106423    {
    65116424                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    65166429
    65176430/* Line 1806 of yacc.c  */
    6518 #line 1124 "parser.yy"
     6431#line 1122 "parser.yy"
    65196432    {
    65206433                        (yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
     
    65256438
    65266439/* Line 1806 of yacc.c  */
    6527 #line 1131 "parser.yy"
     6440#line 1129 "parser.yy"
    65286441    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    65296442    break;
     
    65326445
    65336446/* Line 1806 of yacc.c  */
    6534 #line 1135 "parser.yy"
     6447#line 1133 "parser.yy"
    65356448    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
    65366449    break;
     
    65396452
    65406453/* Line 1806 of yacc.c  */
    6541 #line 1140 "parser.yy"
     6454#line 1138 "parser.yy"
    65426455    {
    65436456                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65496462
    65506463/* Line 1806 of yacc.c  */
    6551 #line 1145 "parser.yy"
     6464#line 1143 "parser.yy"
    65526465    {
    65536466                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65596472
    65606473/* Line 1806 of yacc.c  */
    6561 #line 1150 "parser.yy"
     6474#line 1148 "parser.yy"
    65626475    {
    65636476                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
     
    65696482
    65706483/* Line 1806 of yacc.c  */
    6571 #line 1161 "parser.yy"
     6484#line 1159 "parser.yy"
    65726485    {
    65736486                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65796492
    65806493/* Line 1806 of yacc.c  */
    6581 #line 1166 "parser.yy"
     6494#line 1164 "parser.yy"
    65826495    {
    65836496                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65896502
    65906503/* Line 1806 of yacc.c  */
    6591 #line 1171 "parser.yy"
     6504#line 1169 "parser.yy"
    65926505    {
    65936506                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    65996512
    66006513/* Line 1806 of yacc.c  */
    6601 #line 1176 "parser.yy"
     6514#line 1174 "parser.yy"
    66026515    {
    66036516                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    66096522
    66106523/* Line 1806 of yacc.c  */
    6611 #line 1181 "parser.yy"
     6524#line 1179 "parser.yy"
    66126525    {
    66136526                        typedefTable.addToEnclosingScope( TypedefTable::TD );
     
    66196532
    66206533/* Line 1806 of yacc.c  */
    6621 #line 1190 "parser.yy"
     6534#line 1188 "parser.yy"
    66226535    {
    66236536                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
     
    66296542
    66306543/* Line 1806 of yacc.c  */
    6631 #line 1195 "parser.yy"
     6544#line 1193 "parser.yy"
    66326545    {
    66336546                        typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
     
    66396552
    66406553/* Line 1806 of yacc.c  */
    6641 #line 1212 "parser.yy"
     6554#line 1210 "parser.yy"
    66426555    {
    66436556                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66496562
    66506563/* Line 1806 of yacc.c  */
    6651 #line 1217 "parser.yy"
     6564#line 1215 "parser.yy"
    66526565    {
    66536566                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    66596572
    66606573/* Line 1806 of yacc.c  */
    6661 #line 1239 "parser.yy"
     6574#line 1237 "parser.yy"
    66626575    { (yyval.decl) = 0; }
    66636576    break;
     
    66666579
    66676580/* Line 1806 of yacc.c  */
    6668 #line 1251 "parser.yy"
     6581#line 1249 "parser.yy"
    66696582    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    66706583    break;
     
    66736586
    66746587/* Line 1806 of yacc.c  */
     6588#line 1260 "parser.yy"
     6589    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     6590    break;
     6591
     6592  case 301:
     6593
     6594/* Line 1806 of yacc.c  */
    66756595#line 1262 "parser.yy"
    6676     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
    6677     break;
    6678 
    6679   case 301:
     6596    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     6597    break;
     6598
     6599  case 302:
    66806600
    66816601/* Line 1806 of yacc.c  */
    66826602#line 1264 "parser.yy"
    6683     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
    6684     break;
    6685 
    6686   case 302:
     6603    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     6604    break;
     6605
     6606  case 303:
    66876607
    66886608/* Line 1806 of yacc.c  */
    66896609#line 1266 "parser.yy"
    6690     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
    6691     break;
    6692 
    6693   case 303:
     6610    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     6611    break;
     6612
     6613  case 304:
    66946614
    66956615/* Line 1806 of yacc.c  */
    66966616#line 1268 "parser.yy"
    6697     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
    6698     break;
    6699 
    6700   case 304:
     6617    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     6618    break;
     6619
     6620  case 305:
    67016621
    67026622/* Line 1806 of yacc.c  */
    67036623#line 1270 "parser.yy"
    6704     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
    6705     break;
    6706 
    6707   case 305:
    6708 
    6709 /* Line 1806 of yacc.c  */
    6710 #line 1272 "parser.yy"
    67116624    {
    67126625                        typedefTable.enterScope();
     
    67176630
    67186631/* Line 1806 of yacc.c  */
    6719 #line 1276 "parser.yy"
     6632#line 1274 "parser.yy"
    67206633    {
    67216634                        typedefTable.leaveScope();
     
    67276640
    67286641/* Line 1806 of yacc.c  */
     6642#line 1283 "parser.yy"
     6643    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6644    break;
     6645
     6646  case 309:
     6647
     6648/* Line 1806 of yacc.c  */
    67296649#line 1285 "parser.yy"
     6650    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     6651    break;
     6652
     6653  case 311:
     6654
     6655/* Line 1806 of yacc.c  */
     6656#line 1296 "parser.yy"
    67306657    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67316658    break;
    67326659
    6733   case 309:
    6734 
    6735 /* Line 1806 of yacc.c  */
    6736 #line 1287 "parser.yy"
     6660  case 313:
     6661
     6662/* Line 1806 of yacc.c  */
     6663#line 1305 "parser.yy"
     6664    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     6665    break;
     6666
     6667  case 314:
     6668
     6669/* Line 1806 of yacc.c  */
     6670#line 1307 "parser.yy"
     6671    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     6672    break;
     6673
     6674  case 315:
     6675
     6676/* Line 1806 of yacc.c  */
     6677#line 1309 "parser.yy"
     6678    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     6679    break;
     6680
     6681  case 316:
     6682
     6683/* Line 1806 of yacc.c  */
     6684#line 1311 "parser.yy"
     6685    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     6686    break;
     6687
     6688  case 317:
     6689
     6690/* Line 1806 of yacc.c  */
     6691#line 1313 "parser.yy"
     6692    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     6693    break;
     6694
     6695  case 318:
     6696
     6697/* Line 1806 of yacc.c  */
     6698#line 1315 "parser.yy"
     6699    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     6700    break;
     6701
     6702  case 319:
     6703
     6704/* Line 1806 of yacc.c  */
     6705#line 1317 "parser.yy"
     6706    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     6707    break;
     6708
     6709  case 320:
     6710
     6711/* Line 1806 of yacc.c  */
     6712#line 1319 "parser.yy"
     6713    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     6714    break;
     6715
     6716  case 321:
     6717
     6718/* Line 1806 of yacc.c  */
     6719#line 1324 "parser.yy"
     6720    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     6721    break;
     6722
     6723  case 322:
     6724
     6725/* Line 1806 of yacc.c  */
     6726#line 1326 "parser.yy"
     6727    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     6728    break;
     6729
     6730  case 323:
     6731
     6732/* Line 1806 of yacc.c  */
     6733#line 1328 "parser.yy"
     6734    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     6735    break;
     6736
     6737  case 324:
     6738
     6739/* Line 1806 of yacc.c  */
     6740#line 1330 "parser.yy"
     6741    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     6742    break;
     6743
     6744  case 325:
     6745
     6746/* Line 1806 of yacc.c  */
     6747#line 1332 "parser.yy"
     6748    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     6749    break;
     6750
     6751  case 326:
     6752
     6753/* Line 1806 of yacc.c  */
     6754#line 1334 "parser.yy"
     6755    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     6756    break;
     6757
     6758  case 327:
     6759
     6760/* Line 1806 of yacc.c  */
     6761#line 1336 "parser.yy"
     6762    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     6763    break;
     6764
     6765  case 328:
     6766
     6767/* Line 1806 of yacc.c  */
     6768#line 1338 "parser.yy"
     6769    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     6770    break;
     6771
     6772  case 329:
     6773
     6774/* Line 1806 of yacc.c  */
     6775#line 1340 "parser.yy"
     6776    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     6777    break;
     6778
     6779  case 330:
     6780
     6781/* Line 1806 of yacc.c  */
     6782#line 1342 "parser.yy"
     6783    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     6784    break;
     6785
     6786  case 331:
     6787
     6788/* Line 1806 of yacc.c  */
     6789#line 1344 "parser.yy"
     6790    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     6791    break;
     6792
     6793  case 332:
     6794
     6795/* Line 1806 of yacc.c  */
     6796#line 1346 "parser.yy"
     6797    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     6798    break;
     6799
     6800  case 334:
     6801
     6802/* Line 1806 of yacc.c  */
     6803#line 1353 "parser.yy"
     6804    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6805    break;
     6806
     6807  case 335:
     6808
     6809/* Line 1806 of yacc.c  */
     6810#line 1355 "parser.yy"
     6811    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6812    break;
     6813
     6814  case 336:
     6815
     6816/* Line 1806 of yacc.c  */
     6817#line 1357 "parser.yy"
    67376818    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    67386819    break;
    67396820
    6740   case 311:
    6741 
    6742 /* Line 1806 of yacc.c  */
    6743 #line 1298 "parser.yy"
     6821  case 337:
     6822
     6823/* Line 1806 of yacc.c  */
     6824#line 1359 "parser.yy"
     6825    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     6826    break;
     6827
     6828  case 339:
     6829
     6830/* Line 1806 of yacc.c  */
     6831#line 1365 "parser.yy"
     6832    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     6833    break;
     6834
     6835  case 341:
     6836
     6837/* Line 1806 of yacc.c  */
     6838#line 1372 "parser.yy"
     6839    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6840    break;
     6841
     6842  case 342:
     6843
     6844/* Line 1806 of yacc.c  */
     6845#line 1374 "parser.yy"
    67446846    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    67456847    break;
    67466848
    6747   case 313:
    6748 
    6749 /* Line 1806 of yacc.c  */
    6750 #line 1307 "parser.yy"
    6751     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
    6752     break;
    6753 
    6754   case 314:
    6755 
    6756 /* Line 1806 of yacc.c  */
    6757 #line 1309 "parser.yy"
    6758     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
    6759     break;
    6760 
    6761   case 315:
    6762 
    6763 /* Line 1806 of yacc.c  */
    6764 #line 1311 "parser.yy"
    6765     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
    6766     break;
    6767 
    6768   case 316:
    6769 
    6770 /* Line 1806 of yacc.c  */
    6771 #line 1313 "parser.yy"
    6772     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
    6773     break;
    6774 
    6775   case 317:
    6776 
    6777 /* Line 1806 of yacc.c  */
    6778 #line 1315 "parser.yy"
    6779     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
    6780     break;
    6781 
    6782   case 318:
    6783 
    6784 /* Line 1806 of yacc.c  */
    6785 #line 1317 "parser.yy"
    6786     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
    6787     break;
    6788 
    6789   case 319:
    6790 
    6791 /* Line 1806 of yacc.c  */
    6792 #line 1319 "parser.yy"
    6793     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
    6794     break;
    6795 
    6796   case 320:
    6797 
    6798 /* Line 1806 of yacc.c  */
    6799 #line 1321 "parser.yy"
    6800     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
    6801     break;
    6802 
    6803   case 321:
    6804 
    6805 /* Line 1806 of yacc.c  */
    6806 #line 1326 "parser.yy"
    6807     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
    6808     break;
    6809 
    6810   case 322:
    6811 
    6812 /* Line 1806 of yacc.c  */
    6813 #line 1328 "parser.yy"
    6814     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
    6815     break;
    6816 
    6817   case 323:
    6818 
    6819 /* Line 1806 of yacc.c  */
    6820 #line 1330 "parser.yy"
    6821     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
    6822     break;
    6823 
    6824   case 324:
    6825 
    6826 /* Line 1806 of yacc.c  */
    6827 #line 1332 "parser.yy"
    6828     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
    6829     break;
    6830 
    6831   case 325:
    6832 
    6833 /* Line 1806 of yacc.c  */
    6834 #line 1334 "parser.yy"
    6835     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
    6836     break;
    6837 
    6838   case 326:
    6839 
    6840 /* Line 1806 of yacc.c  */
    6841 #line 1336 "parser.yy"
    6842     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
    6843     break;
    6844 
    6845   case 327:
    6846 
    6847 /* Line 1806 of yacc.c  */
    6848 #line 1338 "parser.yy"
    6849     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
    6850     break;
    6851 
    6852   case 328:
    6853 
    6854 /* Line 1806 of yacc.c  */
    6855 #line 1340 "parser.yy"
    6856     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
    6857     break;
    6858 
    6859   case 329:
    6860 
    6861 /* Line 1806 of yacc.c  */
    6862 #line 1342 "parser.yy"
    6863     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
    6864     break;
    6865 
    6866   case 330:
    6867 
    6868 /* Line 1806 of yacc.c  */
    6869 #line 1344 "parser.yy"
    6870     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
    6871     break;
    6872 
    6873   case 331:
    6874 
    6875 /* Line 1806 of yacc.c  */
    6876 #line 1346 "parser.yy"
    6877     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
    6878     break;
    6879 
    6880   case 332:
    6881 
    6882 /* Line 1806 of yacc.c  */
    6883 #line 1348 "parser.yy"
    6884     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    6885     break;
    6886 
    6887   case 333:
    6888 
    6889 /* Line 1806 of yacc.c  */
    6890 #line 1350 "parser.yy"
    6891     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    6892     break;
    6893 
    6894   case 335:
    6895 
    6896 /* Line 1806 of yacc.c  */
    6897 #line 1357 "parser.yy"
     6849  case 343:
     6850
     6851/* Line 1806 of yacc.c  */
     6852#line 1376 "parser.yy"
     6853    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     6854    break;
     6855
     6856  case 344:
     6857
     6858/* Line 1806 of yacc.c  */
     6859#line 1381 "parser.yy"
     6860    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     6861    break;
     6862
     6863  case 345:
     6864
     6865/* Line 1806 of yacc.c  */
     6866#line 1383 "parser.yy"
     6867    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     6868    break;
     6869
     6870  case 346:
     6871
     6872/* Line 1806 of yacc.c  */
     6873#line 1385 "parser.yy"
     6874    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     6875    break;
     6876
     6877  case 347:
     6878
     6879/* Line 1806 of yacc.c  */
     6880#line 1387 "parser.yy"
     6881    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     6882    break;
     6883
     6884  case 349:
     6885
     6886/* Line 1806 of yacc.c  */
     6887#line 1393 "parser.yy"
    68986888    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    68996889    break;
    69006890
    6901   case 336:
    6902 
    6903 /* Line 1806 of yacc.c  */
    6904 #line 1359 "parser.yy"
     6891  case 350:
     6892
     6893/* Line 1806 of yacc.c  */
     6894#line 1395 "parser.yy"
    69056895    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69066896    break;
    69076897
    6908   case 337:
    6909 
    6910 /* Line 1806 of yacc.c  */
    6911 #line 1361 "parser.yy"
     6898  case 351:
     6899
     6900/* Line 1806 of yacc.c  */
     6901#line 1397 "parser.yy"
    69126902    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69136903    break;
    69146904
    6915   case 338:
    6916 
    6917 /* Line 1806 of yacc.c  */
    6918 #line 1363 "parser.yy"
    6919     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
    6920     break;
    6921 
    6922   case 340:
    6923 
    6924 /* Line 1806 of yacc.c  */
    6925 #line 1369 "parser.yy"
    6926     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    6927     break;
    6928 
    6929   case 342:
    6930 
    6931 /* Line 1806 of yacc.c  */
    6932 #line 1376 "parser.yy"
     6905  case 353:
     6906
     6907/* Line 1806 of yacc.c  */
     6908#line 1403 "parser.yy"
    69336909    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69346910    break;
    69356911
    6936   case 343:
    6937 
    6938 /* Line 1806 of yacc.c  */
    6939 #line 1378 "parser.yy"
     6912  case 354:
     6913
     6914/* Line 1806 of yacc.c  */
     6915#line 1405 "parser.yy"
    69406916    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69416917    break;
    69426918
    6943   case 344:
    6944 
    6945 /* Line 1806 of yacc.c  */
    6946 #line 1380 "parser.yy"
    6947     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
    6948     break;
    6949 
    6950   case 345:
    6951 
    6952 /* Line 1806 of yacc.c  */
    6953 #line 1385 "parser.yy"
    6954     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
    6955     break;
    6956 
    6957   case 346:
    6958 
    6959 /* Line 1806 of yacc.c  */
    6960 #line 1387 "parser.yy"
    6961     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
    6962     break;
    6963 
    6964   case 347:
    6965 
    6966 /* Line 1806 of yacc.c  */
    6967 #line 1389 "parser.yy"
    6968     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
    6969     break;
    6970 
    6971   case 348:
    6972 
    6973 /* Line 1806 of yacc.c  */
    6974 #line 1391 "parser.yy"
    6975     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    6976     break;
    6977 
    6978   case 350:
    6979 
    6980 /* Line 1806 of yacc.c  */
    6981 #line 1397 "parser.yy"
     6919  case 356:
     6920
     6921/* Line 1806 of yacc.c  */
     6922#line 1411 "parser.yy"
    69826923    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    69836924    break;
    69846925
    6985   case 351:
    6986 
    6987 /* Line 1806 of yacc.c  */
    6988 #line 1399 "parser.yy"
     6926  case 357:
     6927
     6928/* Line 1806 of yacc.c  */
     6929#line 1413 "parser.yy"
    69896930    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    69906931    break;
    69916932
    6992   case 352:
    6993 
    6994 /* Line 1806 of yacc.c  */
    6995 #line 1401 "parser.yy"
     6933  case 358:
     6934
     6935/* Line 1806 of yacc.c  */
     6936#line 1415 "parser.yy"
    69966937    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    69976938    break;
    69986939
    6999   case 354:
    7000 
    7001 /* Line 1806 of yacc.c  */
    7002 #line 1407 "parser.yy"
    7003     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7004     break;
    7005 
    7006   case 355:
    7007 
    7008 /* Line 1806 of yacc.c  */
    7009 #line 1409 "parser.yy"
     6940  case 359:
     6941
     6942/* Line 1806 of yacc.c  */
     6943#line 1420 "parser.yy"
     6944    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     6945    break;
     6946
     6947  case 360:
     6948
     6949/* Line 1806 of yacc.c  */
     6950#line 1422 "parser.yy"
     6951    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     6952    break;
     6953
     6954  case 361:
     6955
     6956/* Line 1806 of yacc.c  */
     6957#line 1424 "parser.yy"
    70106958    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    70116959    break;
    70126960
    7013   case 357:
    7014 
    7015 /* Line 1806 of yacc.c  */
    7016 #line 1415 "parser.yy"
    7017     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7018     break;
    7019 
    7020   case 358:
    7021 
    7022 /* Line 1806 of yacc.c  */
    7023 #line 1417 "parser.yy"
    7024     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    7025     break;
    7026 
    7027   case 359:
    7028 
    7029 /* Line 1806 of yacc.c  */
    7030 #line 1419 "parser.yy"
    7031     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    7032     break;
    7033 
    7034   case 360:
    7035 
    7036 /* Line 1806 of yacc.c  */
    7037 #line 1424 "parser.yy"
    7038     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
    7039     break;
    7040 
    7041   case 361:
    7042 
    7043 /* Line 1806 of yacc.c  */
    7044 #line 1426 "parser.yy"
    7045     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    7046     break;
    7047 
    7048   case 362:
    7049 
    7050 /* Line 1806 of yacc.c  */
    7051 #line 1428 "parser.yy"
    7052     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     6961  case 364:
     6962
     6963/* Line 1806 of yacc.c  */
     6964#line 1434 "parser.yy"
     6965    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    70536966    break;
    70546967
     
    70566969
    70576970/* Line 1806 of yacc.c  */
     6971#line 1436 "parser.yy"
     6972    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
     6973    break;
     6974
     6975  case 366:
     6976
     6977/* Line 1806 of yacc.c  */
    70586978#line 1438 "parser.yy"
    7059     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
    7060     break;
    7061 
    7062   case 366:
     6979    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
     6980    break;
     6981
     6982  case 367:
    70636983
    70646984/* Line 1806 of yacc.c  */
    70656985#line 1440 "parser.yy"
    7066     {
    7067                         typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
    7068                         (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 );
    7069                 }
    7070     break;
    7071 
    7072   case 367:
    7073 
    7074 /* Line 1806 of yacc.c  */
    7075 #line 1445 "parser.yy"
    7076     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     6986    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    70776987    break;
    70786988
     
    70806990
    70816991/* Line 1806 of yacc.c  */
     6992#line 1442 "parser.yy"
     6993    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     6994    break;
     6995
     6996  case 369:
     6997
     6998/* Line 1806 of yacc.c  */
    70826999#line 1447 "parser.yy"
    7083     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }
    7084     break;
    7085 
    7086   case 369:
     7000    { (yyval.aggKey) = DeclarationNode::Struct; }
     7001    break;
     7002
     7003  case 370:
    70877004
    70887005/* Line 1806 of yacc.c  */
    70897006#line 1449 "parser.yy"
    7090     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
    7091     break;
    7092 
    7093   case 370:
    7094 
    7095 /* Line 1806 of yacc.c  */
    7096 #line 1451 "parser.yy"
    7097     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     7007    { (yyval.aggKey) = DeclarationNode::Union; }
    70987008    break;
    70997009
     
    71017011
    71027012/* Line 1806 of yacc.c  */
     7013#line 1454 "parser.yy"
     7014    { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
     7015    break;
     7016
     7017  case 372:
     7018
     7019/* Line 1806 of yacc.c  */
    71037020#line 1456 "parser.yy"
    7104     { (yyval.aggKey) = DeclarationNode::Struct; }
    7105     break;
    7106 
    7107   case 372:
    7108 
    7109 /* Line 1806 of yacc.c  */
    7110 #line 1458 "parser.yy"
    7111     { (yyval.aggKey) = DeclarationNode::Union; }
    7112     break;
    7113 
    7114   case 373:
    7115 
    7116 /* Line 1806 of yacc.c  */
    7117 #line 1463 "parser.yy"
    7118     { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
     7021    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    71197022    break;
    71207023
     
    71227025
    71237026/* Line 1806 of yacc.c  */
     7027#line 1462 "parser.yy"
     7028    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7029    break;
     7030
     7031  case 376:
     7032
     7033/* Line 1806 of yacc.c  */
    71247034#line 1465 "parser.yy"
    7125     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    7126     break;
    7127 
    7128   case 376:
     7035    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7036    break;
     7037
     7038  case 378:
    71297039
    71307040/* Line 1806 of yacc.c  */
    71317041#line 1471 "parser.yy"
    7132     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    7133     break;
    7134 
    7135   case 378:
    7136 
    7137 /* Line 1806 of yacc.c  */
    7138 #line 1474 "parser.yy"
    7139     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     7042    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     7043    break;
     7044
     7045  case 379:
     7046
     7047/* Line 1806 of yacc.c  */
     7048#line 1473 "parser.yy"
     7049    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    71407050    break;
    71417051
     
    71437053
    71447054/* Line 1806 of yacc.c  */
     7055#line 1475 "parser.yy"
     7056    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     7057    break;
     7058
     7059  case 381:
     7060
     7061/* Line 1806 of yacc.c  */
    71457062#line 1480 "parser.yy"
    7146     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
    7147     break;
    7148 
    7149   case 381:
     7063    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7064    break;
     7065
     7066  case 382:
    71507067
    71517068/* Line 1806 of yacc.c  */
    71527069#line 1482 "parser.yy"
    7153     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
    7154     break;
    7155 
    7156   case 382:
    7157 
    7158 /* Line 1806 of yacc.c  */
    7159 #line 1484 "parser.yy"
    7160     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     7070    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
    71617071    break;
    71627072
     
    71647074
    71657075/* Line 1806 of yacc.c  */
     7076#line 1487 "parser.yy"
     7077    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     7078    break;
     7079
     7080  case 384:
     7081
     7082/* Line 1806 of yacc.c  */
    71667083#line 1489 "parser.yy"
    7167     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    7168     break;
    7169 
    7170   case 384:
    7171 
    7172 /* Line 1806 of yacc.c  */
    7173 #line 1491 "parser.yy"
    7174     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     7084    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    71757085    break;
    71767086
     
    71787088
    71797089/* Line 1806 of yacc.c  */
    7180 #line 1496 "parser.yy"
    7181     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     7090#line 1492 "parser.yy"
     7091    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    71827092    break;
    71837093
     
    71857095
    71867096/* Line 1806 of yacc.c  */
    7187 #line 1498 "parser.yy"
    7188     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
    7189     break;
    7190 
    7191   case 387:
     7097#line 1495 "parser.yy"
     7098    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     7099    break;
     7100
     7101  case 388:
    71927102
    71937103/* Line 1806 of yacc.c  */
    71947104#line 1501 "parser.yy"
    7195     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
    7196     break;
    7197 
    7198   case 388:
    7199 
    7200 /* Line 1806 of yacc.c  */
    7201 #line 1504 "parser.yy"
    7202     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     7105    { (yyval.en) = 0; }
     7106    break;
     7107
     7108  case 389:
     7109
     7110/* Line 1806 of yacc.c  */
     7111#line 1503 "parser.yy"
     7112    { (yyval.en) = (yyvsp[(1) - (1)].en); }
    72037113    break;
    72047114
     
    72067116
    72077117/* Line 1806 of yacc.c  */
    7208 #line 1510 "parser.yy"
     7118#line 1508 "parser.yy"
     7119    { (yyval.en) = (yyvsp[(2) - (2)].en); }
     7120    break;
     7121
     7122  case 392:
     7123
     7124/* Line 1806 of yacc.c  */
     7125#line 1517 "parser.yy"
     7126    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     7127    break;
     7128
     7129  case 393:
     7130
     7131/* Line 1806 of yacc.c  */
     7132#line 1519 "parser.yy"
     7133    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
     7134    break;
     7135
     7136  case 394:
     7137
     7138/* Line 1806 of yacc.c  */
     7139#line 1521 "parser.yy"
     7140    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
     7141    break;
     7142
     7143  case 395:
     7144
     7145/* Line 1806 of yacc.c  */
     7146#line 1526 "parser.yy"
     7147    { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     7148    break;
     7149
     7150  case 396:
     7151
     7152/* Line 1806 of yacc.c  */
     7153#line 1528 "parser.yy"
     7154    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     7155    break;
     7156
     7157  case 397:
     7158
     7159/* Line 1806 of yacc.c  */
     7160#line 1533 "parser.yy"
    72097161    { (yyval.en) = 0; }
    72107162    break;
    72117163
    7212   case 391:
    7213 
    7214 /* Line 1806 of yacc.c  */
    7215 #line 1512 "parser.yy"
    7216     { (yyval.en) = (yyvsp[(1) - (1)].en); }
    7217     break;
    7218 
    7219   case 392:
    7220 
    7221 /* Line 1806 of yacc.c  */
    7222 #line 1517 "parser.yy"
     7164  case 398:
     7165
     7166/* Line 1806 of yacc.c  */
     7167#line 1535 "parser.yy"
    72237168    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    72247169    break;
    72257170
    7226   case 394:
    7227 
    7228 /* Line 1806 of yacc.c  */
    7229 #line 1526 "parser.yy"
    7230     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
    7231     break;
    7232 
    7233   case 395:
    7234 
    7235 /* Line 1806 of yacc.c  */
    7236 #line 1528 "parser.yy"
    7237     {
    7238                         typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
    7239                         (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 );
    7240                 }
    7241     break;
    7242 
    7243   case 396:
    7244 
    7245 /* Line 1806 of yacc.c  */
    7246 #line 1533 "parser.yy"
    7247     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
    7248     break;
    7249 
    7250   case 397:
    7251 
    7252 /* Line 1806 of yacc.c  */
    7253 #line 1535 "parser.yy"
    7254     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
    7255     break;
    7256 
    7257   case 398:
    7258 
    7259 /* Line 1806 of yacc.c  */
    7260 #line 1540 "parser.yy"
    7261     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
    7262     break;
    7263 
    72647171  case 399:
    72657172
    72667173/* Line 1806 of yacc.c  */
    72677174#line 1542 "parser.yy"
    7268     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
    7269     break;
    7270 
    7271   case 400:
    7272 
    7273 /* Line 1806 of yacc.c  */
    7274 #line 1547 "parser.yy"
    7275     { (yyval.en) = 0; }
    7276     break;
    7277 
    7278   case 401:
    7279 
    7280 /* Line 1806 of yacc.c  */
    7281 #line 1549 "parser.yy"
    7282     { (yyval.en) = (yyvsp[(2) - (2)].en); }
    7283     break;
    7284 
    7285   case 402:
    7286 
    7287 /* Line 1806 of yacc.c  */
    7288 #line 1556 "parser.yy"
    72897175    { (yyval.decl) = 0; }
    72907176    break;
    72917177
    7292   case 406:
     7178  case 403:
     7179
     7180/* Line 1806 of yacc.c  */
     7181#line 1550 "parser.yy"
     7182    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7183    break;
     7184
     7185  case 404:
     7186
     7187/* Line 1806 of yacc.c  */
     7188#line 1552 "parser.yy"
     7189    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7190    break;
     7191
     7192  case 405:
     7193
     7194/* Line 1806 of yacc.c  */
     7195#line 1554 "parser.yy"
     7196    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     7197    break;
     7198
     7199  case 407:
     7200
     7201/* Line 1806 of yacc.c  */
     7202#line 1562 "parser.yy"
     7203    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7204    break;
     7205
     7206  case 408:
    72937207
    72947208/* Line 1806 of yacc.c  */
     
    72977211    break;
    72987212
    7299   case 407:
     7213  case 409:
    73007214
    73017215/* Line 1806 of yacc.c  */
    73027216#line 1566 "parser.yy"
     7217    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     7218    break;
     7219
     7220  case 411:
     7221
     7222/* Line 1806 of yacc.c  */
     7223#line 1572 "parser.yy"
     7224    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     7225    break;
     7226
     7227  case 412:
     7228
     7229/* Line 1806 of yacc.c  */
     7230#line 1577 "parser.yy"
     7231    { (yyval.decl) = 0; }
     7232    break;
     7233
     7234  case 415:
     7235
     7236/* Line 1806 of yacc.c  */
     7237#line 1584 "parser.yy"
    73037238    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    73047239    break;
    73057240
    7306   case 408:
    7307 
    7308 /* Line 1806 of yacc.c  */
    7309 #line 1568 "parser.yy"
    7310     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7311     break;
    7312 
    7313   case 410:
    7314 
    7315 /* Line 1806 of yacc.c  */
    7316 #line 1576 "parser.yy"
     7241  case 418:
     7242
     7243/* Line 1806 of yacc.c  */
     7244#line 1591 "parser.yy"
    73177245    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73187246    break;
    73197247
    7320   case 411:
    7321 
    7322 /* Line 1806 of yacc.c  */
    7323 #line 1578 "parser.yy"
     7248  case 419:
     7249
     7250/* Line 1806 of yacc.c  */
     7251#line 1593 "parser.yy"
    73247252    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    73257253    break;
    73267254
    7327   case 412:
    7328 
    7329 /* Line 1806 of yacc.c  */
    7330 #line 1580 "parser.yy"
    7331     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
    7332     break;
    7333 
    7334   case 414:
    7335 
    7336 /* Line 1806 of yacc.c  */
    7337 #line 1586 "parser.yy"
    7338     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7339     break;
    7340 
    7341   case 415:
    7342 
    7343 /* Line 1806 of yacc.c  */
    7344 #line 1591 "parser.yy"
    7345     { (yyval.decl) = 0; }
    7346     break;
    7347 
    7348   case 418:
    7349 
    7350 /* Line 1806 of yacc.c  */
    7351 #line 1598 "parser.yy"
    7352     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
    7353     break;
    7354 
    73557255  case 421:
    73567256
    73577257/* Line 1806 of yacc.c  */
     7258#line 1602 "parser.yy"
     7259    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     7260    break;
     7261
     7262  case 422:
     7263
     7264/* Line 1806 of yacc.c  */
    73587265#line 1605 "parser.yy"
    7359     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7360     break;
    7361 
    7362   case 422:
     7266    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     7267    break;
     7268
     7269  case 423:
    73637270
    73647271/* Line 1806 of yacc.c  */
    73657272#line 1607 "parser.yy"
    7366     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
    7367     break;
    7368 
    7369   case 424:
    7370 
    7371 /* Line 1806 of yacc.c  */
    7372 #line 1616 "parser.yy"
    7373     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7374     break;
    7375 
    7376   case 425:
    7377 
    7378 /* Line 1806 of yacc.c  */
    7379 #line 1619 "parser.yy"
    7380     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
    7381     break;
    7382 
    7383   case 426:
    7384 
    7385 /* Line 1806 of yacc.c  */
    7386 #line 1621 "parser.yy"
    73877273    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
    73887274    break;
    73897275
    7390   case 431:
    7391 
    7392 /* Line 1806 of yacc.c  */
    7393 #line 1631 "parser.yy"
     7276  case 428:
     7277
     7278/* Line 1806 of yacc.c  */
     7279#line 1617 "parser.yy"
    73947280    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    73957281    break;
    73967282
    7397   case 433:
    7398 
    7399 /* Line 1806 of yacc.c  */
    7400 #line 1637 "parser.yy"
     7283  case 430:
     7284
     7285/* Line 1806 of yacc.c  */
     7286#line 1623 "parser.yy"
    74017287    {
    74027288                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    74057291    break;
    74067292
    7407   case 434:
    7408 
    7409 /* Line 1806 of yacc.c  */
    7410 #line 1642 "parser.yy"
     7293  case 431:
     7294
     7295/* Line 1806 of yacc.c  */
     7296#line 1628 "parser.yy"
    74117297    {
    74127298                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    74157301    break;
    74167302
    7417   case 436:
    7418 
    7419 /* Line 1806 of yacc.c  */
    7420 #line 1651 "parser.yy"
     7303  case 433:
     7304
     7305/* Line 1806 of yacc.c  */
     7306#line 1637 "parser.yy"
    74217307    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    74227308    break;
    74237309
    7424   case 437:
    7425 
    7426 /* Line 1806 of yacc.c  */
    7427 #line 1660 "parser.yy"
     7310  case 434:
     7311
     7312/* Line 1806 of yacc.c  */
     7313#line 1646 "parser.yy"
    74287314    { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
    74297315    break;
    74307316
    7431   case 438:
    7432 
    7433 /* Line 1806 of yacc.c  */
    7434 #line 1662 "parser.yy"
     7317  case 435:
     7318
     7319/* Line 1806 of yacc.c  */
     7320#line 1648 "parser.yy"
    74357321    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
    74367322    break;
    74377323
    7438   case 450:
    7439 
    7440 /* Line 1806 of yacc.c  */
    7441 #line 1687 "parser.yy"
     7324  case 447:
     7325
     7326/* Line 1806 of yacc.c  */
     7327#line 1673 "parser.yy"
    74427328    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    74437329    break;
    74447330
     7331  case 451:
     7332
     7333/* Line 1806 of yacc.c  */
     7334#line 1681 "parser.yy"
     7335    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     7336    break;
     7337
     7338  case 452:
     7339
     7340/* Line 1806 of yacc.c  */
     7341#line 1686 "parser.yy"
     7342    { (yyval.in) = 0; }
     7343    break;
     7344
     7345  case 453:
     7346
     7347/* Line 1806 of yacc.c  */
     7348#line 1688 "parser.yy"
     7349    { (yyval.in) = (yyvsp[(2) - (2)].in); }
     7350    break;
     7351
    74457352  case 454:
    74467353
    74477354/* Line 1806 of yacc.c  */
     7355#line 1690 "parser.yy"
     7356    { (yyval.in) = (yyvsp[(2) - (2)].in); }
     7357    break;
     7358
     7359  case 455:
     7360
     7361/* Line 1806 of yacc.c  */
     7362#line 1694 "parser.yy"
     7363    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     7364    break;
     7365
     7366  case 456:
     7367
     7368/* Line 1806 of yacc.c  */
    74487369#line 1695 "parser.yy"
    7449     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
    7450     break;
    7451 
    7452   case 455:
     7370    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     7371    break;
     7372
     7373  case 457:
    74537374
    74547375/* Line 1806 of yacc.c  */
     
    74577378    break;
    74587379
    7459   case 456:
     7380  case 459:
    74607381
    74617382/* Line 1806 of yacc.c  */
    74627383#line 1702 "parser.yy"
    7463     { (yyval.in) = (yyvsp[(2) - (2)].in); }
    7464     break;
    7465 
    7466   case 457:
    7467 
    7468 /* Line 1806 of yacc.c  */
    7469 #line 1704 "parser.yy"
    7470     { (yyval.in) = (yyvsp[(2) - (2)].in); }
    7471     break;
    7472 
    7473   case 458:
    7474 
    7475 /* Line 1806 of yacc.c  */
    7476 #line 1708 "parser.yy"
    7477     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
    7478     break;
    7479 
    7480   case 459:
    7481 
    7482 /* Line 1806 of yacc.c  */
    7483 #line 1709 "parser.yy"
    7484     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     7384    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
    74857385    break;
    74867386
     
    74887388
    74897389/* Line 1806 of yacc.c  */
    7490 #line 1714 "parser.yy"
    7491     { (yyval.in) = 0; }
    7492     break;
    7493 
    7494   case 462:
    7495 
    7496 /* Line 1806 of yacc.c  */
    7497 #line 1716 "parser.yy"
    7498     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     7390#line 1703 "parser.yy"
     7391    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     7392    break;
     7393
     7394  case 461:
     7395
     7396/* Line 1806 of yacc.c  */
     7397#line 1705 "parser.yy"
     7398    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
    74997399    break;
    75007400
     
    75027402
    75037403/* Line 1806 of yacc.c  */
    7504 #line 1717 "parser.yy"
    7505     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
    7506     break;
    7507 
    7508   case 464:
    7509 
    7510 /* Line 1806 of yacc.c  */
    7511 #line 1719 "parser.yy"
    7512     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     7404#line 1721 "parser.yy"
     7405    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     7406    break;
     7407
     7408  case 465:
     7409
     7410/* Line 1806 of yacc.c  */
     7411#line 1727 "parser.yy"
     7412    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
    75137413    break;
    75147414
     
    75177417/* Line 1806 of yacc.c  */
    75187418#line 1735 "parser.yy"
    7519     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     7419    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     7420    break;
     7421
     7422  case 467:
     7423
     7424/* Line 1806 of yacc.c  */
     7425#line 1737 "parser.yy"
     7426    { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
    75207427    break;
    75217428
     
    75237430
    75247431/* Line 1806 of yacc.c  */
    7525 #line 1741 "parser.yy"
    7526     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     7432#line 1740 "parser.yy"
     7433    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    75277434    break;
    75287435
     
    75307437
    75317438/* Line 1806 of yacc.c  */
    7532 #line 1749 "parser.yy"
    7533     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     7439#line 1742 "parser.yy"
     7440    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    75347441    break;
    75357442
     
    75377444
    75387445/* Line 1806 of yacc.c  */
    7539 #line 1751 "parser.yy"
    7540     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     7446#line 1744 "parser.yy"
     7447    { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
    75417448    break;
    75427449
     
    75447451
    75457452/* Line 1806 of yacc.c  */
    7546 #line 1754 "parser.yy"
    7547     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
    7548     break;
    7549 
    7550   case 472:
    7551 
    7552 /* Line 1806 of yacc.c  */
    7553 #line 1756 "parser.yy"
    7554     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     7453#line 1746 "parser.yy"
     7454    { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    75557455    break;
    75567456
     
    75587458
    75597459/* Line 1806 of yacc.c  */
    7560 #line 1758 "parser.yy"
    7561     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
     7460#line 1770 "parser.yy"
     7461    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75627462    break;
    75637463
     
    75657465
    75667466/* Line 1806 of yacc.c  */
    7567 #line 1760 "parser.yy"
    7568     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
    7569     break;
    7570 
    7571   case 476:
    7572 
    7573 /* Line 1806 of yacc.c  */
    7574 #line 1784 "parser.yy"
     7467#line 1772 "parser.yy"
     7468    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7469    break;
     7470
     7471  case 475:
     7472
     7473/* Line 1806 of yacc.c  */
     7474#line 1774 "parser.yy"
     7475    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     7476    break;
     7477
     7478  case 477:
     7479
     7480/* Line 1806 of yacc.c  */
     7481#line 1780 "parser.yy"
    75757482    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    75767483    break;
    75777484
    7578   case 477:
    7579 
    7580 /* Line 1806 of yacc.c  */
    7581 #line 1786 "parser.yy"
     7485  case 478:
     7486
     7487/* Line 1806 of yacc.c  */
     7488#line 1782 "parser.yy"
    75827489    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    75837490    break;
    75847491
    7585   case 478:
    7586 
    7587 /* Line 1806 of yacc.c  */
    7588 #line 1788 "parser.yy"
    7589     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
    7590     break;
    7591 
    7592   case 480:
    7593 
    7594 /* Line 1806 of yacc.c  */
    7595 #line 1794 "parser.yy"
    7596     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     7492  case 479:
     7493
     7494/* Line 1806 of yacc.c  */
     7495#line 1787 "parser.yy"
     7496    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    75977497    break;
    75987498
     
    76007500
    76017501/* Line 1806 of yacc.c  */
    7602 #line 1796 "parser.yy"
    7603     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     7502#line 1793 "parser.yy"
     7503    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
    76047504    break;
    76057505
     
    76077507
    76087508/* Line 1806 of yacc.c  */
    7609 #line 1801 "parser.yy"
    7610     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
    7611     break;
    7612 
    7613   case 484:
    7614 
    7615 /* Line 1806 of yacc.c  */
    7616 #line 1807 "parser.yy"
    7617     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     7509#line 1798 "parser.yy"
     7510    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     7511    break;
     7512
     7513  case 483:
     7514
     7515/* Line 1806 of yacc.c  */
     7516#line 1800 "parser.yy"
     7517    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
    76187518    break;
    76197519
     
    76217521
    76227522/* Line 1806 of yacc.c  */
    7623 #line 1812 "parser.yy"
    7624     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     7523#line 1806 "parser.yy"
     7524    { (yyval.tclass) = DeclarationNode::Type; }
    76257525    break;
    76267526
     
    76287528
    76297529/* Line 1806 of yacc.c  */
    7630 #line 1814 "parser.yy"
    7631     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     7530#line 1808 "parser.yy"
     7531    { (yyval.tclass) = DeclarationNode::Ftype; }
     7532    break;
     7533
     7534  case 487:
     7535
     7536/* Line 1806 of yacc.c  */
     7537#line 1810 "parser.yy"
     7538    { (yyval.tclass) = DeclarationNode::Dtype; }
    76327539    break;
    76337540
     
    76357542
    76367543/* Line 1806 of yacc.c  */
    7637 #line 1820 "parser.yy"
    7638     { (yyval.tclass) = DeclarationNode::Type; }
     7544#line 1815 "parser.yy"
     7545    { (yyval.decl) = 0; }
    76397546    break;
    76407547
     
    76427549
    76437550/* Line 1806 of yacc.c  */
     7551#line 1817 "parser.yy"
     7552    { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     7553    break;
     7554
     7555  case 490:
     7556
     7557/* Line 1806 of yacc.c  */
    76447558#line 1822 "parser.yy"
    7645     { (yyval.tclass) = DeclarationNode::Ftype; }
    7646     break;
    7647 
    7648   case 490:
    7649 
    7650 /* Line 1806 of yacc.c  */
    7651 #line 1824 "parser.yy"
    7652     { (yyval.tclass) = DeclarationNode::Dtype; }
     7559    {
     7560                        typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
     7561                        (yyval.decl) = DeclarationNode::newContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
     7562                }
    76537563    break;
    76547564
    76557565  case 491:
     7566
     7567/* Line 1806 of yacc.c  */
     7568#line 1827 "parser.yy"
     7569    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     7570    break;
     7571
     7572  case 492:
    76567573
    76577574/* Line 1806 of yacc.c  */
     
    76607577    break;
    76617578
    7662   case 492:
    7663 
    7664 /* Line 1806 of yacc.c  */
    7665 #line 1831 "parser.yy"
    7666     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
    7667     break;
    7668 
    76697579  case 493:
    76707580
    76717581/* Line 1806 of yacc.c  */
    7672 #line 1836 "parser.yy"
    7673     {
    7674                         typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
    7675                         (yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
    7676                 }
    7677     break;
    7678 
    7679   case 494:
    7680 
    7681 /* Line 1806 of yacc.c  */
    7682 #line 1841 "parser.yy"
    7683     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     7582#line 1834 "parser.yy"
     7583    { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    76847584    break;
    76857585
     
    76877587
    76887588/* Line 1806 of yacc.c  */
    7689 #line 1843 "parser.yy"
    7690     { (yyval.decl) = 0; }
     7589#line 1837 "parser.yy"
     7590    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    76917591    break;
    76927592
     
    76947594
    76957595/* Line 1806 of yacc.c  */
     7596#line 1839 "parser.yy"
     7597    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     7598    break;
     7599
     7600  case 497:
     7601
     7602/* Line 1806 of yacc.c  */
     7603#line 1844 "parser.yy"
     7604    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     7605    break;
     7606
     7607  case 498:
     7608
     7609/* Line 1806 of yacc.c  */
     7610#line 1846 "parser.yy"
     7611    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     7612    break;
     7613
     7614  case 499:
     7615
     7616/* Line 1806 of yacc.c  */
    76967617#line 1848 "parser.yy"
    7697     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
    7698     break;
    7699 
    7700   case 498:
    7701 
    7702 /* Line 1806 of yacc.c  */
    7703 #line 1851 "parser.yy"
    7704     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
    7705     break;
    7706 
    7707   case 499:
     7618    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     7619    break;
     7620
     7621  case 500:
    77087622
    77097623/* Line 1806 of yacc.c  */
    77107624#line 1853 "parser.yy"
    7711     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
    7712     break;
    7713 
    7714   case 500:
    7715 
    7716 /* Line 1806 of yacc.c  */
    7717 #line 1858 "parser.yy"
    7718     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     7625    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    77197626    break;
    77207627
     
    77227629
    77237630/* Line 1806 of yacc.c  */
     7631#line 1855 "parser.yy"
     7632    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     7633    break;
     7634
     7635  case 502:
     7636
     7637/* Line 1806 of yacc.c  */
    77247638#line 1860 "parser.yy"
    7725     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
    7726     break;
    7727 
    7728   case 502:
    7729 
    7730 /* Line 1806 of yacc.c  */
    7731 #line 1862 "parser.yy"
    7732     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
    7733     break;
    7734 
    7735   case 503:
    7736 
    7737 /* Line 1806 of yacc.c  */
    7738 #line 1867 "parser.yy"
    7739     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
    7740     break;
    7741 
    7742   case 504:
    7743 
    7744 /* Line 1806 of yacc.c  */
    7745 #line 1869 "parser.yy"
    7746     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
    7747     break;
    7748 
    7749   case 505:
    7750 
    7751 /* Line 1806 of yacc.c  */
    7752 #line 1874 "parser.yy"
    77537639    {
    77547640                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
     
    77577643    break;
    77587644
    7759   case 506:
    7760 
    7761 /* Line 1806 of yacc.c  */
    7762 #line 1879 "parser.yy"
     7645  case 503:
     7646
     7647/* Line 1806 of yacc.c  */
     7648#line 1865 "parser.yy"
    77637649    {
    77647650                        typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
     
    77677653    break;
    77687654
    7769   case 507:
    7770 
    7771 /* Line 1806 of yacc.c  */
    7772 #line 1887 "parser.yy"
     7655  case 504:
     7656
     7657/* Line 1806 of yacc.c  */
     7658#line 1873 "parser.yy"
    77737659    {
    77747660                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
    7775                         (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
     7661                        (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
    77767662                }
    77777663    break;
    77787664
    7779   case 508:
    7780 
    7781 /* Line 1806 of yacc.c  */
    7782 #line 1892 "parser.yy"
     7665  case 505:
     7666
     7667/* Line 1806 of yacc.c  */
     7668#line 1878 "parser.yy"
    77837669    {
    7784                         typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
     7670                        typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
    77857671                        typedefTable.enterScope();
    77867672                }
    77877673    break;
    77887674
    7789   case 509:
    7790 
    7791 /* Line 1806 of yacc.c  */
    7792 #line 1897 "parser.yy"
     7675  case 506:
     7676
     7677/* Line 1806 of yacc.c  */
     7678#line 1883 "parser.yy"
    77937679    {
    7794                         typedefTable.leaveTrait();
     7680                        typedefTable.leaveContext();
    77957681                        typedefTable.addToEnclosingScope( *(yyvsp[(2) - (11)].tok), TypedefTable::ID );
    7796                         (yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
     7682                        (yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
    77977683                }
    77987684    break;
    77997685
     7686  case 508:
     7687
     7688/* Line 1806 of yacc.c  */
     7689#line 1893 "parser.yy"
     7690    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     7691    break;
     7692
    78007693  case 511:
    78017694
    78027695/* Line 1806 of yacc.c  */
    7803 #line 1907 "parser.yy"
    7804     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
    7805     break;
    7806 
    7807   case 514:
    7808 
    7809 /* Line 1806 of yacc.c  */
    7810 #line 1917 "parser.yy"
     7696#line 1903 "parser.yy"
    78117697    {
    78127698                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78157701    break;
    78167702
    7817   case 515:
    7818 
    7819 /* Line 1806 of yacc.c  */
    7820 #line 1922 "parser.yy"
     7703  case 512:
     7704
     7705/* Line 1806 of yacc.c  */
     7706#line 1908 "parser.yy"
    78217707    {
    78227708                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78257711    break;
    78267712
    7827   case 516:
    7828 
    7829 /* Line 1806 of yacc.c  */
    7830 #line 1927 "parser.yy"
     7713  case 513:
     7714
     7715/* Line 1806 of yacc.c  */
     7716#line 1913 "parser.yy"
    78317717    {
    78327718                        typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
     
    78357721    break;
    78367722
    7837   case 517:
    7838 
    7839 /* Line 1806 of yacc.c  */
    7840 #line 1935 "parser.yy"
     7723  case 514:
     7724
     7725/* Line 1806 of yacc.c  */
     7726#line 1921 "parser.yy"
    78417727    {
    78427728                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78457731    break;
    78467732
    7847   case 518:
    7848 
    7849 /* Line 1806 of yacc.c  */
    7850 #line 1940 "parser.yy"
     7733  case 515:
     7734
     7735/* Line 1806 of yacc.c  */
     7736#line 1926 "parser.yy"
    78517737    {
    78527738                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    78557741    break;
    78567742
    7857   case 519:
    7858 
    7859 /* Line 1806 of yacc.c  */
    7860 #line 1950 "parser.yy"
     7743  case 516:
     7744
     7745/* Line 1806 of yacc.c  */
     7746#line 1936 "parser.yy"
    78617747    {}
    78627748    break;
    78637749
    7864   case 520:
    7865 
    7866 /* Line 1806 of yacc.c  */
    7867 #line 1952 "parser.yy"
     7750  case 517:
     7751
     7752/* Line 1806 of yacc.c  */
     7753#line 1938 "parser.yy"
    78687754    {
    78697755                        if ( theTree ) {
     
    78757761    break;
    78767762
    7877   case 522:
    7878 
    7879 /* Line 1806 of yacc.c  */
    7880 #line 1964 "parser.yy"
     7763  case 519:
     7764
     7765/* Line 1806 of yacc.c  */
     7766#line 1950 "parser.yy"
    78817767    { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
    78827768    break;
    78837769
    7884   case 523:
    7885 
    7886 /* Line 1806 of yacc.c  */
    7887 #line 1969 "parser.yy"
     7770  case 520:
     7771
     7772/* Line 1806 of yacc.c  */
     7773#line 1955 "parser.yy"
    78887774    { (yyval.decl) = 0; }
    78897775    break;
    78907776
    7891   case 527:
    7892 
    7893 /* Line 1806 of yacc.c  */
    7894 #line 1977 "parser.yy"
     7777  case 524:
     7778
     7779/* Line 1806 of yacc.c  */
     7780#line 1963 "parser.yy"
    78957781    {}
    78967782    break;
    78977783
    7898   case 528:
    7899 
    7900 /* Line 1806 of yacc.c  */
    7901 #line 1979 "parser.yy"
     7784  case 525:
     7785
     7786/* Line 1806 of yacc.c  */
     7787#line 1965 "parser.yy"
    79027788    {
    79037789                        linkageStack.push( linkage );
     
    79067792    break;
    79077793
    7908   case 529:
    7909 
    7910 /* Line 1806 of yacc.c  */
    7911 #line 1984 "parser.yy"
     7794  case 526:
     7795
     7796/* Line 1806 of yacc.c  */
     7797#line 1970 "parser.yy"
    79127798    {
    79137799                        linkage = linkageStack.top();
     
    79177803    break;
    79187804
    7919   case 530:
    7920 
    7921 /* Line 1806 of yacc.c  */
    7922 #line 1990 "parser.yy"
     7805  case 527:
     7806
     7807/* Line 1806 of yacc.c  */
     7808#line 1976 "parser.yy"
    79237809    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
    79247810    break;
    79257811
    7926   case 532:
    7927 
    7928 /* Line 1806 of yacc.c  */
    7929 #line 2000 "parser.yy"
     7812  case 529:
     7813
     7814/* Line 1806 of yacc.c  */
     7815#line 1986 "parser.yy"
    79307816    {
    79317817                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79357821    break;
    79367822
    7937   case 533:
    7938 
    7939 /* Line 1806 of yacc.c  */
    7940 #line 2006 "parser.yy"
     7823  case 530:
     7824
     7825/* Line 1806 of yacc.c  */
     7826#line 1992 "parser.yy"
    79417827    {
    79427828                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79467832    break;
    79477833
    7948   case 534:
    7949 
    7950 /* Line 1806 of yacc.c  */
    7951 #line 2015 "parser.yy"
     7834  case 531:
     7835
     7836/* Line 1806 of yacc.c  */
     7837#line 2001 "parser.yy"
    79527838    {
    79537839                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79577843    break;
    79587844
    7959   case 535:
    7960 
    7961 /* Line 1806 of yacc.c  */
    7962 #line 2021 "parser.yy"
     7845  case 532:
     7846
     7847/* Line 1806 of yacc.c  */
     7848#line 2007 "parser.yy"
    79637849    {
    79647850                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79687854    break;
    79697855
    7970   case 536:
    7971 
    7972 /* Line 1806 of yacc.c  */
    7973 #line 2027 "parser.yy"
     7856  case 533:
     7857
     7858/* Line 1806 of yacc.c  */
     7859#line 2013 "parser.yy"
    79747860    {
    79757861                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79797865    break;
    79807866
    7981   case 537:
    7982 
    7983 /* Line 1806 of yacc.c  */
    7984 #line 2033 "parser.yy"
     7867  case 534:
     7868
     7869/* Line 1806 of yacc.c  */
     7870#line 2019 "parser.yy"
    79857871    {
    79867872                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    79907876    break;
    79917877
    7992   case 538:
    7993 
    7994 /* Line 1806 of yacc.c  */
    7995 #line 2039 "parser.yy"
     7878  case 535:
     7879
     7880/* Line 1806 of yacc.c  */
     7881#line 2025 "parser.yy"
    79967882    {
    79977883                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80017887    break;
    80027888
    8003   case 539:
    8004 
    8005 /* Line 1806 of yacc.c  */
    8006 #line 2047 "parser.yy"
     7889  case 536:
     7890
     7891/* Line 1806 of yacc.c  */
     7892#line 2033 "parser.yy"
    80077893    {
    80087894                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80127898    break;
    80137899
    8014   case 540:
    8015 
    8016 /* Line 1806 of yacc.c  */
    8017 #line 2053 "parser.yy"
     7900  case 537:
     7901
     7902/* Line 1806 of yacc.c  */
     7903#line 2039 "parser.yy"
    80187904    {
    80197905                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80237909    break;
    80247910
    8025   case 541:
    8026 
    8027 /* Line 1806 of yacc.c  */
    8028 #line 2061 "parser.yy"
     7911  case 538:
     7912
     7913/* Line 1806 of yacc.c  */
     7914#line 2047 "parser.yy"
    80297915    {
    80307916                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80347920    break;
    80357921
    8036   case 542:
    8037 
    8038 /* Line 1806 of yacc.c  */
    8039 #line 2067 "parser.yy"
     7922  case 539:
     7923
     7924/* Line 1806 of yacc.c  */
     7925#line 2053 "parser.yy"
    80407926    {
    80417927                        typedefTable.addToEnclosingScope( TypedefTable::ID );
     
    80457931    break;
    80467932
     7933  case 543:
     7934
     7935/* Line 1806 of yacc.c  */
     7936#line 2068 "parser.yy"
     7937    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     7938    break;
     7939
    80477940  case 546:
    80487941
    80497942/* Line 1806 of yacc.c  */
    8050 #line 2082 "parser.yy"
    8051     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     7943#line 2078 "parser.yy"
     7944    { (yyval.decl) = 0; }
    80527945    break;
    80537946
     
    80557948
    80567949/* Line 1806 of yacc.c  */
    8057 #line 2092 "parser.yy"
     7950#line 2085 "parser.yy"
     7951    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     7952    break;
     7953
     7954  case 550:
     7955
     7956/* Line 1806 of yacc.c  */
     7957#line 2091 "parser.yy"
    80587958    { (yyval.decl) = 0; }
    80597959    break;
    80607960
    8061   case 552:
    8062 
    8063 /* Line 1806 of yacc.c  */
    8064 #line 2099 "parser.yy"
    8065     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    8066     break;
    8067 
    8068   case 553:
    8069 
    8070 /* Line 1806 of yacc.c  */
    8071 #line 2105 "parser.yy"
    8072     { (yyval.decl) = 0; }
     7961  case 556:
     7962
     7963/* Line 1806 of yacc.c  */
     7964#line 2106 "parser.yy"
     7965    {}
     7966    break;
     7967
     7968  case 557:
     7969
     7970/* Line 1806 of yacc.c  */
     7971#line 2107 "parser.yy"
     7972    {}
     7973    break;
     7974
     7975  case 558:
     7976
     7977/* Line 1806 of yacc.c  */
     7978#line 2108 "parser.yy"
     7979    {}
    80737980    break;
    80747981
     
    80767983
    80777984/* Line 1806 of yacc.c  */
    8078 #line 2120 "parser.yy"
     7985#line 2109 "parser.yy"
    80797986    {}
    80807987    break;
     
    80837990
    80847991/* Line 1806 of yacc.c  */
    8085 #line 2121 "parser.yy"
    8086     {}
    8087     break;
    8088 
    8089   case 561:
    8090 
    8091 /* Line 1806 of yacc.c  */
    8092 #line 2122 "parser.yy"
    8093     {}
     7992#line 2144 "parser.yy"
     7993    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    80947994    break;
    80957995
     
    80977997
    80987998/* Line 1806 of yacc.c  */
    8099 #line 2123 "parser.yy"
    8100     {}
     7999#line 2147 "parser.yy"
     8000    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81018001    break;
    81028002
     
    81048004
    81058005/* Line 1806 of yacc.c  */
    8106 #line 2158 "parser.yy"
     8006#line 2149 "parser.yy"
    81078007    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    81088008    break;
    81098009
    8110   case 565:
    8111 
    8112 /* Line 1806 of yacc.c  */
    8113 #line 2161 "parser.yy"
    8114     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8115     break;
    8116 
    8117   case 566:
    8118 
    8119 /* Line 1806 of yacc.c  */
    8120 #line 2163 "parser.yy"
    8121     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8122     break;
    8123 
    8124   case 567:
    8125 
    8126 /* Line 1806 of yacc.c  */
    8127 #line 2168 "parser.yy"
     8010  case 564:
     8011
     8012/* Line 1806 of yacc.c  */
     8013#line 2154 "parser.yy"
    81288014    {
    81298015                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    81328018    break;
    81338019
     8020  case 565:
     8021
     8022/* Line 1806 of yacc.c  */
     8023#line 2159 "parser.yy"
     8024    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8025    break;
     8026
     8027  case 566:
     8028
     8029/* Line 1806 of yacc.c  */
     8030#line 2164 "parser.yy"
     8031    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8032    break;
     8033
     8034  case 567:
     8035
     8036/* Line 1806 of yacc.c  */
     8037#line 2166 "parser.yy"
     8038    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8039    break;
     8040
    81348041  case 568:
    81358042
    81368043/* Line 1806 of yacc.c  */
     8044#line 2168 "parser.yy"
     8045    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8046    break;
     8047
     8048  case 569:
     8049
     8050/* Line 1806 of yacc.c  */
    81378051#line 2173 "parser.yy"
     8052    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8053    break;
     8054
     8055  case 570:
     8056
     8057/* Line 1806 of yacc.c  */
     8058#line 2175 "parser.yy"
     8059    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8060    break;
     8061
     8062  case 571:
     8063
     8064/* Line 1806 of yacc.c  */
     8065#line 2177 "parser.yy"
     8066    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8067    break;
     8068
     8069  case 572:
     8070
     8071/* Line 1806 of yacc.c  */
     8072#line 2179 "parser.yy"
    81388073    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81398074    break;
    81408075
    8141   case 569:
    8142 
    8143 /* Line 1806 of yacc.c  */
    8144 #line 2178 "parser.yy"
     8076  case 573:
     8077
     8078/* Line 1806 of yacc.c  */
     8079#line 2184 "parser.yy"
     8080    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8081    break;
     8082
     8083  case 574:
     8084
     8085/* Line 1806 of yacc.c  */
     8086#line 2186 "parser.yy"
     8087    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8088    break;
     8089
     8090  case 575:
     8091
     8092/* Line 1806 of yacc.c  */
     8093#line 2196 "parser.yy"
     8094    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8095    break;
     8096
     8097  case 577:
     8098
     8099/* Line 1806 of yacc.c  */
     8100#line 2199 "parser.yy"
     8101    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8102    break;
     8103
     8104  case 578:
     8105
     8106/* Line 1806 of yacc.c  */
     8107#line 2204 "parser.yy"
     8108    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8109    break;
     8110
     8111  case 579:
     8112
     8113/* Line 1806 of yacc.c  */
     8114#line 2206 "parser.yy"
     8115    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8116    break;
     8117
     8118  case 580:
     8119
     8120/* Line 1806 of yacc.c  */
     8121#line 2208 "parser.yy"
     8122    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8123    break;
     8124
     8125  case 581:
     8126
     8127/* Line 1806 of yacc.c  */
     8128#line 2213 "parser.yy"
    81458129    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    81468130    break;
    81478131
    8148   case 570:
    8149 
    8150 /* Line 1806 of yacc.c  */
    8151 #line 2180 "parser.yy"
     8132  case 582:
     8133
     8134/* Line 1806 of yacc.c  */
     8135#line 2215 "parser.yy"
    81528136    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    81538137    break;
    81548138
    8155   case 571:
    8156 
    8157 /* Line 1806 of yacc.c  */
    8158 #line 2182 "parser.yy"
     8139  case 583:
     8140
     8141/* Line 1806 of yacc.c  */
     8142#line 2217 "parser.yy"
    81598143    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81608144    break;
    81618145
    8162   case 572:
    8163 
    8164 /* Line 1806 of yacc.c  */
    8165 #line 2187 "parser.yy"
     8146  case 584:
     8147
     8148/* Line 1806 of yacc.c  */
     8149#line 2222 "parser.yy"
     8150    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8151    break;
     8152
     8153  case 585:
     8154
     8155/* Line 1806 of yacc.c  */
     8156#line 2224 "parser.yy"
     8157    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8158    break;
     8159
     8160  case 586:
     8161
     8162/* Line 1806 of yacc.c  */
     8163#line 2226 "parser.yy"
     8164    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8165    break;
     8166
     8167  case 590:
     8168
     8169/* Line 1806 of yacc.c  */
     8170#line 2241 "parser.yy"
     8171    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     8172    break;
     8173
     8174  case 591:
     8175
     8176/* Line 1806 of yacc.c  */
     8177#line 2243 "parser.yy"
     8178    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     8179    break;
     8180
     8181  case 592:
     8182
     8183/* Line 1806 of yacc.c  */
     8184#line 2245 "parser.yy"
     8185    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8186    break;
     8187
     8188  case 593:
     8189
     8190/* Line 1806 of yacc.c  */
     8191#line 2250 "parser.yy"
     8192    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8193    break;
     8194
     8195  case 594:
     8196
     8197/* Line 1806 of yacc.c  */
     8198#line 2252 "parser.yy"
     8199    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8200    break;
     8201
     8202  case 595:
     8203
     8204/* Line 1806 of yacc.c  */
     8205#line 2254 "parser.yy"
     8206    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8207    break;
     8208
     8209  case 596:
     8210
     8211/* Line 1806 of yacc.c  */
     8212#line 2259 "parser.yy"
     8213    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8214    break;
     8215
     8216  case 597:
     8217
     8218/* Line 1806 of yacc.c  */
     8219#line 2261 "parser.yy"
     8220    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8221    break;
     8222
     8223  case 598:
     8224
     8225/* Line 1806 of yacc.c  */
     8226#line 2263 "parser.yy"
     8227    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8228    break;
     8229
     8230  case 599:
     8231
     8232/* Line 1806 of yacc.c  */
     8233#line 2278 "parser.yy"
     8234    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8235    break;
     8236
     8237  case 601:
     8238
     8239/* Line 1806 of yacc.c  */
     8240#line 2281 "parser.yy"
     8241    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8242    break;
     8243
     8244  case 602:
     8245
     8246/* Line 1806 of yacc.c  */
     8247#line 2283 "parser.yy"
     8248    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8249    break;
     8250
     8251  case 604:
     8252
     8253/* Line 1806 of yacc.c  */
     8254#line 2289 "parser.yy"
     8255    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8256    break;
     8257
     8258  case 605:
     8259
     8260/* Line 1806 of yacc.c  */
     8261#line 2294 "parser.yy"
     8262    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8263    break;
     8264
     8265  case 606:
     8266
     8267/* Line 1806 of yacc.c  */
     8268#line 2296 "parser.yy"
     8269    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8270    break;
     8271
     8272  case 607:
     8273
     8274/* Line 1806 of yacc.c  */
     8275#line 2298 "parser.yy"
     8276    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8277    break;
     8278
     8279  case 608:
     8280
     8281/* Line 1806 of yacc.c  */
     8282#line 2303 "parser.yy"
    81668283    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    81678284    break;
    81688285
    8169   case 573:
    8170 
    8171 /* Line 1806 of yacc.c  */
    8172 #line 2189 "parser.yy"
     8286  case 609:
     8287
     8288/* Line 1806 of yacc.c  */
     8289#line 2305 "parser.yy"
    81738290    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81748291    break;
    81758292
    8176   case 574:
    8177 
    8178 /* Line 1806 of yacc.c  */
    8179 #line 2191 "parser.yy"
     8293  case 610:
     8294
     8295/* Line 1806 of yacc.c  */
     8296#line 2307 "parser.yy"
    81808297    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    81818298    break;
    81828299
    8183   case 575:
    8184 
    8185 /* Line 1806 of yacc.c  */
    8186 #line 2193 "parser.yy"
     8300  case 611:
     8301
     8302/* Line 1806 of yacc.c  */
     8303#line 2309 "parser.yy"
    81878304    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    81888305    break;
    81898306
    8190   case 576:
    8191 
    8192 /* Line 1806 of yacc.c  */
    8193 #line 2198 "parser.yy"
     8307  case 612:
     8308
     8309/* Line 1806 of yacc.c  */
     8310#line 2314 "parser.yy"
     8311    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8312    break;
     8313
     8314  case 613:
     8315
     8316/* Line 1806 of yacc.c  */
     8317#line 2316 "parser.yy"
    81948318    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    81958319    break;
    81968320
    8197   case 577:
    8198 
    8199 /* Line 1806 of yacc.c  */
    8200 #line 2200 "parser.yy"
     8321  case 614:
     8322
     8323/* Line 1806 of yacc.c  */
     8324#line 2318 "parser.yy"
    82018325    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82028326    break;
    82038327
    8204   case 578:
    8205 
    8206 /* Line 1806 of yacc.c  */
    8207 #line 2210 "parser.yy"
     8328  case 615:
     8329
     8330/* Line 1806 of yacc.c  */
     8331#line 2328 "parser.yy"
    82088332    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82098333    break;
    82108334
    8211   case 580:
    8212 
    8213 /* Line 1806 of yacc.c  */
    8214 #line 2213 "parser.yy"
     8335  case 617:
     8336
     8337/* Line 1806 of yacc.c  */
     8338#line 2331 "parser.yy"
    82158339    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    82168340    break;
    82178341
    8218   case 581:
    8219 
    8220 /* Line 1806 of yacc.c  */
    8221 #line 2218 "parser.yy"
     8342  case 618:
     8343
     8344/* Line 1806 of yacc.c  */
     8345#line 2333 "parser.yy"
     8346    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8347    break;
     8348
     8349  case 619:
     8350
     8351/* Line 1806 of yacc.c  */
     8352#line 2338 "parser.yy"
     8353    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8354    break;
     8355
     8356  case 620:
     8357
     8358/* Line 1806 of yacc.c  */
     8359#line 2340 "parser.yy"
     8360    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8361    break;
     8362
     8363  case 621:
     8364
     8365/* Line 1806 of yacc.c  */
     8366#line 2342 "parser.yy"
     8367    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8368    break;
     8369
     8370  case 622:
     8371
     8372/* Line 1806 of yacc.c  */
     8373#line 2347 "parser.yy"
     8374    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8375    break;
     8376
     8377  case 623:
     8378
     8379/* Line 1806 of yacc.c  */
     8380#line 2349 "parser.yy"
     8381    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8382    break;
     8383
     8384  case 624:
     8385
     8386/* Line 1806 of yacc.c  */
     8387#line 2351 "parser.yy"
     8388    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8389    break;
     8390
     8391  case 625:
     8392
     8393/* Line 1806 of yacc.c  */
     8394#line 2353 "parser.yy"
     8395    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8396    break;
     8397
     8398  case 626:
     8399
     8400/* Line 1806 of yacc.c  */
     8401#line 2358 "parser.yy"
    82228402    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    82238403    break;
    82248404
    8225   case 582:
    8226 
    8227 /* Line 1806 of yacc.c  */
    8228 #line 2220 "parser.yy"
     8405  case 627:
     8406
     8407/* Line 1806 of yacc.c  */
     8408#line 2360 "parser.yy"
    82298409    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    82308410    break;
    82318411
    8232   case 583:
    8233 
    8234 /* Line 1806 of yacc.c  */
    8235 #line 2222 "parser.yy"
     8412  case 628:
     8413
     8414/* Line 1806 of yacc.c  */
     8415#line 2362 "parser.yy"
    82368416    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    82378417    break;
    82388418
    8239   case 584:
    8240 
    8241 /* Line 1806 of yacc.c  */
    8242 #line 2227 "parser.yy"
    8243     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8244     break;
    8245 
    8246   case 585:
    8247 
    8248 /* Line 1806 of yacc.c  */
    8249 #line 2229 "parser.yy"
    8250     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8251     break;
    8252 
    8253   case 586:
    8254 
    8255 /* Line 1806 of yacc.c  */
    8256 #line 2231 "parser.yy"
    8257     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8258     break;
    8259 
    8260   case 587:
    8261 
    8262 /* Line 1806 of yacc.c  */
    8263 #line 2236 "parser.yy"
    8264     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8265     break;
    8266 
    8267   case 588:
    8268 
    8269 /* Line 1806 of yacc.c  */
    8270 #line 2238 "parser.yy"
    8271     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8272     break;
    8273 
    8274   case 589:
    8275 
    8276 /* Line 1806 of yacc.c  */
    8277 #line 2240 "parser.yy"
    8278     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8279     break;
    8280 
    8281   case 593:
    8282 
    8283 /* Line 1806 of yacc.c  */
    8284 #line 2255 "parser.yy"
    8285     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
    8286     break;
    8287 
    8288   case 594:
    8289 
    8290 /* Line 1806 of yacc.c  */
    8291 #line 2257 "parser.yy"
    8292     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
    8293     break;
    8294 
    8295   case 595:
    8296 
    8297 /* Line 1806 of yacc.c  */
    8298 #line 2259 "parser.yy"
    8299     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8300     break;
    8301 
    8302   case 596:
    8303 
    8304 /* Line 1806 of yacc.c  */
    8305 #line 2264 "parser.yy"
    8306     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8307     break;
    8308 
    8309   case 597:
    8310 
    8311 /* Line 1806 of yacc.c  */
    8312 #line 2266 "parser.yy"
    8313     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8314     break;
    8315 
    8316   case 598:
    8317 
    8318 /* Line 1806 of yacc.c  */
    8319 #line 2268 "parser.yy"
    8320     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8321     break;
    8322 
    8323   case 599:
    8324 
    8325 /* Line 1806 of yacc.c  */
    8326 #line 2273 "parser.yy"
    8327     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8328     break;
    8329 
    8330   case 600:
    8331 
    8332 /* Line 1806 of yacc.c  */
    8333 #line 2275 "parser.yy"
    8334     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8335     break;
    8336 
    8337   case 601:
    8338 
    8339 /* Line 1806 of yacc.c  */
    8340 #line 2277 "parser.yy"
    8341     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8342     break;
    8343 
    8344   case 602:
    8345 
    8346 /* Line 1806 of yacc.c  */
    8347 #line 2292 "parser.yy"
     8419  case 629:
     8420
     8421/* Line 1806 of yacc.c  */
     8422#line 2393 "parser.yy"
    83488423    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83498424    break;
    83508425
    8351   case 604:
    8352 
    8353 /* Line 1806 of yacc.c  */
    8354 #line 2295 "parser.yy"
     8426  case 631:
     8427
     8428/* Line 1806 of yacc.c  */
     8429#line 2396 "parser.yy"
    83558430    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83568431    break;
    83578432
    8358   case 605:
    8359 
    8360 /* Line 1806 of yacc.c  */
    8361 #line 2297 "parser.yy"
     8433  case 632:
     8434
     8435/* Line 1806 of yacc.c  */
     8436#line 2398 "parser.yy"
    83628437    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    83638438    break;
    83648439
    8365   case 607:
    8366 
    8367 /* Line 1806 of yacc.c  */
    8368 #line 2303 "parser.yy"
    8369     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8370     break;
    8371 
    8372   case 608:
    8373 
    8374 /* Line 1806 of yacc.c  */
    8375 #line 2308 "parser.yy"
    8376     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8377     break;
    8378 
    8379   case 609:
    8380 
    8381 /* Line 1806 of yacc.c  */
    8382 #line 2310 "parser.yy"
    8383     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8384     break;
    8385 
    8386   case 610:
    8387 
    8388 /* Line 1806 of yacc.c  */
    8389 #line 2312 "parser.yy"
    8390     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8391     break;
    8392 
    8393   case 611:
    8394 
    8395 /* Line 1806 of yacc.c  */
    8396 #line 2317 "parser.yy"
    8397     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8398     break;
    8399 
    8400   case 612:
    8401 
    8402 /* Line 1806 of yacc.c  */
    8403 #line 2319 "parser.yy"
    8404     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8405     break;
    8406 
    8407   case 613:
    8408 
    8409 /* Line 1806 of yacc.c  */
    8410 #line 2321 "parser.yy"
    8411     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8412     break;
    8413 
    8414   case 614:
    8415 
    8416 /* Line 1806 of yacc.c  */
    8417 #line 2323 "parser.yy"
    8418     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8419     break;
    8420 
    8421   case 615:
    8422 
    8423 /* Line 1806 of yacc.c  */
    8424 #line 2328 "parser.yy"
    8425     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8426     break;
    8427 
    8428   case 616:
    8429 
    8430 /* Line 1806 of yacc.c  */
    8431 #line 2330 "parser.yy"
    8432     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8433     break;
    8434 
    8435   case 617:
    8436 
    8437 /* Line 1806 of yacc.c  */
    8438 #line 2332 "parser.yy"
    8439     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8440     break;
    8441 
    8442   case 618:
    8443 
    8444 /* Line 1806 of yacc.c  */
    8445 #line 2342 "parser.yy"
    8446     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8447     break;
    8448 
    8449   case 620:
    8450 
    8451 /* Line 1806 of yacc.c  */
    8452 #line 2345 "parser.yy"
    8453     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8454     break;
    8455 
    8456   case 621:
    8457 
    8458 /* Line 1806 of yacc.c  */
    8459 #line 2347 "parser.yy"
    8460     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8461     break;
    8462 
    8463   case 622:
    8464 
    8465 /* Line 1806 of yacc.c  */
    8466 #line 2352 "parser.yy"
    8467     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8468     break;
    8469 
    8470   case 623:
    8471 
    8472 /* Line 1806 of yacc.c  */
    8473 #line 2354 "parser.yy"
    8474     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8475     break;
    8476 
    8477   case 624:
    8478 
    8479 /* Line 1806 of yacc.c  */
    8480 #line 2356 "parser.yy"
    8481     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8482     break;
    8483 
    8484   case 625:
    8485 
    8486 /* Line 1806 of yacc.c  */
    8487 #line 2361 "parser.yy"
    8488     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8489     break;
    8490 
    8491   case 626:
    8492 
    8493 /* Line 1806 of yacc.c  */
    8494 #line 2363 "parser.yy"
    8495     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8496     break;
    8497 
    8498   case 627:
    8499 
    8500 /* Line 1806 of yacc.c  */
    8501 #line 2365 "parser.yy"
    8502     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8503     break;
    8504 
    8505   case 628:
    8506 
    8507 /* Line 1806 of yacc.c  */
    8508 #line 2367 "parser.yy"
    8509     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8510     break;
    8511 
    8512   case 629:
    8513 
    8514 /* Line 1806 of yacc.c  */
    8515 #line 2372 "parser.yy"
    8516     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8517     break;
    8518 
    8519   case 630:
    8520 
    8521 /* Line 1806 of yacc.c  */
    8522 #line 2374 "parser.yy"
    8523     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8524     break;
    8525 
    8526   case 631:
    8527 
    8528 /* Line 1806 of yacc.c  */
    8529 #line 2376 "parser.yy"
    8530     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8531     break;
    8532 
    8533   case 632:
    8534 
    8535 /* Line 1806 of yacc.c  */
    8536 #line 2407 "parser.yy"
    8537     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8538     break;
    8539 
    8540   case 634:
    8541 
    8542 /* Line 1806 of yacc.c  */
    8543 #line 2410 "parser.yy"
    8544     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8545     break;
    8546 
    8547   case 635:
    8548 
    8549 /* Line 1806 of yacc.c  */
    8550 #line 2412 "parser.yy"
    8551     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8552     break;
    8553 
    8554   case 636:
    8555 
    8556 /* Line 1806 of yacc.c  */
    8557 #line 2417 "parser.yy"
     8440  case 633:
     8441
     8442/* Line 1806 of yacc.c  */
     8443#line 2403 "parser.yy"
    85588444    {
    85598445                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85628448    break;
    85638449
    8564   case 637:
    8565 
    8566 /* Line 1806 of yacc.c  */
    8567 #line 2422 "parser.yy"
     8450  case 634:
     8451
     8452/* Line 1806 of yacc.c  */
     8453#line 2408 "parser.yy"
    85688454    {
    85698455                        typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
     
    85728458    break;
    85738459
     8460  case 635:
     8461
     8462/* Line 1806 of yacc.c  */
     8463#line 2416 "parser.yy"
     8464    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8465    break;
     8466
     8467  case 636:
     8468
     8469/* Line 1806 of yacc.c  */
     8470#line 2418 "parser.yy"
     8471    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8472    break;
     8473
     8474  case 637:
     8475
     8476/* Line 1806 of yacc.c  */
     8477#line 2420 "parser.yy"
     8478    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8479    break;
     8480
    85748481  case 638:
    85758482
    85768483/* Line 1806 of yacc.c  */
    8577 #line 2430 "parser.yy"
     8484#line 2425 "parser.yy"
     8485    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     8486    break;
     8487
     8488  case 639:
     8489
     8490/* Line 1806 of yacc.c  */
     8491#line 2427 "parser.yy"
     8492    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8493    break;
     8494
     8495  case 640:
     8496
     8497/* Line 1806 of yacc.c  */
     8498#line 2432 "parser.yy"
     8499    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     8500    break;
     8501
     8502  case 641:
     8503
     8504/* Line 1806 of yacc.c  */
     8505#line 2434 "parser.yy"
     8506    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8507    break;
     8508
     8509  case 643:
     8510
     8511/* Line 1806 of yacc.c  */
     8512#line 2449 "parser.yy"
     8513    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8514    break;
     8515
     8516  case 644:
     8517
     8518/* Line 1806 of yacc.c  */
     8519#line 2451 "parser.yy"
     8520    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8521    break;
     8522
     8523  case 645:
     8524
     8525/* Line 1806 of yacc.c  */
     8526#line 2456 "parser.yy"
     8527    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8528    break;
     8529
     8530  case 646:
     8531
     8532/* Line 1806 of yacc.c  */
     8533#line 2458 "parser.yy"
     8534    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8535    break;
     8536
     8537  case 647:
     8538
     8539/* Line 1806 of yacc.c  */
     8540#line 2460 "parser.yy"
    85788541    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    85798542    break;
    85808543
    8581   case 639:
    8582 
    8583 /* Line 1806 of yacc.c  */
    8584 #line 2432 "parser.yy"
     8544  case 648:
     8545
     8546/* Line 1806 of yacc.c  */
     8547#line 2462 "parser.yy"
    85858548    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    85868549    break;
    85878550
    8588   case 640:
    8589 
    8590 /* Line 1806 of yacc.c  */
    8591 #line 2434 "parser.yy"
     8551  case 649:
     8552
     8553/* Line 1806 of yacc.c  */
     8554#line 2464 "parser.yy"
    85928555    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    85938556    break;
    85948557
    8595   case 641:
    8596 
    8597 /* Line 1806 of yacc.c  */
    8598 #line 2439 "parser.yy"
     8558  case 651:
     8559
     8560/* Line 1806 of yacc.c  */
     8561#line 2470 "parser.yy"
     8562    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8563    break;
     8564
     8565  case 652:
     8566
     8567/* Line 1806 of yacc.c  */
     8568#line 2472 "parser.yy"
     8569    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8570    break;
     8571
     8572  case 653:
     8573
     8574/* Line 1806 of yacc.c  */
     8575#line 2474 "parser.yy"
     8576    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8577    break;
     8578
     8579  case 654:
     8580
     8581/* Line 1806 of yacc.c  */
     8582#line 2479 "parser.yy"
     8583    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8584    break;
     8585
     8586  case 655:
     8587
     8588/* Line 1806 of yacc.c  */
     8589#line 2481 "parser.yy"
     8590    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8591    break;
     8592
     8593  case 656:
     8594
     8595/* Line 1806 of yacc.c  */
     8596#line 2483 "parser.yy"
     8597    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8598    break;
     8599
     8600  case 657:
     8601
     8602/* Line 1806 of yacc.c  */
     8603#line 2489 "parser.yy"
     8604    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     8605    break;
     8606
     8607  case 658:
     8608
     8609/* Line 1806 of yacc.c  */
     8610#line 2491 "parser.yy"
     8611    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     8612    break;
     8613
     8614  case 660:
     8615
     8616/* Line 1806 of yacc.c  */
     8617#line 2497 "parser.yy"
     8618    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     8619    break;
     8620
     8621  case 661:
     8622
     8623/* Line 1806 of yacc.c  */
     8624#line 2499 "parser.yy"
     8625    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     8626    break;
     8627
     8628  case 662:
     8629
     8630/* Line 1806 of yacc.c  */
     8631#line 2501 "parser.yy"
     8632    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     8633    break;
     8634
     8635  case 663:
     8636
     8637/* Line 1806 of yacc.c  */
     8638#line 2503 "parser.yy"
     8639    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     8640    break;
     8641
     8642  case 665:
     8643
     8644/* Line 1806 of yacc.c  */
     8645#line 2518 "parser.yy"
     8646    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8647    break;
     8648
     8649  case 666:
     8650
     8651/* Line 1806 of yacc.c  */
     8652#line 2520 "parser.yy"
     8653    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8654    break;
     8655
     8656  case 667:
     8657
     8658/* Line 1806 of yacc.c  */
     8659#line 2525 "parser.yy"
     8660    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8661    break;
     8662
     8663  case 668:
     8664
     8665/* Line 1806 of yacc.c  */
     8666#line 2527 "parser.yy"
     8667    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8668    break;
     8669
     8670  case 669:
     8671
     8672/* Line 1806 of yacc.c  */
     8673#line 2529 "parser.yy"
     8674    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8675    break;
     8676
     8677  case 670:
     8678
     8679/* Line 1806 of yacc.c  */
     8680#line 2531 "parser.yy"
     8681    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8682    break;
     8683
     8684  case 671:
     8685
     8686/* Line 1806 of yacc.c  */
     8687#line 2533 "parser.yy"
     8688    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8689    break;
     8690
     8691  case 673:
     8692
     8693/* Line 1806 of yacc.c  */
     8694#line 2539 "parser.yy"
     8695    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8696    break;
     8697
     8698  case 674:
     8699
     8700/* Line 1806 of yacc.c  */
     8701#line 2541 "parser.yy"
     8702    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8703    break;
     8704
     8705  case 675:
     8706
     8707/* Line 1806 of yacc.c  */
     8708#line 2543 "parser.yy"
     8709    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8710    break;
     8711
     8712  case 676:
     8713
     8714/* Line 1806 of yacc.c  */
     8715#line 2548 "parser.yy"
     8716    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     8717    break;
     8718
     8719  case 677:
     8720
     8721/* Line 1806 of yacc.c  */
     8722#line 2550 "parser.yy"
     8723    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     8724    break;
     8725
     8726  case 678:
     8727
     8728/* Line 1806 of yacc.c  */
     8729#line 2552 "parser.yy"
     8730    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8731    break;
     8732
     8733  case 680:
     8734
     8735/* Line 1806 of yacc.c  */
     8736#line 2559 "parser.yy"
    85998737    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    86008738    break;
    86018739
    8602   case 642:
    8603 
    8604 /* Line 1806 of yacc.c  */
    8605 #line 2441 "parser.yy"
     8740  case 682:
     8741
     8742/* Line 1806 of yacc.c  */
     8743#line 2570 "parser.yy"
     8744    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     8745    break;
     8746
     8747  case 683:
     8748
     8749/* Line 1806 of yacc.c  */
     8750#line 2573 "parser.yy"
     8751    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     8752    break;
     8753
     8754  case 684:
     8755
     8756/* Line 1806 of yacc.c  */
     8757#line 2575 "parser.yy"
     8758    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     8759    break;
     8760
     8761  case 685:
     8762
     8763/* Line 1806 of yacc.c  */
     8764#line 2578 "parser.yy"
     8765    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     8766    break;
     8767
     8768  case 686:
     8769
     8770/* Line 1806 of yacc.c  */
     8771#line 2580 "parser.yy"
     8772    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     8773    break;
     8774
     8775  case 687:
     8776
     8777/* Line 1806 of yacc.c  */
     8778#line 2582 "parser.yy"
     8779    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     8780    break;
     8781
     8782  case 689:
     8783
     8784/* Line 1806 of yacc.c  */
     8785#line 2596 "parser.yy"
     8786    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8787    break;
     8788
     8789  case 690:
     8790
     8791/* Line 1806 of yacc.c  */
     8792#line 2598 "parser.yy"
     8793    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     8794    break;
     8795
     8796  case 691:
     8797
     8798/* Line 1806 of yacc.c  */
     8799#line 2603 "parser.yy"
     8800    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     8801    break;
     8802
     8803  case 692:
     8804
     8805/* Line 1806 of yacc.c  */
     8806#line 2605 "parser.yy"
     8807    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     8808    break;
     8809
     8810  case 693:
     8811
     8812/* Line 1806 of yacc.c  */
     8813#line 2607 "parser.yy"
     8814    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     8815    break;
     8816
     8817  case 694:
     8818
     8819/* Line 1806 of yacc.c  */
     8820#line 2609 "parser.yy"
     8821    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     8822    break;
     8823
     8824  case 695:
     8825
     8826/* Line 1806 of yacc.c  */
     8827#line 2611 "parser.yy"
     8828    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8829    break;
     8830
     8831  case 697:
     8832
     8833/* Line 1806 of yacc.c  */
     8834#line 2617 "parser.yy"
    86068835    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    86078836    break;
    86088837
    8609   case 643:
    8610 
    8611 /* Line 1806 of yacc.c  */
    8612 #line 2446 "parser.yy"
    8613     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
    8614     break;
    8615 
    8616   case 644:
    8617 
    8618 /* Line 1806 of yacc.c  */
    8619 #line 2448 "parser.yy"
     8838  case 698:
     8839
     8840/* Line 1806 of yacc.c  */
     8841#line 2619 "parser.yy"
     8842    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     8843    break;
     8844
     8845  case 699:
     8846
     8847/* Line 1806 of yacc.c  */
     8848#line 2621 "parser.yy"
     8849    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     8850    break;
     8851
     8852  case 700:
     8853
     8854/* Line 1806 of yacc.c  */
     8855#line 2626 "parser.yy"
    86208856    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    86218857    break;
    86228858
    8623   case 646:
    8624 
    8625 /* Line 1806 of yacc.c  */
    8626 #line 2463 "parser.yy"
    8627     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8628     break;
    8629 
    8630   case 647:
    8631 
    8632 /* Line 1806 of yacc.c  */
    8633 #line 2465 "parser.yy"
    8634     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8635     break;
    8636 
    8637   case 648:
    8638 
    8639 /* Line 1806 of yacc.c  */
    8640 #line 2470 "parser.yy"
    8641     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8642     break;
    8643 
    8644   case 649:
    8645 
    8646 /* Line 1806 of yacc.c  */
    8647 #line 2472 "parser.yy"
    8648     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8649     break;
    8650 
    8651   case 650:
    8652 
    8653 /* Line 1806 of yacc.c  */
    8654 #line 2474 "parser.yy"
    8655     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8656     break;
    8657 
    8658   case 651:
    8659 
    8660 /* Line 1806 of yacc.c  */
    8661 #line 2476 "parser.yy"
    8662     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8663     break;
    8664 
    8665   case 652:
    8666 
    8667 /* Line 1806 of yacc.c  */
    8668 #line 2478 "parser.yy"
     8859  case 701:
     8860
     8861/* Line 1806 of yacc.c  */
     8862#line 2628 "parser.yy"
    86698863    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    86708864    break;
    86718865
    8672   case 654:
    8673 
    8674 /* Line 1806 of yacc.c  */
    8675 #line 2484 "parser.yy"
    8676     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8677     break;
    8678 
    8679   case 655:
    8680 
    8681 /* Line 1806 of yacc.c  */
    8682 #line 2486 "parser.yy"
    8683     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8684     break;
    8685 
    8686   case 656:
    8687 
    8688 /* Line 1806 of yacc.c  */
    8689 #line 2488 "parser.yy"
    8690     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8691     break;
    8692 
    8693   case 657:
    8694 
    8695 /* Line 1806 of yacc.c  */
    8696 #line 2493 "parser.yy"
    8697     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8698     break;
    8699 
    8700   case 658:
    8701 
    8702 /* Line 1806 of yacc.c  */
    8703 #line 2495 "parser.yy"
    8704     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8705     break;
    8706 
    8707   case 659:
    8708 
    8709 /* Line 1806 of yacc.c  */
    8710 #line 2497 "parser.yy"
    8711     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8712     break;
    8713 
    8714   case 660:
    8715 
    8716 /* Line 1806 of yacc.c  */
    8717 #line 2503 "parser.yy"
    8718     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    8719     break;
    8720 
    8721   case 661:
    8722 
    8723 /* Line 1806 of yacc.c  */
    8724 #line 2505 "parser.yy"
    8725     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
    8726     break;
    8727 
    8728   case 663:
    8729 
    8730 /* Line 1806 of yacc.c  */
    8731 #line 2511 "parser.yy"
    8732     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
    8733     break;
    8734 
    8735   case 664:
    8736 
    8737 /* Line 1806 of yacc.c  */
    8738 #line 2513 "parser.yy"
    8739     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
    8740     break;
    8741 
    8742   case 665:
    8743 
    8744 /* Line 1806 of yacc.c  */
    8745 #line 2515 "parser.yy"
    8746     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
    8747     break;
    8748 
    8749   case 666:
    8750 
    8751 /* Line 1806 of yacc.c  */
    8752 #line 2517 "parser.yy"
    8753     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
    8754     break;
    8755 
    8756   case 668:
    8757 
    8758 /* Line 1806 of yacc.c  */
    8759 #line 2532 "parser.yy"
    8760     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8761     break;
    8762 
    8763   case 669:
    8764 
    8765 /* Line 1806 of yacc.c  */
    8766 #line 2534 "parser.yy"
    8767     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8768     break;
    8769 
    8770   case 670:
    8771 
    8772 /* Line 1806 of yacc.c  */
    8773 #line 2539 "parser.yy"
    8774     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8775     break;
    8776 
    8777   case 671:
    8778 
    8779 /* Line 1806 of yacc.c  */
    8780 #line 2541 "parser.yy"
    8781     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8782     break;
    8783 
    8784   case 672:
    8785 
    8786 /* Line 1806 of yacc.c  */
    8787 #line 2543 "parser.yy"
    8788     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8789     break;
    8790 
    8791   case 673:
    8792 
    8793 /* Line 1806 of yacc.c  */
    8794 #line 2545 "parser.yy"
    8795     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8796     break;
    8797 
    8798   case 674:
    8799 
    8800 /* Line 1806 of yacc.c  */
    8801 #line 2547 "parser.yy"
    8802     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8803     break;
    8804 
    8805   case 676:
    8806 
    8807 /* Line 1806 of yacc.c  */
    8808 #line 2553 "parser.yy"
    8809     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8810     break;
    8811 
    8812   case 677:
    8813 
    8814 /* Line 1806 of yacc.c  */
    8815 #line 2555 "parser.yy"
    8816     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8817     break;
    8818 
    8819   case 678:
    8820 
    8821 /* Line 1806 of yacc.c  */
    8822 #line 2557 "parser.yy"
    8823     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8824     break;
    8825 
    8826   case 679:
    8827 
    8828 /* Line 1806 of yacc.c  */
    8829 #line 2562 "parser.yy"
    8830     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
    8831     break;
    8832 
    8833   case 680:
    8834 
    8835 /* Line 1806 of yacc.c  */
    8836 #line 2564 "parser.yy"
    8837     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8838     break;
    8839 
    8840   case 681:
    8841 
    8842 /* Line 1806 of yacc.c  */
    8843 #line 2566 "parser.yy"
    8844     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8845     break;
    8846 
    8847   case 683:
    8848 
    8849 /* Line 1806 of yacc.c  */
    8850 #line 2573 "parser.yy"
    8851     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
    8852     break;
    8853 
    8854   case 685:
    8855 
    8856 /* Line 1806 of yacc.c  */
    8857 #line 2584 "parser.yy"
    8858     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
    8859     break;
    8860 
    8861   case 686:
    8862 
    8863 /* Line 1806 of yacc.c  */
    8864 #line 2587 "parser.yy"
     8866  case 704:
     8867
     8868/* Line 1806 of yacc.c  */
     8869#line 2638 "parser.yy"
     8870    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     8871    break;
     8872
     8873  case 707:
     8874
     8875/* Line 1806 of yacc.c  */
     8876#line 2648 "parser.yy"
     8877    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8878    break;
     8879
     8880  case 708:
     8881
     8882/* Line 1806 of yacc.c  */
     8883#line 2650 "parser.yy"
     8884    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8885    break;
     8886
     8887  case 709:
     8888
     8889/* Line 1806 of yacc.c  */
     8890#line 2652 "parser.yy"
     8891    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8892    break;
     8893
     8894  case 710:
     8895
     8896/* Line 1806 of yacc.c  */
     8897#line 2654 "parser.yy"
     8898    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8899    break;
     8900
     8901  case 711:
     8902
     8903/* Line 1806 of yacc.c  */
     8904#line 2656 "parser.yy"
     8905    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     8906    break;
     8907
     8908  case 712:
     8909
     8910/* Line 1806 of yacc.c  */
     8911#line 2658 "parser.yy"
     8912    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     8913    break;
     8914
     8915  case 713:
     8916
     8917/* Line 1806 of yacc.c  */
     8918#line 2665 "parser.yy"
     8919    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8920    break;
     8921
     8922  case 714:
     8923
     8924/* Line 1806 of yacc.c  */
     8925#line 2667 "parser.yy"
     8926    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8927    break;
     8928
     8929  case 715:
     8930
     8931/* Line 1806 of yacc.c  */
     8932#line 2669 "parser.yy"
     8933    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8934    break;
     8935
     8936  case 716:
     8937
     8938/* Line 1806 of yacc.c  */
     8939#line 2671 "parser.yy"
     8940    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     8941    break;
     8942
     8943  case 717:
     8944
     8945/* Line 1806 of yacc.c  */
     8946#line 2673 "parser.yy"
     8947    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8948    break;
     8949
     8950  case 718:
     8951
     8952/* Line 1806 of yacc.c  */
     8953#line 2675 "parser.yy"
     8954    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8955    break;
     8956
     8957  case 719:
     8958
     8959/* Line 1806 of yacc.c  */
     8960#line 2677 "parser.yy"
     8961    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8962    break;
     8963
     8964  case 720:
     8965
     8966/* Line 1806 of yacc.c  */
     8967#line 2679 "parser.yy"
     8968    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     8969    break;
     8970
     8971  case 721:
     8972
     8973/* Line 1806 of yacc.c  */
     8974#line 2681 "parser.yy"
     8975    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     8976    break;
     8977
     8978  case 722:
     8979
     8980/* Line 1806 of yacc.c  */
     8981#line 2683 "parser.yy"
     8982    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     8983    break;
     8984
     8985  case 723:
     8986
     8987/* Line 1806 of yacc.c  */
     8988#line 2688 "parser.yy"
    88658989    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    88668990    break;
    88678991
    8868   case 687:
    8869 
    8870 /* Line 1806 of yacc.c  */
    8871 #line 2589 "parser.yy"
    8872     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
    8873     break;
    8874 
    8875   case 688:
    8876 
    8877 /* Line 1806 of yacc.c  */
    8878 #line 2592 "parser.yy"
     8992  case 724:
     8993
     8994/* Line 1806 of yacc.c  */
     8995#line 2690 "parser.yy"
    88798996    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    88808997    break;
    88818998
    8882   case 689:
    8883 
    8884 /* Line 1806 of yacc.c  */
    8885 #line 2594 "parser.yy"
    8886     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
    8887     break;
    8888 
    8889   case 690:
    8890 
    8891 /* Line 1806 of yacc.c  */
    8892 #line 2596 "parser.yy"
    8893     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
    8894     break;
    8895 
    8896   case 692:
    8897 
    8898 /* Line 1806 of yacc.c  */
    8899 #line 2610 "parser.yy"
    8900     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8901     break;
    8902 
    8903   case 693:
    8904 
    8905 /* Line 1806 of yacc.c  */
    8906 #line 2612 "parser.yy"
    8907     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
    8908     break;
    8909 
    8910   case 694:
    8911 
    8912 /* Line 1806 of yacc.c  */
    8913 #line 2617 "parser.yy"
    8914     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
    8915     break;
    8916 
    8917   case 695:
    8918 
    8919 /* Line 1806 of yacc.c  */
    8920 #line 2619 "parser.yy"
    8921     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
    8922     break;
    8923 
    8924   case 696:
    8925 
    8926 /* Line 1806 of yacc.c  */
    8927 #line 2621 "parser.yy"
    8928     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
    8929     break;
    8930 
    8931   case 697:
    8932 
    8933 /* Line 1806 of yacc.c  */
    8934 #line 2623 "parser.yy"
    8935     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
    8936     break;
    8937 
    8938   case 698:
    8939 
    8940 /* Line 1806 of yacc.c  */
    8941 #line 2625 "parser.yy"
    8942     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8943     break;
    8944 
    8945   case 700:
    8946 
    8947 /* Line 1806 of yacc.c  */
    8948 #line 2631 "parser.yy"
    8949     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8950     break;
    8951 
    8952   case 701:
    8953 
    8954 /* Line 1806 of yacc.c  */
    8955 #line 2633 "parser.yy"
    8956     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
    8957     break;
    8958 
    8959   case 702:
    8960 
    8961 /* Line 1806 of yacc.c  */
    8962 #line 2635 "parser.yy"
    8963     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8964     break;
    8965 
    8966   case 703:
    8967 
    8968 /* Line 1806 of yacc.c  */
    8969 #line 2640 "parser.yy"
    8970     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
    8971     break;
    8972 
    8973   case 704:
    8974 
    8975 /* Line 1806 of yacc.c  */
    8976 #line 2642 "parser.yy"
    8977     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
    8978     break;
    8979 
    8980   case 707:
    8981 
    8982 /* Line 1806 of yacc.c  */
    8983 #line 2652 "parser.yy"
     8999  case 725:
     9000
     9001/* Line 1806 of yacc.c  */
     9002#line 2695 "parser.yy"
     9003    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     9004    break;
     9005
     9006  case 726:
     9007
     9008/* Line 1806 of yacc.c  */
     9009#line 2697 "parser.yy"
     9010    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     9011    break;
     9012
     9013  case 728:
     9014
     9015/* Line 1806 of yacc.c  */
     9016#line 2724 "parser.yy"
    89849017    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    89859018    break;
    89869019
    8987   case 710:
    8988 
    8989 /* Line 1806 of yacc.c  */
    8990 #line 2662 "parser.yy"
     9020  case 732:
     9021
     9022/* Line 1806 of yacc.c  */
     9023#line 2735 "parser.yy"
    89919024    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    89929025    break;
    89939026
    8994   case 711:
    8995 
    8996 /* Line 1806 of yacc.c  */
    8997 #line 2664 "parser.yy"
     9027  case 733:
     9028
     9029/* Line 1806 of yacc.c  */
     9030#line 2737 "parser.yy"
    89989031    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    89999032    break;
    90009033
    9001   case 712:
    9002 
    9003 /* Line 1806 of yacc.c  */
    9004 #line 2666 "parser.yy"
     9034  case 734:
     9035
     9036/* Line 1806 of yacc.c  */
     9037#line 2739 "parser.yy"
    90059038    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90069039    break;
    90079040
    9008   case 713:
    9009 
    9010 /* Line 1806 of yacc.c  */
    9011 #line 2668 "parser.yy"
     9041  case 735:
     9042
     9043/* Line 1806 of yacc.c  */
     9044#line 2741 "parser.yy"
    90129045    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90139046    break;
    90149047
    9015   case 714:
    9016 
    9017 /* Line 1806 of yacc.c  */
    9018 #line 2670 "parser.yy"
     9048  case 736:
     9049
     9050/* Line 1806 of yacc.c  */
     9051#line 2743 "parser.yy"
    90199052    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    90209053    break;
    90219054
    9022   case 715:
    9023 
    9024 /* Line 1806 of yacc.c  */
    9025 #line 2672 "parser.yy"
     9055  case 737:
     9056
     9057/* Line 1806 of yacc.c  */
     9058#line 2745 "parser.yy"
    90269059    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    90279060    break;
    90289061
    9029   case 716:
    9030 
    9031 /* Line 1806 of yacc.c  */
    9032 #line 2679 "parser.yy"
     9062  case 738:
     9063
     9064/* Line 1806 of yacc.c  */
     9065#line 2752 "parser.yy"
    90339066    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90349067    break;
    90359068
    9036   case 717:
    9037 
    9038 /* Line 1806 of yacc.c  */
    9039 #line 2681 "parser.yy"
     9069  case 739:
     9070
     9071/* Line 1806 of yacc.c  */
     9072#line 2754 "parser.yy"
     9073    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9074    break;
     9075
     9076  case 740:
     9077
     9078/* Line 1806 of yacc.c  */
     9079#line 2756 "parser.yy"
    90409080    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90419081    break;
    90429082
    9043   case 718:
    9044 
    9045 /* Line 1806 of yacc.c  */
    9046 #line 2683 "parser.yy"
     9083  case 741:
     9084
     9085/* Line 1806 of yacc.c  */
     9086#line 2758 "parser.yy"
     9087    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     9088    break;
     9089
     9090  case 742:
     9091
     9092/* Line 1806 of yacc.c  */
     9093#line 2760 "parser.yy"
    90479094    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    90489095    break;
    90499096
    9050   case 719:
    9051 
    9052 /* Line 1806 of yacc.c  */
    9053 #line 2685 "parser.yy"
    9054     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    9055     break;
    9056 
    9057   case 720:
    9058 
    9059 /* Line 1806 of yacc.c  */
    9060 #line 2687 "parser.yy"
     9097  case 743:
     9098
     9099/* Line 1806 of yacc.c  */
     9100#line 2762 "parser.yy"
    90619101    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    90629102    break;
    90639103
    9064   case 721:
    9065 
    9066 /* Line 1806 of yacc.c  */
    9067 #line 2689 "parser.yy"
    9068     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9069     break;
    9070 
    9071   case 722:
    9072 
    9073 /* Line 1806 of yacc.c  */
    9074 #line 2691 "parser.yy"
    9075     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9076     break;
    9077 
    9078   case 723:
    9079 
    9080 /* Line 1806 of yacc.c  */
    9081 #line 2693 "parser.yy"
    9082     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9083     break;
    9084 
    9085   case 724:
    9086 
    9087 /* Line 1806 of yacc.c  */
    9088 #line 2695 "parser.yy"
    9089     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
    9090     break;
    9091 
    9092   case 725:
    9093 
    9094 /* Line 1806 of yacc.c  */
    9095 #line 2697 "parser.yy"
    9096     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9097     break;
    9098 
    9099   case 726:
    9100 
    9101 /* Line 1806 of yacc.c  */
    9102 #line 2702 "parser.yy"
    9103     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
    9104     break;
    9105 
    9106   case 727:
    9107 
    9108 /* Line 1806 of yacc.c  */
    9109 #line 2704 "parser.yy"
    9110     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
    9111     break;
    9112 
    9113   case 728:
    9114 
    9115 /* Line 1806 of yacc.c  */
    9116 #line 2709 "parser.yy"
    9117     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
    9118     break;
    9119 
    9120   case 729:
    9121 
    9122 /* Line 1806 of yacc.c  */
    9123 #line 2711 "parser.yy"
    9124     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
    9125     break;
    9126 
    9127   case 731:
    9128 
    9129 /* Line 1806 of yacc.c  */
    9130 #line 2738 "parser.yy"
    9131     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
    9132     break;
    9133 
    9134   case 735:
    9135 
    9136 /* Line 1806 of yacc.c  */
    9137 #line 2749 "parser.yy"
    9138     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9139     break;
    9140 
    9141   case 736:
    9142 
    9143 /* Line 1806 of yacc.c  */
    9144 #line 2751 "parser.yy"
    9145     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9146     break;
    9147 
    9148   case 737:
    9149 
    9150 /* Line 1806 of yacc.c  */
    9151 #line 2753 "parser.yy"
    9152     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9153     break;
    9154 
    9155   case 738:
    9156 
    9157 /* Line 1806 of yacc.c  */
    9158 #line 2755 "parser.yy"
    9159     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9160     break;
    9161 
    9162   case 739:
    9163 
    9164 /* Line 1806 of yacc.c  */
    9165 #line 2757 "parser.yy"
    9166     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    9167     break;
    9168 
    9169   case 740:
    9170 
    9171 /* Line 1806 of yacc.c  */
    9172 #line 2759 "parser.yy"
    9173     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
    9174     break;
    9175 
    9176   case 741:
    9177 
    9178 /* Line 1806 of yacc.c  */
    9179 #line 2766 "parser.yy"
    9180     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9181     break;
    9182 
    9183   case 742:
    9184 
    9185 /* Line 1806 of yacc.c  */
    9186 #line 2768 "parser.yy"
    9187     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9188     break;
    9189 
    9190   case 743:
    9191 
    9192 /* Line 1806 of yacc.c  */
    9193 #line 2770 "parser.yy"
    9194     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9195     break;
    9196 
    91979104  case 744:
    91989105
    91999106/* Line 1806 of yacc.c  */
     9107#line 2767 "parser.yy"
     9108    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     9109    break;
     9110
     9111  case 745:
     9112
     9113/* Line 1806 of yacc.c  */
    92009114#line 2772 "parser.yy"
    9201     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9202     break;
    9203 
    9204   case 745:
     9115    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     9116    break;
     9117
     9118  case 746:
    92059119
    92069120/* Line 1806 of yacc.c  */
    92079121#line 2774 "parser.yy"
    9208     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
    9209     break;
    9210 
    9211   case 746:
     9122    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     9123    break;
     9124
     9125  case 747:
    92129126
    92139127/* Line 1806 of yacc.c  */
    92149128#line 2776 "parser.yy"
    9215     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
    9216     break;
    9217 
    9218   case 747:
    9219 
    9220 /* Line 1806 of yacc.c  */
    9221 #line 2781 "parser.yy"
    9222     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
    9223     break;
    9224 
    9225   case 748:
    9226 
    9227 /* Line 1806 of yacc.c  */
    9228 #line 2786 "parser.yy"
    9229     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
    9230     break;
    9231 
    9232   case 749:
    9233 
    9234 /* Line 1806 of yacc.c  */
    9235 #line 2788 "parser.yy"
    92369129    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    92379130    break;
     
    92409133
    92419134/* Line 1806 of yacc.c  */
    9242 #line 2790 "parser.yy"
    9243     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
    9244     break;
    9245 
    9246   case 753:
    9247 
    9248 /* Line 1806 of yacc.c  */
    9249 #line 2814 "parser.yy"
     9135#line 2800 "parser.yy"
    92509136    { (yyval.en) = 0; }
    92519137    break;
    92529138
    9253   case 754:
    9254 
    9255 /* Line 1806 of yacc.c  */
    9256 #line 2816 "parser.yy"
     9139  case 751:
     9140
     9141/* Line 1806 of yacc.c  */
     9142#line 2802 "parser.yy"
    92579143    { (yyval.en) = (yyvsp[(2) - (2)].en); }
    92589144    break;
     
    92619147
    92629148/* Line 1806 of yacc.c  */
    9263 #line 9264 "Parser/parser.cc"
     9149#line 9150 "Parser/parser.cc"
    92649150      default: break;
    92659151    }
     
    94929378
    94939379/* Line 2067 of yacc.c  */
    9494 #line 2819 "parser.yy"
     9380#line 2805 "parser.yy"
    94959381
    94969382// ----end of grammar----
     
    94999385        std::cout << "Error ";
    95009386        if ( yyfilename ) {
    9501                 std::cout << "in file " << yyfilename << " ";
     9387            std::cout << "in file " << yyfilename << " ";
    95029388        } // if
    95039389        std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl;
  • src/Parser/parser.h

    r0f9e4403 rc5833e8  
    5959     SIGNED = 277,
    6060     UNSIGNED = 278,
    61      VALIST = 279,
    62      BOOL = 280,
    63      COMPLEX = 281,
    64      IMAGINARY = 282,
    65      TYPEOF = 283,
    66      LABEL = 284,
    67      ENUM = 285,
    68      STRUCT = 286,
    69      UNION = 287,
    70      OTYPE = 288,
    71      FTYPE = 289,
    72      DTYPE = 290,
    73      TRAIT = 291,
    74      SIZEOF = 292,
    75      OFFSETOF = 293,
    76      ATTRIBUTE = 294,
    77      EXTENSION = 295,
    78      IF = 296,
    79      ELSE = 297,
    80      SWITCH = 298,
    81      CASE = 299,
    82      DEFAULT = 300,
    83      DO = 301,
    84      WHILE = 302,
    85      FOR = 303,
    86      BREAK = 304,
    87      CONTINUE = 305,
    88      GOTO = 306,
    89      RETURN = 307,
    90      CHOOSE = 308,
    91      DISABLE = 309,
    92      ENABLE = 310,
    93      FALLTHRU = 311,
    94      TRY = 312,
    95      CATCH = 313,
    96      CATCHRESUME = 314,
    97      FINALLY = 315,
    98      THROW = 316,
    99      THROWRESUME = 317,
    100      AT = 318,
    101      ASM = 319,
    102      ALIGNAS = 320,
    103      ALIGNOF = 321,
    104      ATOMIC = 322,
    105      GENERIC = 323,
    106      NORETURN = 324,
    107      STATICASSERT = 325,
    108      THREADLOCAL = 326,
    109      IDENTIFIER = 327,
    110      QUOTED_IDENTIFIER = 328,
    111      TYPEDEFname = 329,
    112      TYPEGENname = 330,
    113      ATTR_IDENTIFIER = 331,
    114      ATTR_TYPEDEFname = 332,
    115      ATTR_TYPEGENname = 333,
    116      INTEGERconstant = 334,
    117      FLOATINGconstant = 335,
    118      CHARACTERconstant = 336,
    119      STRINGliteral = 337,
    120      ZERO = 338,
    121      ONE = 339,
    122      ARROW = 340,
    123      ICR = 341,
    124      DECR = 342,
    125      LS = 343,
    126      RS = 344,
    127      LE = 345,
    128      GE = 346,
    129      EQ = 347,
    130      NE = 348,
    131      ANDAND = 349,
    132      OROR = 350,
    133      ELLIPSIS = 351,
    134      MULTassign = 352,
    135      DIVassign = 353,
    136      MODassign = 354,
    137      PLUSassign = 355,
    138      MINUSassign = 356,
    139      LSassign = 357,
    140      RSassign = 358,
    141      ANDassign = 359,
    142      ERassign = 360,
    143      ORassign = 361,
    144      ATassign = 362,
    145      THEN = 363
     61     BOOL = 279,
     62     COMPLEX = 280,
     63     IMAGINARY = 281,
     64     TYPEOF = 282,
     65     LABEL = 283,
     66     ENUM = 284,
     67     STRUCT = 285,
     68     UNION = 286,
     69     TYPE = 287,
     70     FTYPE = 288,
     71     DTYPE = 289,
     72     CONTEXT = 290,
     73     SIZEOF = 291,
     74     OFFSETOF = 292,
     75     ATTRIBUTE = 293,
     76     EXTENSION = 294,
     77     IF = 295,
     78     ELSE = 296,
     79     SWITCH = 297,
     80     CASE = 298,
     81     DEFAULT = 299,
     82     DO = 300,
     83     WHILE = 301,
     84     FOR = 302,
     85     BREAK = 303,
     86     CONTINUE = 304,
     87     GOTO = 305,
     88     RETURN = 306,
     89     CHOOSE = 307,
     90     DISABLE = 308,
     91     ENABLE = 309,
     92     FALLTHRU = 310,
     93     TRY = 311,
     94     CATCH = 312,
     95     CATCHRESUME = 313,
     96     FINALLY = 314,
     97     THROW = 315,
     98     THROWRESUME = 316,
     99     AT = 317,
     100     ASM = 318,
     101     ALIGNAS = 319,
     102     ALIGNOF = 320,
     103     ATOMIC = 321,
     104     GENERIC = 322,
     105     NORETURN = 323,
     106     STATICASSERT = 324,
     107     THREADLOCAL = 325,
     108     IDENTIFIER = 326,
     109     QUOTED_IDENTIFIER = 327,
     110     TYPEDEFname = 328,
     111     TYPEGENname = 329,
     112     ATTR_IDENTIFIER = 330,
     113     ATTR_TYPEDEFname = 331,
     114     ATTR_TYPEGENname = 332,
     115     INTEGERconstant = 333,
     116     FLOATINGconstant = 334,
     117     CHARACTERconstant = 335,
     118     STRINGliteral = 336,
     119     ZERO = 337,
     120     ONE = 338,
     121     ARROW = 339,
     122     ICR = 340,
     123     DECR = 341,
     124     LS = 342,
     125     RS = 343,
     126     LE = 344,
     127     GE = 345,
     128     EQ = 346,
     129     NE = 347,
     130     ANDAND = 348,
     131     OROR = 349,
     132     ELLIPSIS = 350,
     133     MULTassign = 351,
     134     DIVassign = 352,
     135     MODassign = 353,
     136     PLUSassign = 354,
     137     MINUSassign = 355,
     138     LSassign = 356,
     139     RSassign = 357,
     140     ANDassign = 358,
     141     ERassign = 359,
     142     ORassign = 360,
     143     ATassign = 361,
     144     THEN = 362
    146145   };
    147146#endif
     
    168167#define SIGNED 277
    169168#define UNSIGNED 278
    170 #define VALIST 279
    171 #define BOOL 280
    172 #define COMPLEX 281
    173 #define IMAGINARY 282
    174 #define TYPEOF 283
    175 #define LABEL 284
    176 #define ENUM 285
    177 #define STRUCT 286
    178 #define UNION 287
    179 #define OTYPE 288
    180 #define FTYPE 289
    181 #define DTYPE 290
    182 #define TRAIT 291
    183 #define SIZEOF 292
    184 #define OFFSETOF 293
    185 #define ATTRIBUTE 294
    186 #define EXTENSION 295
    187 #define IF 296
    188 #define ELSE 297
    189 #define SWITCH 298
    190 #define CASE 299
    191 #define DEFAULT 300
    192 #define DO 301
    193 #define WHILE 302
    194 #define FOR 303
    195 #define BREAK 304
    196 #define CONTINUE 305
    197 #define GOTO 306
    198 #define RETURN 307
    199 #define CHOOSE 308
    200 #define DISABLE 309
    201 #define ENABLE 310
    202 #define FALLTHRU 311
    203 #define TRY 312
    204 #define CATCH 313
    205 #define CATCHRESUME 314
    206 #define FINALLY 315
    207 #define THROW 316
    208 #define THROWRESUME 317
    209 #define AT 318
    210 #define ASM 319
    211 #define ALIGNAS 320
    212 #define ALIGNOF 321
    213 #define ATOMIC 322
    214 #define GENERIC 323
    215 #define NORETURN 324
    216 #define STATICASSERT 325
    217 #define THREADLOCAL 326
    218 #define IDENTIFIER 327
    219 #define QUOTED_IDENTIFIER 328
    220 #define TYPEDEFname 329
    221 #define TYPEGENname 330
    222 #define ATTR_IDENTIFIER 331
    223 #define ATTR_TYPEDEFname 332
    224 #define ATTR_TYPEGENname 333
    225 #define INTEGERconstant 334
    226 #define FLOATINGconstant 335
    227 #define CHARACTERconstant 336
    228 #define STRINGliteral 337
    229 #define ZERO 338
    230 #define ONE 339
    231 #define ARROW 340
    232 #define ICR 341
    233 #define DECR 342
    234 #define LS 343
    235 #define RS 344
    236 #define LE 345
    237 #define GE 346
    238 #define EQ 347
    239 #define NE 348
    240 #define ANDAND 349
    241 #define OROR 350
    242 #define ELLIPSIS 351
    243 #define MULTassign 352
    244 #define DIVassign 353
    245 #define MODassign 354
    246 #define PLUSassign 355
    247 #define MINUSassign 356
    248 #define LSassign 357
    249 #define RSassign 358
    250 #define ANDassign 359
    251 #define ERassign 360
    252 #define ORassign 361
    253 #define ATassign 362
    254 #define THEN 363
     169#define BOOL 279
     170#define COMPLEX 280
     171#define IMAGINARY 281
     172#define TYPEOF 282
     173#define LABEL 283
     174#define ENUM 284
     175#define STRUCT 285
     176#define UNION 286
     177#define TYPE 287
     178#define FTYPE 288
     179#define DTYPE 289
     180#define CONTEXT 290
     181#define SIZEOF 291
     182#define OFFSETOF 292
     183#define ATTRIBUTE 293
     184#define EXTENSION 294
     185#define IF 295
     186#define ELSE 296
     187#define SWITCH 297
     188#define CASE 298
     189#define DEFAULT 299
     190#define DO 300
     191#define WHILE 301
     192#define FOR 302
     193#define BREAK 303
     194#define CONTINUE 304
     195#define GOTO 305
     196#define RETURN 306
     197#define CHOOSE 307
     198#define DISABLE 308
     199#define ENABLE 309
     200#define FALLTHRU 310
     201#define TRY 311
     202#define CATCH 312
     203#define CATCHRESUME 313
     204#define FINALLY 314
     205#define THROW 315
     206#define THROWRESUME 316
     207#define AT 317
     208#define ASM 318
     209#define ALIGNAS 319
     210#define ALIGNOF 320
     211#define ATOMIC 321
     212#define GENERIC 322
     213#define NORETURN 323
     214#define STATICASSERT 324
     215#define THREADLOCAL 325
     216#define IDENTIFIER 326
     217#define QUOTED_IDENTIFIER 327
     218#define TYPEDEFname 328
     219#define TYPEGENname 329
     220#define ATTR_IDENTIFIER 330
     221#define ATTR_TYPEDEFname 331
     222#define ATTR_TYPEGENname 332
     223#define INTEGERconstant 333
     224#define FLOATINGconstant 334
     225#define CHARACTERconstant 335
     226#define STRINGliteral 336
     227#define ZERO 337
     228#define ONE 338
     229#define ARROW 339
     230#define ICR 340
     231#define DECR 341
     232#define LS 342
     233#define RS 343
     234#define LE 344
     235#define GE 345
     236#define EQ 346
     237#define NE 347
     238#define ANDAND 348
     239#define OROR 349
     240#define ELLIPSIS 350
     241#define MULTassign 351
     242#define DIVassign 352
     243#define MODassign 353
     244#define PLUSassign 354
     245#define MINUSassign 355
     246#define LSassign 356
     247#define RSassign 357
     248#define ANDassign 358
     249#define ERassign 359
     250#define ORassign 360
     251#define ATassign 361
     252#define THEN 362
    255253
    256254
     
    262260
    263261/* Line 2068 of yacc.c  */
    264 #line 112 "parser.yy"
     262#line 110 "parser.yy"
    265263
    266264        Token tok;
     
    279277
    280278/* Line 2068 of yacc.c  */
    281 #line 282 "Parser/parser.h"
     279#line 280 "Parser/parser.h"
    282280} YYSTYPE;
    283281# define YYSTYPE_IS_TRIVIAL 1
  • src/Parser/parser.yy

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:58:43 2016
    13 // Update Count     : 1519
     12// Last Modified On : Mon Feb  1 18:22:42 2016
     13// Update Count     : 1483
    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"
     
    7574%token FORALL LVALUE                                                                    // CFA
    7675%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
    77 %token VALIST                                                                                   // GCC
    7876%token BOOL COMPLEX IMAGINARY                                                   // C99
    7977%token TYPEOF LABEL                                                                             // GCC
    8078%token ENUM STRUCT UNION
    81 %token OTYPE FTYPE DTYPE TRAIT                                          // CFA
     79%token TYPE FTYPE DTYPE CONTEXT                                                 // CFA
    8280%token SIZEOF OFFSETOF
    8381%token ATTRIBUTE EXTENSION                                                              // GCC
     
    173171%type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name
    174172
    175 %type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier
     173%type<decl> context_declaration context_declaration_list context_declaring_list context_specifier
    176174
    177175%type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
     
    199197%type<decl> new_array_parameter_1st_dimension
    200198
    201 %type<decl> new_trait_declaring_list new_declaration new_field_declaring_list
     199%type<decl> new_context_declaring_list new_declaration new_field_declaring_list
    202200%type<decl> new_function_declaration new_function_return new_function_specifier
    203201
     
    372370                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); }
    373371        | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
    374                 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
     372                { $$ = 0; }
    375373        | postfix_expression '{' argument_expression_list '}' // CFA
    376374                {
     
    450448                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
    451449        | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
    452                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
     450        { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
    453451        | ATTR_IDENTIFIER
    454452                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
     
    10221020        | new_function_declaration pop ';'
    10231021        | type_declaring_list pop ';'
    1024         | trait_specifier pop ';'
     1022        | context_specifier pop ';'
    10251023        ;
    10261024
     
    10291027                {
    10301028                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    1031                         $$ = $1->addInitializer( $2 );
     1029                        $$ = $1;
    10321030                }
    10331031        | declaration_qualifier_list new_variable_specifier initializer_opt
     
    10361034                {
    10371035                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    1038                         $$ = $2->addQualifiers( $1 )->addInitializer( $3 );;
     1036                        $$ = $2->addQualifiers( $1 );
    10391037                }
    10401038        | new_variable_declaration pop ',' push identifier_or_type_name initializer_opt
    10411039                {
    10421040                        typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
    1043                         $$ = $1->appendList( $1->cloneType( $5 )->addInitializer( $6 ) );
     1041                        $$ = $1->appendList( $1->cloneType( $5 ) );
    10441042                }
    10451043        ;
     
    13471345        | IMAGINARY                                                                                     // C99
    13481346                { $$ = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
    1349         | VALIST                                                                                        // GCC, __builtin_va_list
    1350                 { $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
    13511347        ;
    13521348
     
    14381434                { $$ = DeclarationNode::newAggregate( $1, 0, 0, $3 ); }
    14391435        | aggregate_key no_attr_identifier_or_type_name
    1440                 {
    1441                         typedefTable.makeTypedef( *$2 );
    1442                         $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 );
    1443                 }
    1444         | aggregate_key no_attr_identifier_or_type_name
    1445                 { typedefTable.makeTypedef( *$2 ); }
    1446                 '{' field_declaration_list '}'
    1447                 { $$ = DeclarationNode::newAggregate( $1, $2, 0, $5); }
     1436                { $$ = DeclarationNode::newAggregate( $1, $2, 0, 0 ); }
     1437        | aggregate_key no_attr_identifier_or_type_name '{' field_declaration_list '}'
     1438                { $$ = DeclarationNode::newAggregate( $1, $2, 0, $4 ); }
    14481439        | aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA
    1449                 { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }
     1440                { $$ = DeclarationNode::newAggregate( $1, 0, $3, $6 ); }
    14501441        | aggregate_key typegen_name                                            // CFA, S/R conflict
    14511442                { $$ = $2; }
     
    15251516        enum_key '{' enumerator_list comma_opt '}'
    15261517                { $$ = DeclarationNode::newEnum( 0, $3 ); }
     1518        | enum_key no_attr_identifier_or_type_name '{' enumerator_list comma_opt '}'
     1519                { $$ = DeclarationNode::newEnum( $2, $4 ); }
    15271520        | enum_key no_attr_identifier_or_type_name
    1528                 {
    1529                         typedefTable.makeTypedef( *$2 );
    1530                         $$ = DeclarationNode::newEnum( $2, 0 );
    1531                 }
    1532         | enum_key no_attr_identifier_or_type_name
    1533                 { typedefTable.makeTypedef( *$2 ); }
    1534                 '{' enumerator_list comma_opt '}'
    1535                 { $$ = DeclarationNode::newEnum( $2, $5 ); }
     1521                { $$ = DeclarationNode::newEnum( $2, 0 ); }
    15361522        ;
    15371523
     
    18171803
    18181804type_class:                                                                                             // CFA
    1819         OTYPE
     1805        TYPE
    18201806                { $$ = DeclarationNode::Type; }
    18211807        | DTYPE
     
    18351821        '|' no_attr_identifier_or_type_name '(' type_name_list ')'
    18361822                {
    1837                         typedefTable.openTrait( *$2 );
    1838                         $$ = DeclarationNode::newTraitUse( $2, $4 );
    1839                 }
    1840         | '|' '{' push trait_declaration_list '}'
     1823                        typedefTable.openContext( *$2 );
     1824                        $$ = DeclarationNode::newContextUse( $2, $4 );
     1825                }
     1826        | '|' '{' push context_declaration_list '}'
    18411827                { $$ = $4; }
    1842         | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
     1828        | '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')'
    18431829                { $$ = 0; }
    18441830        ;
     
    18551841
    18561842type_declaring_list:                                                                    // CFA
    1857         OTYPE type_declarator
    1858                 { $$ = $2; }
    1859         | storage_class_list OTYPE type_declarator
     1843        TYPE type_declarator
     1844                { $$ = $2; }
     1845        | storage_class_list TYPE type_declarator
    18601846                { $$ = $3->addQualifiers( $1 ); }
    18611847        | type_declaring_list ',' type_declarator
     
    18831869        ;
    18841870
    1885 trait_specifier:                                                                                // CFA
    1886         TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
     1871context_specifier:                                                                              // CFA
     1872        CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
    18871873                {
    18881874                        typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
    1889                         $$ = DeclarationNode::newTrait( $2, $5, 0 );
    1890                 }
    1891         | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
    1892                 {
    1893                         typedefTable.enterTrait( *$2 );
     1875                        $$ = DeclarationNode::newContext( $2, $5, 0 );
     1876                }
     1877        | CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
     1878                {
     1879                        typedefTable.enterContext( *$2 );
    18941880                        typedefTable.enterScope();
    18951881                }
    1896           trait_declaration_list '}'
    1897                 {
    1898                         typedefTable.leaveTrait();
     1882          context_declaration_list '}'
     1883                {
     1884                        typedefTable.leaveContext();
    18991885                        typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
    1900                         $$ = DeclarationNode::newTrait( $2, $5, $10 );
    1901                 }
    1902         ;
    1903 
    1904 trait_declaration_list:                                                         // CFA
    1905         trait_declaration
    1906         | trait_declaration_list push trait_declaration
     1886                        $$ = DeclarationNode::newContext( $2, $5, $10 );
     1887                }
     1888        ;
     1889
     1890context_declaration_list:                                                               // CFA
     1891        context_declaration
     1892        | context_declaration_list push context_declaration
    19071893                { $$ = $1->appendList( $3 ); }
    19081894        ;
    19091895
    1910 trait_declaration:                                                                      // CFA
    1911         new_trait_declaring_list pop ';'
    1912         | trait_declaring_list pop ';'
    1913         ;
    1914 
    1915 new_trait_declaring_list:                                                               // CFA
     1896context_declaration:                                                                    // CFA
     1897        new_context_declaring_list pop ';'
     1898        | context_declaring_list pop ';'
     1899        ;
     1900
     1901new_context_declaring_list:                                                             // CFA
    19161902        new_variable_specifier
    19171903                {
     
    19241910                        $$ = $1;
    19251911                }
    1926         | new_trait_declaring_list pop ',' push identifier_or_type_name
     1912        | new_context_declaring_list pop ',' push identifier_or_type_name
    19271913                {
    19281914                        typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
     
    19311917        ;
    19321918
    1933 trait_declaring_list:                                                                   // CFA
     1919context_declaring_list:                                                                 // CFA
    19341920        type_specifier declarator
    19351921                {
     
    19371923                        $$ = $2->addType( $1 );
    19381924                }
    1939         | trait_declaring_list pop ',' push declarator
     1925        | context_declaring_list pop ',' push declarator
    19401926                {
    19411927                        typedefTable.addToEnclosingScope2( TypedefTable::ID );
     
    28232809        std::cout << "Error ";
    28242810        if ( yyfilename ) {
    2825                 std::cout << "in file " << yyfilename << " ";
     2811            std::cout << "in file " << yyfilename << " ";
    28262812        } // if
    28272813        std::cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << std::endl;
  • src/ResolvExpr/AdjustExprType.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sat May 16 23:41:42 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:34:53 2016
    13 // Update Count     : 4
     12// Last Modified On : Sat May 16 23:54:02 2015
     13// Update Count     : 3
    1414//
    1515
     
    3333                virtual Type* mutate( UnionInstType *aggregateUseType );
    3434                virtual Type* mutate( EnumInstType *aggregateUseType );
    35                 virtual Type* mutate( TraitInstType *aggregateUseType );
     35                virtual Type* mutate( ContextInstType *aggregateUseType );
    3636                virtual Type* mutate( TypeInstType *aggregateUseType );
    3737                virtual Type* mutate( TupleType *tupleType );
    38                 virtual Type* mutate( VarArgsType *varArgsType );
    3938
    4039                const TypeEnvironment &env;
     
    8786        }
    8887
    89         Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) {
     88        Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) {
    9089                return aggregateUseType;
    9190        }
     
    112111                return tupleType;
    113112        }
    114 
    115         Type *AdjustExprType::mutate( VarArgsType *varArgsType ) {
    116                 return varArgsType;
    117         }
    118113} // namespace ResolvExpr
    119114
  • src/ResolvExpr/AlternativeFinder.cc

    r0f9e4403 rc5833e8  
    848848        }
    849849
    850         void AlternativeFinder::visit( OffsetPackExpr *offsetPackExpr ) {
    851                 alternatives.push_back( Alternative( offsetPackExpr->clone(), env, Cost::zero ) );
    852         }
    853 
    854850        void AlternativeFinder::resolveAttr( DeclarationWithType *funcDecl, FunctionType *function, Type *argType, const TypeEnvironment &env ) {
    855851                // assume no polymorphism
  • src/ResolvExpr/AlternativeFinder.h

    r0f9e4403 rc5833e8  
    5959                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6060                virtual void visit( OffsetofExpr *offsetofExpr );
    61                 virtual void visit( OffsetPackExpr *offsetPackExpr );
    6261                virtual void visit( AttrExpr *attrExpr );
    6362                virtual void visit( LogicalExpr *logicalExpr );
  • src/ResolvExpr/CommonType.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 06:59:27 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:35:34 2016
    13 // Update Count     : 3
     12// Last Modified On : Sun May 17 07:04:50 2015
     13// Update Count     : 2
    1414//
    1515
     
    3535                virtual void visit( UnionInstType *aggregateUseType );
    3636                virtual void visit( EnumInstType *aggregateUseType );
    37                 virtual void visit( TraitInstType *aggregateUseType );
     37                virtual void visit( ContextInstType *aggregateUseType );
    3838                virtual void visit( TypeInstType *aggregateUseType );
    3939                virtual void visit( TupleType *tupleType );
    40                 virtual void visit( VarArgsType *varArgsType );
    4140
    4241                template< typename RefType > void handleRefType( RefType *inst, Type *other );
     
    186185        }
    187186
    188         void CommonType::visit( TraitInstType *aggregateUseType ) {
     187        void CommonType::visit( ContextInstType *aggregateUseType ) {
    189188        }
    190189
     
    214213        void CommonType::visit( TupleType *tupleType ) {
    215214        }
    216 
    217         void CommonType::visit( VarArgsType *varArgsType ) {
    218         }
    219215} // namespace ResolvExpr
    220216
  • src/ResolvExpr/ConversionCost.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 07:06:19 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:35:46 2016
    13 // Update Count     : 6
     12// Last Modified On : Sun May 17 07:22:19 2015
     13// Update Count     : 4
    1414//
    1515
     
    206206        }
    207207
    208         void ConversionCost::visit(TraitInstType *inst) {
     208        void ConversionCost::visit(ContextInstType *inst) {
    209209        }
    210210
     
    247247                } // if
    248248        }
    249 
    250         void ConversionCost::visit(VarArgsType *varArgsType) {
    251                 if ( dynamic_cast< VarArgsType* >( dest ) ) {
    252                         cost = Cost::zero;
    253                 }
    254         }
    255249} // namespace ResolvExpr
    256250
  • src/ResolvExpr/ConversionCost.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 09:37:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:35:56 2016
    13 // Update Count     : 3
     12// Last Modified On : Sun May 17 09:39:23 2015
     13// Update Count     : 2
    1414//
    1515
     
    3737                virtual void visit(UnionInstType *aggregateUseType);
    3838                virtual void visit(EnumInstType *aggregateUseType);
    39                 virtual void visit(TraitInstType *aggregateUseType);
     39                virtual void visit(ContextInstType *aggregateUseType);
    4040                virtual void visit(TypeInstType *aggregateUseType);
    4141                virtual void visit(TupleType *tupleType);
    42                 virtual void visit(VarArgsType *varArgsType);
    4342          protected:
    4443                Type *dest;
  • src/ResolvExpr/PtrsAssignable.cc

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 11:44:11 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:36:05 2016
    13 // Update Count     : 8
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Mon Sep 21 14:34:58 2015
     13// Update Count     : 7
    1414//
    1515
     
    3535                virtual void visit( UnionInstType *inst );
    3636                virtual void visit( EnumInstType *inst );
    37                 virtual void visit( TraitInstType *inst );
     37                virtual void visit( ContextInstType *inst );
    3838                virtual void visit( TypeInstType *inst );
    3939                virtual void visit( TupleType *tupleType );
    40                 virtual void visit( VarArgsType *varArgsType );
    4140          private:
    4241                Type *dest;
     
    101100        }
    102101
    103         void PtrsAssignable::visit( TraitInstType *inst ) {
     102        void PtrsAssignable::visit( ContextInstType *inst ) {
    104103                // I definitely don't think we should be doing anything here
    105104        }
     
    138137///   }
    139138        }
    140 
    141         void PtrsAssignable::visit( VarArgsType *varArgsType ) {
    142         }
    143139} // namespace ResolvExpr
    144140
  • src/ResolvExpr/PtrsCastable.cc

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 11:48:00 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:36:18 2016
    13 // Update Count     : 8
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Mon Oct 05 14:49:12 2015
     13// Update Count     : 7
    1414//
    1515
     
    3636                virtual void visit(UnionInstType *inst);
    3737                virtual void visit(EnumInstType *inst);
    38                 virtual void visit(TraitInstType *inst);
     38                virtual void visit(ContextInstType *inst);
    3939                virtual void visit(TypeInstType *inst);
    4040                virtual void visit(TupleType *tupleType);
    41                 virtual void visit(VarArgsType *varArgsType);
    4241          private:
    4342                Type *dest;
     
    116115
    117116        void PtrsCastable::visit(EnumInstType *inst) {
    118                 if ( dynamic_cast< EnumInstType* >( dest ) ) {
     117                if ( dynamic_cast< EnumInstType* >( inst ) ) {
    119118                        result = 1;
    120                 } else if ( BasicType *bt = dynamic_cast< BasicType* >( dest ) ) {
     119                } else if ( BasicType *bt = dynamic_cast< BasicType* >( inst ) ) {
    121120                        if ( bt->get_kind() == BasicType::SignedInt ) {
    122121                                result = 0;
     
    129128        }
    130129
    131         void PtrsCastable::visit(TraitInstType *inst) {
     130        void PtrsCastable::visit(ContextInstType *inst) {
    132131                // I definitely don't think we should be doing anything here
    133132        }
     
    140139                result = objectCast( dest, env, indexer );
    141140        }
    142 
    143         void PtrsCastable::visit(VarArgsType *varArgsType) {
    144                 result = objectCast( dest, env, indexer );
    145         }
    146141} // namespace ResolvExpr
    147142
  • src/ResolvExpr/RenameVars.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 12:05:18 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:36:32 2016
    13 // Update Count     : 5
     12// Last Modified On : Mon Jun  8 14:51:35 2015
     13// Update Count     : 4
    1414//
    1515
     
    8686        }
    8787
    88         void RenameVars::visit( TraitInstType *aggregateUseType ) {
     88        void RenameVars::visit( ContextInstType *aggregateUseType ) {
    8989                typeBefore( aggregateUseType );
    9090                acceptAll( aggregateUseType->get_parameters(), *this );
     
    111111                acceptAll( tupleType->get_types(), *this );
    112112                typeAfter( tupleType );
    113         }
    114 
    115         void RenameVars::visit( VarArgsType *varArgsType ) {
    116                 typeBefore( varArgsType );
    117                 typeAfter( varArgsType );
    118113        }
    119114
  • src/ResolvExpr/RenameVars.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 12:10:28 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:36:39 2016
    13 // Update Count     : 3
     12// Last Modified On : Sun May 17 12:11:53 2015
     13// Update Count     : 2
    1414//
    1515
     
    4040                virtual void visit( UnionInstType *aggregateUseType );
    4141                virtual void visit( EnumInstType *aggregateUseType );
    42                 virtual void visit( TraitInstType *aggregateUseType );
     42                virtual void visit( ContextInstType *aggregateUseType );
    4343                virtual void visit( TypeInstType *aggregateUseType );
    4444                virtual void visit( TupleType *tupleType );
    45                 virtual void visit( VarArgsType *varArgsType );
    4645
    4746                void typeBefore( Type *type );
  • src/ResolvExpr/Resolver.cc

    r0f9e4403 rc5833e8  
    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/ResolvExpr/Unify.cc

    r0f9e4403 rc5833e8  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Unify.cc --
     7// Unify.cc -- 
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 12:27:10 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:37:05 2016
    13 // Update Count     : 37
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Sep 02 14:43:22 2015
     13// Update Count     : 36
    1414//
    1515
     
    3838                WidenMode operator&( const WidenMode &other ) { WidenMode newWM( *this ); newWM &= other; return newWM; }
    3939                operator bool() { return widenFirst && widenSecond; }
    40 
     40 
    4141                bool widenFirst : 1, widenSecond : 1;
    4242        };
     
    4545          public:
    4646                Unify( Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer );
    47 
     47 
    4848                bool get_result() const { return result; }
    4949          private:
     
    5656                virtual void visit(UnionInstType *aggregateUseType);
    5757                virtual void visit(EnumInstType *aggregateUseType);
    58                 virtual void visit(TraitInstType *aggregateUseType);
     58                virtual void visit(ContextInstType *aggregateUseType);
    5959                virtual void visit(TypeInstType *aggregateUseType);
    6060                virtual void visit(TupleType *tupleType);
    61                 virtual void visit(VarArgsType *varArgsType);
    6261
    6362                template< typename RefType > void handleRefType( RefType *inst, Type *other );
     
    7978        bool unifyInexact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer, Type *&common );
    8079        bool unifyExact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer );
    81 
     80 
    8281        bool typesCompatible( Type *first, Type *second, const SymTab::Indexer &indexer, const TypeEnvironment &env ) {
    8382                TypeEnvironment newEnv;
     
    137136                  case TypeDecl::Dtype:
    138137                        return ! isFtype( type, indexer );
    139 
     138 
    140139                  case TypeDecl::Ftype:
    141140                        return isFtype( type, indexer );
     
    196195                bool widen1 = false, widen2 = false;
    197196                Type *type1 = 0, *type2 = 0;
    198 
     197 
    199198                if ( env.lookup( var1->get_name(), class1 ) ) {
    200199                        hasClass1 = true;
     
    217216                        widen2 = widenMode.widenSecond && class2.allowWidening;
    218217                } // if
    219 
     218 
    220219                if ( type1 && type2 ) {
    221220//    std::cout << "has type1 && type2" << std::endl;
     
    436435                // to unify, array types must both be VLA or both not VLA
    437436                // and must both have a dimension expression or not have a dimension
    438                 if ( otherArray && arrayType->get_isVarLen() == otherArray->get_isVarLen() ) {
     437                if ( otherArray && arrayType->get_isVarLen() == otherArray->get_isVarLen()
     438                                && ((arrayType->get_dimension() != 0 && otherArray->get_dimension() != 0)
     439                                        || (arrayType->get_dimension() == 0 && otherArray->get_dimension() == 0))) {
    439440
    440441                        // not positive this is correct in all cases, but it's needed for typedefs
     
    447448                                ConstantExpr * ce1 = dynamic_cast< ConstantExpr * >( arrayType->get_dimension() );
    448449                                ConstantExpr * ce2 = dynamic_cast< ConstantExpr * >( otherArray->get_dimension() );
    449                                 // see C11 Reference Manual 6.7.6.2.6
    450                                 // two array types with size specifiers that are integer constant expressions are
    451                                 // compatible if both size specifiers have the same constant value
    452                                 if ( ce1 && ce2 ) {
    453                                         Constant * c1 = ce1->get_constant();
    454                                         Constant * c2 = ce2->get_constant();
    455 
    456                                         if ( c1->get_value() != c2->get_value() ) {
    457                                                 // does not unify if the dimension is different
    458                                                 return;
    459                                         }
     450                                assert(ce1 && ce2);
     451
     452                                Constant * c1 = ce1->get_constant();
     453                                Constant * c2 = ce2->get_constant();
     454
     455                                if ( c1->get_value() != c2->get_value() ) {
     456                                        // does not unify if the dimension is different
     457                                        return;
    460458                                }
    461459                        }
     
    486484
    487485                        if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
    488 
     486       
    489487                                if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
    490488
     
    541539        }
    542540
    543         void Unify::visit(TraitInstType *contextInst) {
     541        void Unify::visit(ContextInstType *contextInst) {
    544542                handleRefType( contextInst, type2 );
    545543        }
     
    584582        }
    585583
    586         void Unify::visit(VarArgsType *varArgsType) {
    587                 result = dynamic_cast< VarArgsType* >( type2 );
    588         }
    589 
    590584} // namespace ResolvExpr
    591585
  • src/SymTab/AddVisit.h

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 16:14:32 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr  7 14:42:21 2016
    13 // Update Count     : 5
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Jul 14 12:26:17 2015
     13// Update Count     : 4
    1414//
    1515
     
    2727
    2828        template< typename Visitor >
     29        inline void addVisitStatement( Statement *stmt, Visitor &visitor ) {
     30                maybeAccept( stmt, visitor );
     31///   if ( ! declsToAdd.empty() ) {
     32///     CompoundStmt *compound = new CompoundStmt( noLabels );
     33///     compound->get_kids().push_back( stmt );
     34///     addDecls( declsToAdd, compound->get_kids(), compound->get_kids().end() );
     35///   }
     36        }
     37
     38        template< typename Visitor >
    2939        inline void addVisit(CompoundStmt *compoundStmt, Visitor &visitor) {
    3040                addVisitStatementList( compoundStmt->get_kids(), visitor );
     41        }
     42
     43        template< typename Visitor >
     44        inline void addVisit(IfStmt *ifStmt, Visitor &visitor) {
     45                addVisitStatement( ifStmt->get_thenPart(), visitor );
     46                addVisitStatement( ifStmt->get_elsePart(), visitor );
     47                maybeAccept( ifStmt->get_condition(), visitor );
     48        }
     49
     50        template< typename Visitor >
     51        inline void addVisit(WhileStmt *whileStmt, Visitor &visitor) {
     52                addVisitStatement( whileStmt->get_body(), visitor );
     53                maybeAccept( whileStmt->get_condition(), visitor );
     54        }
     55
     56        template< typename Visitor >
     57        inline void addVisit(ForStmt *forStmt, Visitor &visitor) {
     58                addVisitStatement( forStmt->get_body(), visitor );
     59                acceptAll( forStmt->get_initialization(), visitor );
     60                maybeAccept( forStmt->get_condition(), visitor );
     61                maybeAccept( forStmt->get_increment(), visitor );
    3162        }
    3263
     
    4374        }
    4475
    45         // template< typename Visitor >
    46         // inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) {
    47         //      addVisitStatementList( caseStmt->get_statements(), visitor );
    48         //      maybeAccept( caseStmt->get_condition(), visitor );
    49         // }
     76        template< typename Visitor >
     77        inline void addVisit(CaseStmt *caseStmt, Visitor &visitor) {
     78                addVisitStatementList( caseStmt->get_statements(), visitor );
     79                maybeAccept( caseStmt->get_condition(), visitor );
     80        }
     81
     82        template< typename Visitor >
     83        inline void addVisit(CatchStmt *cathStmt, Visitor &visitor) {
     84                addVisitStatement( cathStmt->get_body(), visitor );
     85                maybeAccept( cathStmt->get_decl(), visitor );
     86        }
    5087} // namespace SymTab
    5188
  • src/SymTab/FixFunction.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 16:19:49 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:31:10 2016
    13 // Update Count     : 3
     12// Last Modified On : Sun May 17 16:22:54 2015
     13// Update Count     : 2
    1414//
    1515
     
    6161        }
    6262
    63         Type * FixFunction::mutate(TraitInstType *aggregateUseType) {
     63        Type * FixFunction::mutate(ContextInstType *aggregateUseType) {
    6464                return aggregateUseType;
    6565        }
     
    7272                return tupleType;
    7373        }
    74 
    75         Type * FixFunction::mutate(VarArgsType *varArgsType) {
    76                 return varArgsType;
    77         }
    7874} // namespace SymTab
    7975
  • src/SymTab/FixFunction.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 17:02:08 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:34:06 2016
    13 // Update Count     : 3
     12// Last Modified On : Sun May 17 17:03:43 2015
     13// Update Count     : 2
    1414//
    1515
     
    3838                virtual Type* mutate(UnionInstType *aggregateUseType);
    3939                virtual Type* mutate(EnumInstType *aggregateUseType);
    40                 virtual Type* mutate(TraitInstType *aggregateUseType);
     40                virtual Type* mutate(ContextInstType *aggregateUseType);
    4141                virtual Type* mutate(TypeInstType *aggregateUseType);
    4242                virtual Type* mutate(TupleType *tupleType);
    43                 virtual Type* mutate(VarArgsType *varArgsType);
    4443 
    4544                bool isVoid;
  • src/SymTab/ImplementationType.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 21:32:01 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:31:20 2016
    13 // Update Count     : 3
     12// Last Modified On : Sun May 17 21:34:40 2015
     13// Update Count     : 2
    1414//
    1515
     
    3737                virtual void visit(UnionInstType *aggregateUseType);
    3838                virtual void visit(EnumInstType *aggregateUseType);
    39                 virtual void visit(TraitInstType *aggregateUseType);
     39                virtual void visit(ContextInstType *aggregateUseType);
    4040                virtual void visit(TypeInstType *aggregateUseType);
    4141                virtual void visit(TupleType *tupleType);
    42                 virtual void visit(VarArgsType *varArgsType);
    4342
    4443                Type *result;                   // synthesized
     
    9695        }
    9796
    98         void ImplementationType::visit(TraitInstType *aggregateUseType) {
     97        void ImplementationType::visit(ContextInstType *aggregateUseType) {
    9998        }
    10099
     
    117116                result = newType;
    118117        }
    119 
    120         void ImplementationType::visit(VarArgsType *varArgsType) {
    121         }
    122118} // namespace SymTab
    123119
  • src/SymTab/Indexer.cc

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:37:33 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:31:29 2016
    13 // Update Count     : 11
    14 //
    15 
    16 #include "Indexer.h"
    17 
    18 #include <string>
    19 #include <typeinfo>
    20 #include <unordered_map>
    21 #include <unordered_set>
    22 #include <utility>
    23 
    24 #include "Mangler.h"
    25 
    26 #include "Common/utility.h"
    27 
    28 #include "ResolvExpr/typeops.h"
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Aug 05 13:52:42 2015
     13// Update Count     : 10
     14//
    2915
    3016#include "SynTree/Declaration.h"
     
    3319#include "SynTree/Initializer.h"
    3420#include "SynTree/Statement.h"
     21#include "Indexer.h"
     22#include <typeinfo>
     23#include "Common/utility.h"
    3524
    3625#define debugPrint(x) if ( doDebug ) { std::cout << x; }
     
    4433        }
    4534
    46         typedef std::unordered_map< std::string, DeclarationWithType* > MangleTable;
    47         typedef std::unordered_map< std::string, MangleTable > IdTable;
    48         typedef std::unordered_map< std::string, NamedTypeDecl* > TypeTable;
    49         typedef std::unordered_map< std::string, StructDecl* > StructTable;
    50         typedef std::unordered_map< std::string, EnumDecl* > EnumTable;
    51         typedef std::unordered_map< std::string, UnionDecl* > UnionTable;
    52         typedef std::unordered_map< std::string, TraitDecl* > TraitTable;
    53 
    54         void dump( const IdTable &table, std::ostream &os ) {
    55                 for ( IdTable::const_iterator id = table.begin(); id != table.end(); ++id ) {
    56                         for ( MangleTable::const_iterator mangle = id->second.begin(); mangle != id->second.end(); ++mangle ) {
    57                                 os << mangle->second << std::endl;
    58                         }
    59                 }
    60         }
    61        
    62         template< typename Decl >
    63         void dump( const std::unordered_map< std::string, Decl* > &table, std::ostream &os ) {
    64                 for ( typename std::unordered_map< std::string, Decl* >::const_iterator it = table.begin(); it != table.end(); ++it ) {
    65                         os << it->second << std::endl;
    66                 } // for
    67         }
    68        
    69         struct Indexer::Impl {
    70                 Impl( unsigned long _scope ) : refCount(1), scope( _scope ), size( 0 ), base(),
    71                                 idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {}
    72                 Impl( unsigned long _scope, Indexer &&_base ) : refCount(1), scope( _scope ), size( 0 ), base( _base ),
    73                                 idTable(), typeTable(), structTable(), enumTable(), unionTable(), traitTable() {}
    74                 unsigned long refCount;   ///< Number of references to these tables
    75                 unsigned long scope;      ///< Scope these tables are associated with
    76                 unsigned long size;       ///< Number of elements stored in this table
    77                 const Indexer base;       ///< Base indexer this extends
    78                
    79                 IdTable idTable;          ///< Identifier namespace
    80                 TypeTable typeTable;      ///< Type namespace
    81                 StructTable structTable;  ///< Struct namespace
    82                 EnumTable enumTable;      ///< Enum namespace
    83                 UnionTable unionTable;    ///< Union namespace
    84                 TraitTable traitTable;    ///< Trait namespace
    85         };
    86 
    87         Indexer::Impl *Indexer::newRef( Indexer::Impl *toClone ) {
    88                 if ( ! toClone ) return 0;
    89 
    90                 // shorten the search chain by skipping empty links
    91                 Indexer::Impl *ret = toClone->size == 0 ? toClone->base.tables : toClone;
    92                 if ( ret ) { ++ret->refCount; }
    93 
    94                 return ret;
    95         }
    96 
    97         void Indexer::deleteRef( Indexer::Impl *toFree ) {
    98                 if ( ! toFree ) return;
    99 
    100                 if ( --toFree->refCount == 0 ) delete toFree;
    101         }
    102 
    103         void Indexer::makeWritable() {
    104                 if ( ! tables ) {
    105                         // create indexer if not yet set
    106                         tables = new Indexer::Impl( scope );
    107                 } else if ( tables->refCount > 1 || tables->scope != scope ) {
    108                         // make this indexer the base of a fresh indexer at the current scope
    109                         tables = new Indexer::Impl( scope, std::move( *this ) );
    110                 }
    111         }
    112 
    113         Indexer::Indexer( bool _doDebug ) : tables( 0 ), scope( 0 ), doDebug( _doDebug ) {}
    114 
    115         Indexer::Indexer( const Indexer &that ) : tables( newRef( that.tables ) ), scope( that.scope ), doDebug( that.doDebug ) {}
    116 
    117         Indexer::Indexer( Indexer &&that ) : tables( that.tables ), scope( that.scope ), doDebug( that.doDebug ) {
    118                 that.tables = 0;
    119         }
    120 
    121         Indexer::~Indexer() {
    122                 deleteRef( tables );
    123         }
    124 
    125         Indexer& Indexer::operator= ( const Indexer &that ) {
    126                 deleteRef( tables );
    127 
    128                 tables = newRef( that.tables );
    129                 scope = that.scope;
    130                 doDebug = that.doDebug;
    131 
    132                 return *this;
    133         }
    134 
    135         Indexer& Indexer::operator= ( Indexer &&that ) {
    136                 deleteRef( tables );
    137 
    138                 tables = that.tables;
    139                 scope = that.scope;
    140                 doDebug = that.doDebug;
    141 
    142                 that.tables = 0;
    143 
    144                 return *this;
    145         }
     35        Indexer::Indexer( bool useDebug ) : doDebug( useDebug ) {}
     36
     37        Indexer::~Indexer() {}
    14638
    14739        void Indexer::visit( ObjectDecl *objectDecl ) {
     
    15345                if ( objectDecl->get_name() != "" ) {
    15446                        debugPrint( "Adding object " << objectDecl->get_name() << std::endl );
    155                         addId( objectDecl );
     47                        idTable.addDecl( objectDecl );
    15648                } // if
    15749        }
     
    16052                if ( functionDecl->get_name() == "" ) return;
    16153                debugPrint( "Adding function " << functionDecl->get_name() << std::endl );
    162                 addId( functionDecl );
     54                idTable.addDecl( functionDecl );
    16355                enterScope();
    16456                maybeAccept( functionDecl->get_functionType(), *this );
     
    19890                leaveScope();
    19991                debugPrint( "Adding type " << typeDecl->get_name() << std::endl );
    200                 addType( typeDecl );
     92                typeTable.add( typeDecl );
    20193                acceptAll( typeDecl->get_assertions(), *this );
    20294        }
     
    208100                leaveScope();
    209101                debugPrint( "Adding typedef " << typeDecl->get_name() << std::endl );
    210                 addType( typeDecl );
     102                typeTable.add( typeDecl );
    211103        }
    212104
     
    216108                cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() );
    217109                debugPrint( "Adding fwd decl for struct " << fwdDecl.get_name() << std::endl );
    218                 addStruct( &fwdDecl );
     110                structTable.add( &fwdDecl );
    219111 
    220112                enterScope();
     
    225117                debugPrint( "Adding struct " << aggregateDecl->get_name() << std::endl );
    226118                // this addition replaces the forward declaration
    227                 addStruct( aggregateDecl );
     119                structTable.add( aggregateDecl );
    228120        }
    229121
     
    233125                cloneAll( aggregateDecl->get_parameters(), fwdDecl.get_parameters() );
    234126                debugPrint( "Adding fwd decl for union " << fwdDecl.get_name() << std::endl );
    235                 addUnion( &fwdDecl );
     127                unionTable.add( &fwdDecl );
    236128 
    237129                enterScope();
     
    241133 
    242134                debugPrint( "Adding union " << aggregateDecl->get_name() << std::endl );
    243                 addUnion( aggregateDecl );
     135                unionTable.add( aggregateDecl );
    244136        }
    245137
    246138        void Indexer::visit( EnumDecl *aggregateDecl ) {
    247139                debugPrint( "Adding enum " << aggregateDecl->get_name() << std::endl );
    248                 addEnum( aggregateDecl );
     140                enumTable.add( aggregateDecl );
    249141                // unlike structs, contexts, and unions, enums inject their members into the global scope
    250142                acceptAll( aggregateDecl->get_members(), *this );
    251143        }
    252144
    253         void Indexer::visit( TraitDecl *aggregateDecl ) {
     145        void Indexer::visit( ContextDecl *aggregateDecl ) {
    254146                enterScope();
    255147                acceptAll( aggregateDecl->get_parameters(), *this );
     
    258150 
    259151                debugPrint( "Adding context " << aggregateDecl->get_name() << std::endl );
    260                 addTrait( aggregateDecl );
     152                contextTable.add( aggregateDecl );
    261153        }
    262154
     
    346238        }
    347239
    348         void Indexer::visit( OffsetPackExpr *offsetPackExpr ) {
    349                 acceptAllNewScope( offsetPackExpr->get_results(), *this );
    350                 maybeAccept( offsetPackExpr->get_type(), *this );
    351         }
    352 
    353240        void Indexer::visit( AttrExpr *attrExpr ) {
    354241                acceptAllNewScope( attrExpr->get_results(), *this );
     
    406293
    407294
    408         void Indexer::visit( TraitInstType *contextInst ) {
     295        void Indexer::visit( ContextInstType *contextInst ) {
    409296                acceptAll( contextInst->get_parameters(), *this );
    410297                acceptAll( contextInst->get_members(), *this );
     
    412299
    413300        void Indexer::visit( StructInstType *structInst ) {
    414                 if ( ! lookupStruct( structInst->get_name() ) ) {
     301                if ( ! structTable.lookup( structInst->get_name() ) ) {
    415302                        debugPrint( "Adding struct " << structInst->get_name() << " from implicit forward declaration" << std::endl );
    416                         addStruct( structInst->get_name() );
     303                        structTable.add( structInst->get_name() );
    417304                }
    418305                enterScope();
     
    422309
    423310        void Indexer::visit( UnionInstType *unionInst ) {
    424                 if ( ! lookupUnion( unionInst->get_name() ) ) {
     311                if ( ! unionTable.lookup( unionInst->get_name() ) ) {
    425312                        debugPrint( "Adding union " << unionInst->get_name() << " from implicit forward declaration" << std::endl );
    426                         addUnion( unionInst->get_name() );
     313                        unionTable.add( unionInst->get_name() );
    427314                }
    428315                enterScope();
     
    438325        }
    439326
    440        
    441 
    442         void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const {
    443                 std::unordered_set< std::string > foundMangleNames;
    444                
    445                 Indexer::Impl *searchTables = tables;
    446                 while ( searchTables ) {
    447 
    448                         IdTable::const_iterator decls = searchTables->idTable.find( id );
    449                         if ( decls != searchTables->idTable.end() ) {
    450                                 const MangleTable &mangleTable = decls->second;
    451                                 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    452                                         // mark the mangled name as found, skipping this insertion if a declaration for that name has already been found
    453                                         if ( foundMangleNames.insert( decl->first ).second == false ) continue;
    454                                        
    455                                         out.push_back( decl->second );
    456                                 }
    457                         }
    458                        
    459                         // get declarations from base indexers
    460                         searchTables = searchTables->base.tables;
    461                 }
     327
     328        void Indexer::lookupId( const std::string &id, std::list< DeclarationWithType* > &list ) const {
     329                idTable.lookupId( id, list );
     330        }
     331
     332        DeclarationWithType* Indexer::lookupId( const std::string &id) const {
     333                return idTable.lookupId(id);
    462334        }
    463335
    464336        NamedTypeDecl *Indexer::lookupType( const std::string &id ) const {
    465                 if ( ! tables ) return 0;
    466 
    467                 TypeTable::const_iterator ret = tables->typeTable.find( id );
    468                 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupType( id );
     337                return typeTable.lookup( id );
    469338        }
    470339
    471340        StructDecl *Indexer::lookupStruct( const std::string &id ) const {
    472                 if ( ! tables ) return 0;
    473 
    474                 StructTable::const_iterator ret = tables->structTable.find( id );
    475                 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStruct( id );
     341                return structTable.lookup( id );
    476342        }
    477343
    478344        EnumDecl *Indexer::lookupEnum( const std::string &id ) const {
    479                 if ( ! tables ) return 0;
    480 
    481                 EnumTable::const_iterator ret = tables->enumTable.find( id );
    482                 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnum( id );
     345                return enumTable.lookup( id );
    483346        }
    484347
    485348        UnionDecl *Indexer::lookupUnion( const std::string &id ) const {
    486                 if ( ! tables ) return 0;
    487 
    488                 UnionTable::const_iterator ret = tables->unionTable.find( id );
    489                 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnion( id );
    490         }
    491 
    492         TraitDecl *Indexer::lookupTrait( const std::string &id ) const {
    493                 if ( ! tables ) return 0;
    494 
    495                 TraitTable::const_iterator ret = tables->traitTable.find( id );
    496                 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTrait( id );
    497         }
    498 
    499         DeclarationWithType *Indexer::lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const {
    500                 if ( ! tables ) return 0;
    501                 if ( tables->scope < scope ) return 0;
    502 
    503                 IdTable::const_iterator decls = tables->idTable.find( id );
    504                 if ( decls != tables->idTable.end() ) {
    505                         const MangleTable &mangleTable = decls->second;
    506                         MangleTable::const_iterator decl = mangleTable.find( mangleName );
    507                         if ( decl != mangleTable.end() ) return decl->second;
    508                 }
    509 
    510                 return tables->base.lookupIdAtScope( id, mangleName, scope );
    511         }
    512 
    513         bool Indexer::hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const {
    514                 if ( ! tables ) return false;
    515 
    516                 IdTable::const_iterator decls = tables->idTable.find( id );
    517                 if ( decls != tables->idTable.end() ) {
    518                         const MangleTable &mangleTable = decls->second;
    519                         for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) {
    520                                 // check for C decls with the same name, skipping
    521                                 // those with a compatible type (by mangleName)
    522                                 if ( decl->second->get_linkage() == LinkageSpec::C && decl->first != mangleName ) return true;
    523                         }
    524                 }
    525 
    526                 return tables->base.hasIncompatibleCDecl( id, mangleName );
    527         }
    528        
    529         NamedTypeDecl *Indexer::lookupTypeAtScope( const std::string &id, unsigned long scope ) const {
    530                 if ( ! tables ) return 0;
    531                 if ( tables->scope < scope ) return 0;
    532 
    533                 TypeTable::const_iterator ret = tables->typeTable.find( id );
    534                 return ret != tables->typeTable.end() ? ret->second : tables->base.lookupTypeAtScope( id, scope );
    535         }
    536        
    537         StructDecl *Indexer::lookupStructAtScope( const std::string &id, unsigned long scope ) const {
    538                 if ( ! tables ) return 0;
    539                 if ( tables->scope < scope ) return 0;
    540 
    541                 StructTable::const_iterator ret = tables->structTable.find( id );
    542                 return ret != tables->structTable.end() ? ret->second : tables->base.lookupStructAtScope( id, scope );
    543         }
    544        
    545         EnumDecl *Indexer::lookupEnumAtScope( const std::string &id, unsigned long scope ) const {
    546                 if ( ! tables ) return 0;
    547                 if ( tables->scope < scope ) return 0;
    548 
    549                 EnumTable::const_iterator ret = tables->enumTable.find( id );
    550                 return ret != tables->enumTable.end() ? ret->second : tables->base.lookupEnumAtScope( id, scope );
    551         }
    552        
    553         UnionDecl *Indexer::lookupUnionAtScope( const std::string &id, unsigned long scope ) const {
    554                 if ( ! tables ) return 0;
    555                 if ( tables->scope < scope ) return 0;
    556 
    557                 UnionTable::const_iterator ret = tables->unionTable.find( id );
    558                 return ret != tables->unionTable.end() ? ret->second : tables->base.lookupUnionAtScope( id, scope );
    559         }
    560        
    561         TraitDecl *Indexer::lookupTraitAtScope( const std::string &id, unsigned long scope ) const {
    562                 if ( ! tables ) return 0;
    563                 if ( tables->scope < scope ) return 0;
    564 
    565                 TraitTable::const_iterator ret = tables->traitTable.find( id );
    566                 return ret != tables->traitTable.end() ? ret->second : tables->base.lookupTraitAtScope( id, scope );
    567         }
    568 
    569         bool addedIdConflicts( DeclarationWithType *existing, DeclarationWithType *added ) {
    570                 // if we're giving the same name mangling to things of different types then there is something wrong
    571                 assert( (dynamic_cast<ObjectDecl*>( added ) && dynamic_cast<ObjectDecl*>( existing ) )
    572                         || (dynamic_cast<FunctionDecl*>( added ) && dynamic_cast<FunctionDecl*>( existing ) ) );
    573 
    574                 if ( LinkageSpec::isOverridable( existing->get_linkage() ) ) {
    575                         // new definition shadows the autogenerated one, even at the same scope
    576                         return false;
    577                 } else if ( added->get_linkage() != LinkageSpec::C || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) {
    578                         // typesCompatible doesn't really do the right thing here. When checking compatibility of function types,
    579                         // we should ignore outermost pointer qualifiers, except _Atomic?
    580                         FunctionDecl *newentry = dynamic_cast< FunctionDecl* >( added );
    581                         FunctionDecl *oldentry = dynamic_cast< FunctionDecl* >( existing );
    582                         if ( newentry && oldentry ) {
    583                                 if ( newentry->get_statements() && oldentry->get_statements() ) {
    584                                         throw SemanticError( "duplicate function definition for ", added );
    585                                 } // if
    586                         } else {
    587                                 // two objects with the same mangled name defined in the same scope.
    588                                 // both objects must be marked extern or both must be intrinsic for this to be okay
    589                                 // xxx - perhaps it's actually if either is intrinsic then this is okay?
    590                                 //       might also need to be same storage class?
    591                                 ObjectDecl *newobj = dynamic_cast< ObjectDecl* >( added );
    592                                 ObjectDecl *oldobj = dynamic_cast< ObjectDecl* >( existing );
    593                                 if ( newobj->get_storageClass() != DeclarationNode::Extern && oldobj->get_storageClass() != DeclarationNode::Extern ) {
    594                                         throw SemanticError( "duplicate object definition for ", added );
    595                                 } // if
    596                         } // if
    597                 } else {
    598                         throw SemanticError( "duplicate definition for ", added );
    599                 } // if
    600 
    601                 return true;
    602         }
    603        
    604         void Indexer::addId( DeclarationWithType *decl ) {
    605                 makeWritable();
    606 
    607                 const std::string &name = decl->get_name();
    608                 std::string mangleName;
    609                 if ( LinkageSpec::isOverridable( decl->get_linkage() ) ) {
    610                         // mangle the name without including the appropriate suffix, so overridable routines are placed into the
    611                         // same "bucket" as their user defined versions.
    612                         mangleName = Mangler::mangle( decl, false );
    613                 } else {
    614                         mangleName = Mangler::mangle( decl );
    615                 } // if
    616 
    617                 DeclarationWithType *existing = lookupIdAtScope( name, mangleName, scope );
    618                 if ( ! existing || ! addedIdConflicts( existing, decl ) ) {
    619                         // this ensures that no two declarations with the same unmangled name both have C linkage
    620                         if ( decl->get_linkage() == LinkageSpec::C && hasIncompatibleCDecl( name, mangleName ) ) {
    621                                 throw SemanticError( "invalid overload of C function ", decl );
    622                         } // NOTE this is broken in Richard's original code in such a way that it never triggers (it
    623                           // doesn't check decls that have the same manglename, and all C-linkage decls are defined to
    624                           // have their name as their manglename, hence the error can never trigger).
    625                           // The code here is closer to correct, but name mangling would have to be completely
    626                           // isomorphic to C type-compatibility, which it may not be.
    627                        
    628                         tables->idTable[ name ][ mangleName ] = decl;
    629                         ++tables->size;
    630                 }
    631         }
    632 
    633         bool addedTypeConflicts( NamedTypeDecl *existing, NamedTypeDecl *added ) {
    634                 if ( existing->get_base() == 0 ) {
    635                         return false;
    636                 } else if ( added->get_base() == 0 ) {
    637                         return true;
    638                 } else {
    639                         throw SemanticError( "redeclaration of ", added );
    640                 }
    641         }
    642        
    643         void Indexer::addType( NamedTypeDecl *decl ) {
    644                 makeWritable();
    645 
    646                 const std::string &id = decl->get_name();
    647                 TypeTable::iterator existing = tables->typeTable.find( id );
    648                 if ( existing == tables->typeTable.end() ) {
    649                         NamedTypeDecl *parent = tables->base.lookupTypeAtScope( id, scope );
    650                         if ( ! parent || ! addedTypeConflicts( parent, decl ) ) {
    651                                 tables->typeTable.insert( existing, std::make_pair( id, decl ) );
    652                                 ++tables->size;
    653                         }
    654                 } else {
    655                         if ( ! addedTypeConflicts( existing->second, decl ) ) {
    656                                 existing->second = decl;
    657                         }
    658                 }
    659         }
    660 
    661         bool addedDeclConflicts( AggregateDecl *existing, AggregateDecl *added ) {
    662                 if ( existing->get_members().empty() ) {
    663                         return false;
    664                 } else if ( ! added->get_members().empty() ) {
    665                         throw SemanticError( "redeclaration of ", added );
    666                 } // if
    667                 return true;
    668         }
    669 
    670         void Indexer::addStruct( const std::string &id ) {
    671                 addStruct( new StructDecl( id ) );
    672         }
    673        
    674         void Indexer::addStruct( StructDecl *decl ) {
    675                 makeWritable();
    676 
    677                 const std::string &id = decl->get_name();
    678                 StructTable::iterator existing = tables->structTable.find( id );
    679                 if ( existing == tables->structTable.end() ) {
    680                         StructDecl *parent = tables->base.lookupStructAtScope( id, scope );
    681                         if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
    682                                 tables->structTable.insert( existing, std::make_pair( id, decl ) );
    683                                 ++tables->size;
    684                         }
    685                 } else {
    686                         if ( ! addedDeclConflicts( existing->second, decl ) ) {
    687                                 existing->second = decl;
    688                         }
    689                 }
    690         }
    691        
    692         void Indexer::addEnum( EnumDecl *decl ) {
    693                 makeWritable();
    694 
    695                 const std::string &id = decl->get_name();
    696                 EnumTable::iterator existing = tables->enumTable.find( id );
    697                 if ( existing == tables->enumTable.end() ) {
    698                         EnumDecl *parent = tables->base.lookupEnumAtScope( id, scope );
    699                         if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
    700                                 tables->enumTable.insert( existing, std::make_pair( id, decl ) );
    701                                 ++tables->size;
    702                         }
    703                 } else {
    704                         if ( ! addedDeclConflicts( existing->second, decl ) ) {
    705                                 existing->second = decl;
    706                         }
    707                 }
    708         }
    709 
    710         void Indexer::addUnion( const std::string &id ) {
    711                 addUnion( new UnionDecl( id ) );
    712         }
    713        
    714         void Indexer::addUnion( UnionDecl *decl ) {
    715                 makeWritable();
    716 
    717                 const std::string &id = decl->get_name();
    718                 UnionTable::iterator existing = tables->unionTable.find( id );
    719                 if ( existing == tables->unionTable.end() ) {
    720                         UnionDecl *parent = tables->base.lookupUnionAtScope( id, scope );
    721                         if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
    722                                 tables->unionTable.insert( existing, std::make_pair( id, decl ) );
    723                                 ++tables->size;
    724                         }
    725                 } else {
    726                         if ( ! addedDeclConflicts( existing->second, decl ) ) {
    727                                 existing->second = decl;
    728                         }
    729                 }
    730         }
    731        
    732         void Indexer::addTrait( TraitDecl *decl ) {
    733                 makeWritable();
    734 
    735                 const std::string &id = decl->get_name();
    736                 TraitTable::iterator existing = tables->traitTable.find( id );
    737                 if ( existing == tables->traitTable.end() ) {
    738                         TraitDecl *parent = tables->base.lookupTraitAtScope( id, scope );
    739                         if ( ! parent || ! addedDeclConflicts( parent, decl ) ) {
    740                                 tables->traitTable.insert( existing, std::make_pair( id, decl ) );
    741                                 ++tables->size;
    742                         }
    743                 } else {
    744                         if ( ! addedDeclConflicts( existing->second, decl ) ) {
    745                                 existing->second = decl;
    746                         }
    747                 }
     349                return unionTable.lookup( id );
     350        }
     351
     352        ContextDecl  * Indexer::lookupContext( const std::string &id ) const {
     353                return contextTable.lookup( id );
    748354        }
    749355
    750356        void Indexer::enterScope() {
    751                 ++scope;
    752                
    753357                if ( doDebug ) {
    754                         std::cout << "--- Entering scope " << scope << std::endl;
    755                 }
     358                        std::cout << "--- Entering scope" << std::endl;
     359                }
     360                idTable.enterScope();
     361                typeTable.enterScope();
     362                structTable.enterScope();
     363                enumTable.enterScope();
     364                unionTable.enterScope();
     365                contextTable.enterScope();
    756366        }
    757367
    758368        void Indexer::leaveScope() {
    759369                using std::cout;
    760 
    761                 assert( scope > 0 && "cannot leave initial scope" );
    762                 --scope;
    763 
    764                 while ( tables && tables->scope > scope ) {
    765                         if ( doDebug ) {
    766                                 cout << "--- Leaving scope " << tables->scope << " containing" << std::endl;
    767                                 dump( tables->idTable, cout );
    768                                 dump( tables->typeTable, cout );
    769                                 dump( tables->structTable, cout );
    770                                 dump( tables->enumTable, cout );
    771                                 dump( tables->unionTable, cout );
    772                                 dump( tables->traitTable, cout );
    773                         }
    774 
    775                         // swap tables for base table until we find one at an appropriate scope
    776                         Indexer::Impl *base = newRef( tables->base.tables );
    777                         deleteRef( tables );
    778                         tables = base;
    779                 }
     370                using std::endl;
     371 
     372                if ( doDebug ) {
     373                        cout << "--- Leaving scope containing" << endl;
     374                        idTable.dump( cout );
     375                        typeTable.dump( cout );
     376                        structTable.dump( cout );
     377                        enumTable.dump( cout );
     378                        unionTable.dump( cout );
     379                        contextTable.dump( cout );
     380                }
     381                idTable.leaveScope();
     382                typeTable.leaveScope();
     383                structTable.leaveScope();
     384                enumTable.leaveScope();
     385                unionTable.leaveScope();
     386                contextTable.leaveScope();
    780387        }
    781388
    782389        void Indexer::print( std::ostream &os, int indent ) const {
    783390            using std::cerr;
    784 
    785             cerr << "===idTable===" << std::endl;
    786             if ( tables ) dump( tables->idTable, os );
    787             cerr << "===typeTable===" << std::endl;
    788             if ( tables ) dump( tables->typeTable, os );
    789             cerr << "===structTable===" << std::endl;
    790             if ( tables ) dump( tables->structTable, os );
    791             cerr << "===enumTable===" << std::endl;
    792             if ( tables ) dump( tables->enumTable, os );
    793             cerr << "===unionTable===" << std::endl;
    794             if ( tables ) dump( tables->unionTable, os );
    795             cerr << "===contextTable===" << std::endl;
    796             if ( tables ) dump( tables->traitTable, os );
     391            using std::endl;
     392
     393            cerr << "===idTable===" << endl;
     394            idTable.dump( os );
     395            cerr << "===typeTable===" << endl;
     396            typeTable.dump( os );
     397            cerr << "===structTable===" << endl;
     398            structTable.dump( os );
     399            cerr << "===enumTable===" << endl;
     400            enumTable.dump( os );
     401            cerr << "===unionTable===" << endl;
     402            unionTable.dump( os );
     403            cerr << "===contextTable===" << endl;
     404            contextTable.dump( os );
     405#if 0
     406                idTable.dump( os );
     407                typeTable.dump( os );
     408                structTable.dump( os );
     409                enumTable.dump( os );
     410                unionTable.dump( os );
     411                contextTable.dump( os );
     412#endif
    797413        }
    798414} // namespace SymTab
  • src/SymTab/Indexer.h

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 21:38:55 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:34:14 2016
    13 // Update Count     : 6
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Thu Sep 17 16:05:38 2015
     13// Update Count     : 5
    1414//
    1515
     
    2121
    2222#include "SynTree/Visitor.h"
     23#include "IdTable.h"
     24#include "AggregateTable.h"
     25#include "TypeTable.h"
    2326
    2427namespace SymTab {
     
    2629          public:
    2730                Indexer( bool useDebug = false );
    28 
    29                 Indexer( const Indexer &that );
    30                 Indexer( Indexer &&that );
    3131                virtual ~Indexer();
    32                 Indexer& operator= ( const Indexer &that );
    33                 Indexer& operator= ( Indexer &&that );
    3432
    3533                //using Visitor::visit;
     
    4139                virtual void visit( UnionDecl *aggregateDecl );
    4240                virtual void visit( EnumDecl *aggregateDecl );
    43                 virtual void visit( TraitDecl *aggregateDecl );
     41                virtual void visit( ContextDecl *aggregateDecl );
    4442
    4543                virtual void visit( CompoundStmt *compoundStmt );
     
    5957                virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6058                virtual void visit( OffsetofExpr *offsetofExpr );
    61                 virtual void visit( OffsetPackExpr *offsetPackExpr );
    6259                virtual void visit( AttrExpr *attrExpr );
    6360                virtual void visit( LogicalExpr *logicalExpr );
     
    7067                virtual void visit( UntypedValofExpr *valofExpr );
    7168
    72                 virtual void visit( TraitInstType *contextInst );
     69                virtual void visit( ContextInstType *contextInst );
    7370                virtual void visit( StructInstType *contextInst );
    7471                virtual void visit( UnionInstType *contextInst );
     
    8178                void leaveScope();
    8279
    83                 /// Gets all declarations with the given ID
    84                 void lookupId( const std::string &id, std::list< DeclarationWithType* > &out ) const;
    85                 /// Gets the top-most type declaration with the given ID
     80                void lookupId( const std::string &id, std::list< DeclarationWithType* >& ) const;
     81                DeclarationWithType* lookupId( const std::string &id) const;
    8682                NamedTypeDecl *lookupType( const std::string &id ) const;
    87                 /// Gets the top-most struct declaration with the given ID
    8883                StructDecl *lookupStruct( const std::string &id ) const;
    89                 /// Gets the top-most enum declaration with the given ID
    9084                EnumDecl *lookupEnum( const std::string &id ) const;
    91                 /// Gets the top-most union declaration with the given ID
    9285                UnionDecl *lookupUnion( const std::string &id ) const;
    93                 /// Gets the top-most trait declaration with the given ID
    94                 TraitDecl *lookupTrait( const std::string &id ) const;
     86                ContextDecl *lookupContext( const std::string &id ) const;
    9587 
    9688                void print( std::ostream &os, int indent = 0 ) const;
    9789          private:
    98                 /// looks up a specific mangled ID at the given scope
    99                 DeclarationWithType *lookupIdAtScope( const std::string &id, const std::string &mangleName, unsigned long scope ) const;
    100                 /// returns true if there exists a declaration with C linkage and the given name with a different mangled name
    101                 bool hasIncompatibleCDecl( const std::string &id, const std::string &mangleName ) const;
    102                 // equivalents to lookup functions that only look at tables at scope `scope` (which should be >= tables->scope)
    103                 NamedTypeDecl *lookupTypeAtScope( const std::string &id, unsigned long scope ) const;
    104                 StructDecl *lookupStructAtScope( const std::string &id, unsigned long scope ) const;
    105                 EnumDecl *lookupEnumAtScope( const std::string &id, unsigned long scope ) const;
    106                 UnionDecl *lookupUnionAtScope( const std::string &id, unsigned long scope ) const;
    107                 TraitDecl *lookupTraitAtScope( const std::string &id, unsigned long scope ) const;
    108                
    109                 void addId( DeclarationWithType *decl );
    110                 void addType( NamedTypeDecl *decl );
    111                 void addStruct( const std::string &id );
    112                 void addStruct( StructDecl *decl );
    113                 void addEnum( EnumDecl *decl );
    114                 void addUnion( const std::string &id );
    115                 void addUnion( UnionDecl *decl );
    116                 void addTrait( TraitDecl *decl );
    117                
    118                 struct Impl;
    119                 Impl *tables;         ///< Copy-on-write instance of table data structure
    120                 unsigned long scope;  ///< Scope index of this pointer
    121                 bool doDebug;         ///< Display debugging trace?
    122 
    123                 /// Takes a new ref to a table (returns null if null)
    124                 static Impl *newRef( Impl *toClone );
    125                 /// Clears a ref to a table (does nothing if null)
    126                 static void deleteRef( Impl *toFree );
    127 
    128                 /// Ensures that tables variable is writable (i.e. allocated, uniquely owned by this Indexer, and at the current scope)
    129                 void makeWritable();
     90                IdTable idTable;
     91                TypeTable typeTable;
     92                StructTable structTable;
     93                EnumTable enumTable;
     94                UnionTable unionTable;
     95                ContextTable contextTable;
     96 
     97                bool doDebug;                                   // display debugging trace
    13098        };
    13199} // namespace SymTab
  • src/SymTab/Mangler.cc

    r0f9e4403 rc5833e8  
    224224                acceptAll( tupleType->get_types(), *this );
    225225                mangleName << "_";
    226         }
    227 
    228         void Mangler::visit( VarArgsType *varArgsType ) {
    229                 printQualifiers( varArgsType );
    230                 mangleName << "VARGS";
    231226        }
    232227
  • src/SymTab/Mangler.h

    r0f9e4403 rc5833e8  
    4545                virtual void visit( TypeInstType *aggregateUseType );
    4646                virtual void visit( TupleType *tupleType );
    47                 virtual void visit( VarArgsType *varArgsType );
    4847 
    4948                std::string get_mangleName() { return mangleName.str(); }
  • src/SymTab/TypeEquality.cc

    r0f9e4403 rc5833e8  
    4141                virtual void visit( EnumInstType *enumInst );
    4242                virtual void visit( TypeInstType *typeInst );
    43                 virtual void visit( VarArgsType *varArgsType );
    4443
    4544                void handleQualifiers( Type * t );
     
    192191                }
    193192        }
    194 
    195         void TypeEquality::visit( VarArgsType *varArgsType ) {
    196                 handleQualifiers( varArgsType );
    197                 if ( ! dynamic_cast< VarArgsType * >( other ) ) {
    198                         result = false;
    199                 }
    200         }
    201193} // namespace SymTab
  • src/SymTab/Validate.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 21:50:04 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:39:30 2016
    13 // Update Count     : 251
     12// Last Modified On : Wed Jan 27 22:03:12 2016
     13// Update Count     : 225
    1414//
    1515
     
    4040#include <list>
    4141#include <iterator>
    42 #include "Common/utility.h"
    43 #include "Common/UniqueName.h"
    4442#include "Validate.h"
    4543#include "SynTree/Visitor.h"
    4644#include "SynTree/Mutator.h"
    4745#include "SynTree/Type.h"
    48 #include "SynTree/Expression.h"
    4946#include "SynTree/Statement.h"
    5047#include "SynTree/TypeSubstitution.h"
     
    5249#include "FixFunction.h"
    5350// #include "ImplementationType.h"
    54 #include "GenPoly/DeclMutator.h"
     51#include "Common/utility.h"
     52#include "Common/UniqueName.h"
    5553#include "AddVisit.h"
    5654#include "MakeLibCfa.h"
     
    7270
    7371                virtual void visit( CompoundStmt *compoundStmt );
     72                virtual void visit( IfStmt *ifStmt );
     73                virtual void visit( WhileStmt *whileStmt );
     74                virtual void visit( ForStmt *forStmt );
    7475                virtual void visit( SwitchStmt *switchStmt );
    7576                virtual void visit( ChooseStmt *chooseStmt );
    76                 // virtual void visit( CaseStmt *caseStmt );
     77                virtual void visit( CaseStmt *caseStmt );
     78                virtual void visit( CatchStmt *catchStmt );
    7779          private:
    7880                HoistStruct();
     
    99101                virtual void visit( StructInstType *structInst );
    100102                virtual void visit( UnionInstType *unionInst );
    101                 virtual void visit( TraitInstType *contextInst );
     103                virtual void visit( ContextInstType *contextInst );
    102104                virtual void visit( StructDecl *structDecl );
    103105                virtual void visit( UnionDecl *unionDecl );
     
    135137                virtual void visit( UnionDecl *structDecl );
    136138                virtual void visit( TypeDecl *typeDecl );
    137                 virtual void visit( TraitDecl *ctxDecl );
     139                virtual void visit( ContextDecl *ctxDecl );
    138140                virtual void visit( FunctionDecl *functionDecl );
    139141
     
    142144
    143145                virtual void visit( CompoundStmt *compoundStmt );
     146                virtual void visit( IfStmt *ifStmt );
     147                virtual void visit( WhileStmt *whileStmt );
     148                virtual void visit( ForStmt *forStmt );
    144149                virtual void visit( SwitchStmt *switchStmt );
    145150                virtual void visit( ChooseStmt *chooseStmt );
    146                 // virtual void visit( CaseStmt *caseStmt );
     151                virtual void visit( CaseStmt *caseStmt );
     152                virtual void visit( CatchStmt *catchStmt );
    147153
    148154                AutogenerateRoutines() : functionNesting( 0 ) {}
     
    160166                /// and return something if the return type is non-void.
    161167                static void checkFunctionReturns( std::list< Declaration * > & translationUnit );
     168
    162169          private:
    163170                virtual void visit( FunctionDecl * functionDecl );
     
    185192                virtual Declaration *mutate( UnionDecl * unionDecl );
    186193                virtual Declaration *mutate( EnumDecl * enumDecl );
    187                 virtual Declaration *mutate( TraitDecl * contextDecl );
     194                virtual Declaration *mutate( ContextDecl * contextDecl );
    188195
    189196                template<typename AggDecl>
    190197                AggDecl *handleAggregate( AggDecl * aggDecl );
    191198
    192                 template<typename AggDecl>
    193                 void addImplicitTypedef( AggDecl * aggDecl );
    194                
    195199                typedef std::map< std::string, std::pair< TypedefDecl *, int > > TypedefMap;
    196200                TypedefMap typedefNames;
     
    198202        };
    199203
    200         class CompoundLiteral : public GenPoly::DeclMutator {
    201                 DeclarationNode::StorageClass storageclass = DeclarationNode::NoStorageClass;
    202 
    203                 virtual DeclarationWithType * mutate( ObjectDecl *objectDecl );
    204                 virtual Expression *mutate( CompoundLiteralExpr *compLitExpr );
    205         };
    206 
    207204        void validate( std::list< Declaration * > &translationUnit, bool doDebug ) {
    208205                Pass1 pass1;
    209206                Pass2 pass2( doDebug, 0 );
    210207                Pass3 pass3( 0 );
    211                 CompoundLiteral compoundliteral;
    212 
    213208                EliminateTypedef::eliminateTypedef( translationUnit );
    214209                HoistStruct::hoistStruct( translationUnit );
     
    216211                acceptAll( translationUnit, pass2 );
    217212                ReturnChecker::checkFunctionReturns( translationUnit );
    218                 mutateAll( translationUnit, compoundliteral );
    219213                AutogenerateRoutines::autogenerateRoutines( translationUnit );
    220214                acceptAll( translationUnit, pass3 );
     
    298292        }
    299293
     294        void HoistStruct::visit( IfStmt *ifStmt ) {
     295                addVisit( ifStmt, *this );
     296        }
     297
     298        void HoistStruct::visit( WhileStmt *whileStmt ) {
     299                addVisit( whileStmt, *this );
     300        }
     301
     302        void HoistStruct::visit( ForStmt *forStmt ) {
     303                addVisit( forStmt, *this );
     304        }
     305
    300306        void HoistStruct::visit( SwitchStmt *switchStmt ) {
    301307                addVisit( switchStmt, *this );
     
    306312        }
    307313
    308         // void HoistStruct::visit( CaseStmt *caseStmt ) {
    309         //      addVisit( caseStmt, *this );
    310         // }
     314        void HoistStruct::visit( CaseStmt *caseStmt ) {
     315                addVisit( caseStmt, *this );
     316        }
     317
     318        void HoistStruct::visit( CatchStmt *cathStmt ) {
     319                addVisit( cathStmt, *this );
     320        }
    311321
    312322        void Pass1::visit( EnumDecl *enumDecl ) {
     
    394404        }
    395405
    396         void Pass2::visit( TraitInstType *contextInst ) {
     406        void Pass2::visit( ContextInstType *contextInst ) {
    397407                Parent::visit( contextInst );
    398                 TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() );
     408                ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() );
    399409                if ( ! ctx ) {
    400410                        throw SemanticError( "use of undeclared context " + contextInst->get_name() );
     
    402412                for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) {
    403413                        for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
    404                                 if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) {
     414                                if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) {
    405415                                        cloneAll( otherCtx->get_members(), contextInst->get_members() );
    406416                                } else {
     
    466476                        while ( ! toBeDone.empty() ) {
    467477                                for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) {
    468                                         if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) {
     478                                        if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) {
    469479                                                for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) {
    470480                                                        DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i );
     
    841851        }
    842852
    843         void AutogenerateRoutines::visit( TraitDecl *) {
     853        void AutogenerateRoutines::visit( ContextDecl *) {
    844854                // ensure that we don't add assignment ops for types defined as part of the context
    845855        }
     
    864874        }
    865875
     876        void AutogenerateRoutines::visit( IfStmt *ifStmt ) {
     877                visitStatement( ifStmt );
     878        }
     879
     880        void AutogenerateRoutines::visit( WhileStmt *whileStmt ) {
     881                visitStatement( whileStmt );
     882        }
     883
     884        void AutogenerateRoutines::visit( ForStmt *forStmt ) {
     885                visitStatement( forStmt );
     886        }
     887
    866888        void AutogenerateRoutines::visit( SwitchStmt *switchStmt ) {
    867889                visitStatement( switchStmt );
     
    872894        }
    873895
    874         // void AutogenerateRoutines::visit( CaseStmt *caseStmt ) {
    875         //      visitStatement( caseStmt );
    876         // }
     896        void AutogenerateRoutines::visit( CaseStmt *caseStmt ) {
     897                visitStatement( caseStmt );
     898        }
     899
     900        void AutogenerateRoutines::visit( CatchStmt *cathStmt ) {
     901                visitStatement( cathStmt );
     902        }
    877903
    878904        void ReturnChecker::checkFunctionReturns( std::list< Declaration * > & translationUnit ) {
     
    10171043        }
    10181044
    1019         // there may be typedefs nested within aggregates in order for everything to work properly, these should be removed
    1020         // as well
     1045        // there may be typedefs nested within aggregates
     1046        // in order for everything to work properly, these
     1047        // should be removed as well
    10211048        template<typename AggDecl>
    10221049        AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) {
     
    10321059                return aggDecl;
    10331060        }
    1034        
    1035         template<typename AggDecl>
    1036         void EliminateTypedef::addImplicitTypedef( AggDecl * aggDecl ) {
    1037                 if ( typedefNames.count( aggDecl->get_name() ) == 0 ) {
    1038                         Type *type;
    1039                         if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( aggDecl ) ) {
    1040                                 type = new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() );
    1041                         } else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( aggDecl ) ) {
    1042                                 type = new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() );
    1043                         } else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( aggDecl )  ) {
    1044                                 type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() );
    1045                         } // if
    1046                         TypedefDecl * tyDecl = new TypedefDecl( aggDecl->get_name(), DeclarationNode::NoStorageClass, type );
    1047                         typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel );
    1048                 } // if
    1049         }
     1061
    10501062        Declaration *EliminateTypedef::mutate( StructDecl * structDecl ) {
    1051                 addImplicitTypedef( structDecl );
    10521063                Mutator::mutate( structDecl );
    10531064                return handleAggregate( structDecl );
     
    10551066
    10561067        Declaration *EliminateTypedef::mutate( UnionDecl * unionDecl ) {
    1057                 addImplicitTypedef( unionDecl );
    10581068                Mutator::mutate( unionDecl );
    10591069                return handleAggregate( unionDecl );
     
    10611071
    10621072        Declaration *EliminateTypedef::mutate( EnumDecl * enumDecl ) {
    1063                 addImplicitTypedef( enumDecl );
    10641073                Mutator::mutate( enumDecl );
    10651074                return handleAggregate( enumDecl );
    10661075        }
    10671076
    1068         Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
     1077                Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) {
    10691078                Mutator::mutate( contextDecl );
    10701079                return handleAggregate( contextDecl );
    10711080        }
    10721081
    1073         DeclarationWithType * CompoundLiteral::mutate( ObjectDecl *objectDecl ) {
    1074                 storageclass = objectDecl->get_storageClass();
    1075                 DeclarationWithType * temp = Mutator::mutate( objectDecl );
    1076                 storageclass = DeclarationNode::NoStorageClass;
    1077                 return temp;
    1078         }
    1079 
    1080         Expression *CompoundLiteral::mutate( CompoundLiteralExpr *compLitExpr ) {
    1081                 // transform [storage_class] ... (struct S){ 3, ... };
    1082                 // into [storage_class] struct S temp =  { 3, ... };
    1083                 static UniqueName indexName( "_compLit" );
    1084 
    1085                 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageclass, LinkageSpec::C, 0, compLitExpr->get_type(), compLitExpr->get_initializer() );
    1086                 compLitExpr->set_type( 0 );
    1087                 compLitExpr->set_initializer( 0 );
    1088                 delete compLitExpr;
    1089                 DeclarationWithType * newtempvar = mutate( tempvar );
    1090                 addDeclaration( newtempvar );                                   // add modified temporary to current block
    1091                 return new VariableExpr( newtempvar );
    1092         }
    10931082} // namespace SymTab
    10941083
  • src/SymTab/module.mk

    r0f9e4403 rc5833e8  
    1515###############################################################################
    1616
    17 SRC += SymTab/Indexer.cc \
     17SRC += SymTab/IdTable.cc \
     18       SymTab/Indexer.cc \
    1819       SymTab/Mangler.cc \
    1920       SymTab/Validate.cc \
  • src/SynTree/AggregateDecl.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Sun May 17 23:56:39 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:28:00 2016
    13 // Update Count     : 7
     12// Last Modified On : Sat Jun 13 08:12:49 2015
     13// Update Count     : 6
    1414//
    1515
     
    6464std::string EnumDecl::typeString() const { return "enum"; }
    6565
    66 std::string TraitDecl::typeString() const { return "context"; }
     66std::string ContextDecl::typeString() const { return "context"; }
    6767
    6868// Local Variables: //
  • src/SynTree/Constant.cc

    r0f9e4403 rc5833e8  
    1616#include <iostream>
    1717#include <list>
    18 #include <string>
    1918
    2019#include "Constant.h"
     
    2928
    3029Constant::~Constant() { delete type; }
    31 
    32 Constant Constant::from( int i ) {
    33         return Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), std::to_string( i ) );
    34 }
    35 
    36 Constant Constant::from( unsigned long i ) {
    37         return Constant( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), std::to_string( i ) );
    38 }
    39 
    40 Constant Constant::from( double d ) {
    41         return Constant( new BasicType( Type::Qualifiers(), BasicType::Double ), std::to_string( d ) );
    42 }
    4330
    4431Constant *Constant::clone() const { assert( false ); return 0; }
  • src/SynTree/Constant.h

    r0f9e4403 rc5833e8  
    3232        void set_value( std::string newValue ) { value = newValue; }
    3333
    34         /// generates an integer constant of the given int
    35         static Constant from( int i );
    36         /// generates an integer constant of the given unsigned long int
    37         static Constant from( unsigned long i );
    38         /// generates a floating point constant of the given double
    39         static Constant from( double d );
    40 
    4134        virtual Constant *clone() const;
    4235        virtual void accept( Visitor &v ) { v.visit( this ); }
  • src/SynTree/Declaration.h

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:28:11 2016
    13 // Update Count     : 33
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Dec 09 14:08:22 2015
     13// Update Count     : 32
    1414//
    1515
     
    246246};
    247247
    248 class TraitDecl : public AggregateDecl {
    249         typedef AggregateDecl Parent;
    250   public:
    251         TraitDecl( const std::string &name ) : Parent( name ) {}
    252         TraitDecl( const TraitDecl &other ) : Parent( other ) {}
    253 
    254         virtual TraitDecl *clone() const { return new TraitDecl( *this ); }
     248class ContextDecl : public AggregateDecl {
     249        typedef AggregateDecl Parent;
     250  public:
     251        ContextDecl( const std::string &name ) : Parent( name ) {}
     252        ContextDecl( const ContextDecl &other ) : Parent( other ) {}
     253
     254        virtual ContextDecl *clone() const { return new ContextDecl( *this ); }
    255255        virtual void accept( Visitor &v ) { v.visit( this ); }
    256256        virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
  • src/SynTree/Expression.cc

    r0f9e4403 rc5833e8  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Expression.cc --
     7// Expression.cc -- 
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  8 17:16:23 2016
    13 // Update Count     : 40
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Dec 09 14:10:29 2015
     13// Update Count     : 34
    1414//
    1515
     
    2222
    2323#include "Type.h"
    24 #include "Initializer.h"
    2524#include "Expression.h"
    2625#include "Declaration.h"
     
    212211
    213212        os << " of ";
    214 
    215         if ( type ) {
    216                 type->print(os, indent + 2);
    217         } else {
    218                 os << "<NULL>";
    219         }
    220 
    221         os << std::endl;
    222         Expression::print( os, indent );
    223 }
    224 
    225 OffsetPackExpr::OffsetPackExpr( StructInstType *type_, Expression *aname_ ) : Expression( aname_ ), type( type_ ) {
    226         add_result( new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, false, false ) );
    227 }
    228 
    229 OffsetPackExpr::OffsetPackExpr( const OffsetPackExpr &other ) : Expression( other ), type( maybeClone( other.type ) ) {}
    230 
    231 OffsetPackExpr::~OffsetPackExpr() { delete type; }
    232 
    233 void OffsetPackExpr::print( std::ostream &os, int indent ) const {
    234         os << std::string( indent, ' ' ) << "Offset pack expression on ";
    235213
    236214        if ( type ) {
     
    444422}
    445423
    446 AsmExpr::AsmExpr( const AsmExpr & other ) : inout( maybeClone( other.inout ) ), constraint( maybeClone( other.constraint ) ), operand( maybeClone( other.operand ) ) {}
    447 
    448 
    449424void AsmExpr::print( std::ostream &os, int indent ) const {
    450425        os << "Asm Expression: " << std::endl;
     
    454429}
    455430
    456 UntypedValofExpr::UntypedValofExpr( const UntypedValofExpr & other ) : Expression( other ), body ( maybeClone( other.body ) ) {}
    457 
    458 UntypedValofExpr::~UntypedValofExpr() { delete body; }
    459 
    460431void UntypedValofExpr::print( std::ostream &os, int indent ) const {
    461432        os << std::string( indent, ' ' ) << "Valof Expression: " << std::endl;
     
    463434                get_body()->print( os, indent + 2 );
    464435}
    465 
    466 
    467 CompoundLiteralExpr::CompoundLiteralExpr( Type * type, Initializer * initializer ) : type( type ), initializer( initializer ) {
    468         add_result( type->clone() );
    469 }
    470 
    471 CompoundLiteralExpr::CompoundLiteralExpr( const CompoundLiteralExpr &other ) : Expression( other ), type( maybeClone( other.type ) ), initializer( maybeClone( other.initializer ) ) {}
    472 
    473 CompoundLiteralExpr::~CompoundLiteralExpr() {
    474         delete initializer;
    475         delete type;
    476 }
    477 
    478 void CompoundLiteralExpr::print( std::ostream &os, int indent ) const {
    479         os << "Compound Literal Expression: " << std::endl;
    480         if ( type ) type->print( os, indent + 2 );
    481         if ( initializer ) initializer->print( os, indent + 2 );
    482 }
    483 
    484436
    485437std::ostream & operator<<( std::ostream & out, Expression * expr ) {
  • src/SynTree/Expression.h

    r0f9e4403 rc5833e8  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Expression.h --
     7// Expression.h -- 
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  8 17:18:06 2016
    13 // Update Count     : 21
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Wed Dec 09 14:10:21 2015
     13// Update Count     : 19
    1414//
    1515
     
    155155};
    156156
    157 // xxx - this doesn't appear to actually be hooked in anywhere. We should use this instead of the "&&"" UntypedExpr hack
    158157class LabelAddressExpr : public Expression {
    159158  public:
    160159        LabelAddressExpr( Expression *arg );
    161         LabelAddressExpr( const LabelAddressExpr &other );
     160        LabelAddressExpr( const AddressExpr &other );
    162161        virtual ~LabelAddressExpr();
    163162
     
    252251};
    253252
    254 /// ConstantExpr represents an expression that simply refers to the value of a constant
     253/// ConstantExpr represents an expression that simply refers to the value of a constant 
    255254class ConstantExpr : public Expression {
    256255  public:
     
    360359        Type *type;
    361360        DeclarationWithType *member;
    362 };
    363 
    364 /// Expression representing a pack of field-offsets for a generic type
    365 class OffsetPackExpr : public Expression {
    366 public:
    367         OffsetPackExpr( StructInstType *type_, Expression *aname_ = 0 );
    368         OffsetPackExpr( const OffsetPackExpr &other );
    369         virtual ~OffsetPackExpr();
    370 
    371         StructInstType *get_type() const { return type; }
    372         void set_type( StructInstType *newValue ) { type = newValue; }
    373 
    374         virtual OffsetPackExpr *clone() const { return new OffsetPackExpr( *this ); }
    375         virtual void accept( Visitor &v ) { v.visit( this ); }
    376         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    377 
    378         virtual void print( std::ostream &os, int indent = 0 ) const;
    379 
    380 private:
    381         StructInstType *type;
    382361};
    383362
     
    536515  public:
    537516        AsmExpr( Expression *inout, ConstantExpr *constraint, Expression *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
    538         AsmExpr( const AsmExpr & other );
    539517        virtual ~AsmExpr() { delete inout; delete constraint; delete operand; };
    540518
     
    563541  public:
    564542        UntypedValofExpr( Statement *_body, Expression *_aname = 0 ) : Expression( _aname ), body ( _body ) {}
    565         UntypedValofExpr( const UntypedValofExpr & other );
    566         virtual ~UntypedValofExpr();
     543        virtual ~UntypedValofExpr() {}
    567544
    568545        Expression *get_value();
     
    575552  private:
    576553        Statement *body;
    577 };
    578 
    579 /// CompoundLiteralExpr represents a C99 'compound literal'
    580 class CompoundLiteralExpr : public Expression {
    581   public:
    582         CompoundLiteralExpr( Type * type, Initializer * initializer );
    583         CompoundLiteralExpr( const CompoundLiteralExpr &other );
    584         ~CompoundLiteralExpr();
    585 
    586         Type * get_type() const { return type; }
    587         void set_type( Type * t ) { type = t; }
    588 
    589         Initializer * get_initializer() const { return initializer; }
    590         void set_initializer( Initializer * i ) { initializer = i; }
    591 
    592         virtual CompoundLiteralExpr *clone() const { return new CompoundLiteralExpr( *this ); }
    593         virtual void accept( Visitor &v ) { v.visit( this ); }
    594         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    595         virtual void print( std::ostream &os, int indent = 0 ) const;
    596   private:
    597         Type * type;
    598         Initializer * initializer;
    599554};
    600555
  • src/SynTree/Mutator.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 18:05:16 2016
    13 // Update Count     : 16
     12// Last Modified On : Sat Jul 25 19:21:33 2015
     13// Update Count     : 11
    1414//
    1515
     
    6363}
    6464
    65 Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) {
     65Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) {
    6666        handleAggregateDecl( aggregateDecl );
    6767        return aggregateDecl;
     
    274274}
    275275
    276 Expression *Mutator::mutate( OffsetPackExpr *offsetPackExpr ) {
    277         mutateAll( offsetPackExpr->get_results(), *this );
    278         offsetPackExpr->set_type( maybeMutate( offsetPackExpr->get_type(), *this ) );
    279         return offsetPackExpr;
    280 }
    281 
    282276Expression *Mutator::mutate( AttrExpr *attrExpr ) {
    283277        mutateAll( attrExpr->get_results(), *this );
     
    342336}
    343337
    344 Expression *Mutator::mutate( CompoundLiteralExpr *compLitExpr ) {
    345         mutateAll( compLitExpr->get_results(), *this );
    346         compLitExpr->set_type( maybeMutate( compLitExpr->get_type(), *this ) );
    347         compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) );
    348         return compLitExpr;
    349 }
    350 
    351338Type *Mutator::mutate( VoidType *voidType ) {
    352339        mutateAll( voidType->get_forall(), *this );
     
    400387}
    401388
    402 Type *Mutator::mutate( TraitInstType *aggregateUseType ) {
     389Type *Mutator::mutate( ContextInstType *aggregateUseType ) {
    403390        handleReferenceToType( aggregateUseType );
    404391        mutateAll( aggregateUseType->get_members(), *this );
     
    434421}
    435422
    436 Type *Mutator::mutate( VarArgsType *varArgsType ) {
    437         mutateAll( varArgsType->get_forall(), *this );
    438         return varArgsType;
    439 }
    440 
    441423Initializer *Mutator::mutate( SingleInit *singleInit ) {
    442424        singleInit->set_value( singleInit->get_value()->acceptMutator( *this ) );
  • src/SynTree/Mutator.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 17:26:56 2016
    13 // Update Count     : 10
     12// Last Modified On : Thu Nov 19 22:26:16 2015
     13// Update Count     : 8
    1414//
    1515#include <cassert>
     
    3131        virtual Declaration* mutate( UnionDecl *aggregateDecl );
    3232        virtual Declaration* mutate( EnumDecl *aggregateDecl );
    33         virtual Declaration* mutate( TraitDecl *aggregateDecl );
     33        virtual Declaration* mutate( ContextDecl *aggregateDecl );
    3434        virtual TypeDecl* mutate( TypeDecl *typeDecl );
    3535        virtual Declaration* mutate( TypedefDecl *typeDecl );
     
    6767        virtual Expression* mutate( UntypedOffsetofExpr *offsetofExpr );
    6868        virtual Expression* mutate( OffsetofExpr *offsetofExpr );
    69         virtual Expression* mutate( OffsetPackExpr *offsetPackExpr );
    7069        virtual Expression* mutate( AttrExpr *attrExpr );
    7170        virtual Expression* mutate( LogicalExpr *logicalExpr );
     
    7776        virtual Expression* mutate( AsmExpr *asmExpr );
    7877        virtual Expression* mutate( UntypedValofExpr *valofExpr );
    79         virtual Expression* mutate( CompoundLiteralExpr *compLitExpr );
    8078
    8179        virtual Type* mutate( VoidType *basicType );
     
    8785        virtual Type* mutate( UnionInstType *aggregateUseType );
    8886        virtual Type* mutate( EnumInstType *aggregateUseType );
    89         virtual Type* mutate( TraitInstType *aggregateUseType );
     87        virtual Type* mutate( ContextInstType *aggregateUseType );
    9088        virtual Type* mutate( TypeInstType *aggregateUseType );
    9189        virtual Type* mutate( TupleType *tupleType );
    9290        virtual Type* mutate( TypeofType *typeofType );
    9391        virtual Type* mutate( AttrType *attrType );
    94         virtual Type* mutate( VarArgsType *varArgsType );
    9592
    9693        virtual Initializer* mutate( SingleInit *singleInit );
  • src/SynTree/ReferenceToType.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:28:51 2016
    13 // Update Count     : 5
     12// Last Modified On : Sun Jun  7 08:31:48 2015
     13// Update Count     : 4
    1414//
    1515
     
    8383std::string EnumInstType::typeString() const { return "enum"; }
    8484
    85 std::string TraitInstType::typeString() const { return "context"; }
     85std::string ContextInstType::typeString() const { return "context"; }
    8686
    87 TraitInstType::TraitInstType( const TraitInstType &other ) : Parent( other ) {
     87ContextInstType::ContextInstType( const ContextInstType &other ) : Parent( other ) {
    8888        cloneAll( other.members, members );
    8989}
    9090
    91 TraitInstType::~TraitInstType() {
     91ContextInstType::~ContextInstType() {
    9292        deleteAll( members );
    9393}
  • src/SynTree/Statement.cc

    r0f9e4403 rc5833e8  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Statement.cc --
     7// Statement.cc -- 
    88//
    99// Author           : Richard C. Bilson
     
    3636ExprStmt::ExprStmt( std::list<Label> _labels, Expression *_expr ) : Statement( _labels ), expr( _expr ) {}
    3737
    38 ExprStmt::ExprStmt( const ExprStmt &other ) : Statement( other ), expr( maybeClone( other.expr ) ) {}
    39 
    40 ExprStmt::~ExprStmt() {
    41         delete expr;
    42 }
     38ExprStmt::~ExprStmt() {}
    4339
    4440void ExprStmt::print( std::ostream &os, int indent ) const {
    4541        os << string( indent, ' ' ) << "Expression Statement:" << endl;
    4642        expr->print( os, indent + 2 );
    47 }
     43} 
    4844
    4945
    5046AsmStmt::AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ) : Statement( labels ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ), gotolabels( gotolabels ) {}
    51 
    52 AsmStmt::AsmStmt( const AsmStmt & other ) : Statement( other ), voltile( other.voltile ), instruction( maybeClone( other.instruction ) ), gotolabels( other.gotolabels ) {
    53   cloneAll( other.output, output );
    54   cloneAll( other.input, input );
    55   cloneAll( other.clobber, clobber );
    56 }
    5747
    5848AsmStmt::~AsmStmt() {
     
    7060                os << endl << std::string( indent, ' ' ) << "output: " << endl;
    7161                printAll( output, os, indent + 2 );
    72         } // if
     62        } // if 
    7363        if ( ! input.empty() ) {
    7464                os << std::string( indent, ' ' ) << "input: " << endl << std::string( indent, ' ' );
     
    7969                printAll( clobber, os, indent + 2 );
    8070        } // if
    81 }
     71} 
    8272
    8373
     
    10393ReturnStmt::ReturnStmt( std::list<Label> labels, Expression *_expr, bool throwP ) : Statement( labels ), expr( _expr ), isThrow( throwP ) {}
    10494
    105 ReturnStmt::ReturnStmt( const ReturnStmt & other ) : Statement( other ), expr( maybeClone( other.expr ) ), isThrow( other.isThrow ) {}
    106 
    10795ReturnStmt::~ReturnStmt() {
    10896        delete expr;
     
    118106        Statement( _labels ), condition( _condition ), thenPart( _thenPart ), elsePart( _elsePart ) {}
    119107
    120 IfStmt::IfStmt( const IfStmt & other ) :
    121         Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) {}
    122 
    123108IfStmt::~IfStmt() {}
    124109
     
    138123SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_branches ):
    139124        Statement( _labels ), condition( _condition ), branches( _branches ) {
    140 }
    141 
    142 SwitchStmt::SwitchStmt( const SwitchStmt & other ):
    143         Statement( other ), condition( maybeClone( other.condition ) ) {
    144         cloneAll( other.branches, branches );
    145125}
    146126
     
    165145}
    166146
    167 CaseStmt::CaseStmt( std::list<Label> _labels, Expression *_condition, std::list<Statement *> &_statements, bool deflt ) throw ( SemanticError ) :
     147CaseStmt::CaseStmt( std::list<Label> _labels, Expression *_condition, std::list<Statement *> &_statements, bool deflt ) throw ( SemanticError ) : 
    168148        Statement( _labels ), condition( _condition ), stmts( _statements ), _isDefault( deflt ) {
    169149        if ( isDefault() && condition != 0 )
    170150                throw SemanticError("default with conditions");
    171 }
    172 
    173 CaseStmt::CaseStmt( const CaseStmt & other ) :
    174         Statement( other ), condition( maybeClone(other.condition ) ), _isDefault( other._isDefault ) {
    175         cloneAll( other.stmts, stmts );
    176151}
    177152
     
    206181}
    207182
    208 ChooseStmt::ChooseStmt( const ChooseStmt & other ):
    209         Statement( other ), condition( maybeClone( other.condition ) ) {
    210                 cloneAll( other.branches, branches );
    211 }
    212 
    213183ChooseStmt::~ChooseStmt() {
    214184        delete condition;
     
    238208}
    239209
    240 WhileStmt::WhileStmt( const WhileStmt & other ):
    241         Statement( other ), condition( maybeClone( other.condition ) ), body( maybeClone( other.body ) ), isDoWhile( other.isDoWhile ) {
    242 }
    243 
    244210WhileStmt::~WhileStmt() {
    245211        delete body;
     
    257223ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization_, Expression *condition_, Expression *increment_, Statement *body_ ):
    258224        Statement( labels ), initialization( initialization_ ), condition( condition_ ), increment( increment_ ), body( body_ ) {
    259 }
    260 
    261 ForStmt::ForStmt( const ForStmt & other ):
    262         Statement( other ), condition( maybeClone( other.condition ) ), increment( maybeClone( other.increment ) ), body( maybeClone( other.body ) ) {
    263                 cloneAll( other.initialization, initialization );
    264 
    265225}
    266226
     
    281241        os << string( indent, ' ' ) << "For Statement" << endl ;
    282242
    283         os << string( indent + 2, ' ' ) << "initialization: \n";
     243        os << string( indent + 2, ' ' ) << "initialization: \n"; 
    284244        for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) {
    285245                (*it)->print( os, indent + 4 );
    286246        }
    287247
    288         os << "\n" << string( indent + 2, ' ' ) << "condition: \n";
     248        os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 
    289249        if ( condition != 0 )
    290250                condition->print( os, indent + 4 );
    291251
    292         os << "\n" << string( indent + 2, ' ' ) << "increment: \n";
     252        os << "\n" << string( indent + 2, ' ' ) << "increment: \n"; 
    293253        if ( increment != 0 )
    294254                increment->print( os, indent + 4 );
    295255
    296         os << "\n" << string( indent + 2, ' ' ) << "statement block: \n";
     256        os << "\n" << string( indent + 2, ' ' ) << "statement block: \n"; 
    297257        if ( body != 0 )
    298258                body->print( os, indent + 4 );
     
    305265}
    306266
    307 TryStmt::TryStmt( const TryStmt &other ) : Statement( other ), block( maybeClone( other.block ) ), finallyBlock( maybeClone( other.finallyBlock ) ) {
    308         cloneAll( other.handlers, handlers );
     267TryStmt::TryStmt( const TryStmt &other ) : Statement( other.labels ) {
     268        block = other.block;
     269        std::copy( other.handlers.begin(), other.handlers.end(), back_inserter( handlers ) );
     270        finallyBlock = other.finallyBlock;
    309271}
    310272
     
    332294CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest ) :
    333295        Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest ) {
    334 }
    335 
    336 CatchStmt::CatchStmt( const CatchStmt & other ) :
    337         Statement( other ), decl ( maybeClone( other.decl ) ), body( maybeClone( other.body ) ), catchRest ( other.catchRest ) {
    338296}
    339297
     
    361319}
    362320
    363 FinallyStmt::FinallyStmt( const FinallyStmt & other ) : Statement( other ), block( maybeClone( other.block ) ) {
    364 }
    365 
    366321FinallyStmt::~FinallyStmt() {
    367322        delete block;
     
    376331NullStmt::NullStmt( std::list<Label> labels ) : CompoundStmt( labels ) {}
    377332NullStmt::NullStmt() : CompoundStmt( std::list<Label>() ) {}
     333NullStmt::~NullStmt() {}
    378334
    379335void NullStmt::print( std::ostream &os, int indent ) const {
  • src/SynTree/Statement.h

    r0f9e4403 rc5833e8  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Statement.h --
     7// Statement.h -- 
    88//
    99// Author           : Richard C. Bilson
     
    5757  public:
    5858        ExprStmt( std::list<Label> labels, Expression *expr );
    59         ExprStmt( const ExprStmt &other );
    6059        virtual ~ExprStmt();
    6160
     
    7473  public:
    7574        AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> input, std::list<Expression *> output, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels );
    76         AsmStmt( const AsmStmt &other );
    7775        virtual ~AsmStmt();
    7876
     
    105103  public:
    106104        IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart );
    107         IfStmt( const IfStmt &other );
    108105        virtual ~IfStmt();
    109106
     
    114111        Statement *get_elsePart() { return elsePart; }
    115112        void set_elsePart( Statement *newValue ) { elsePart = newValue; }
    116 
     113       
    117114        virtual IfStmt *clone() const { return new IfStmt( *this ); }
    118115        virtual void accept( Visitor &v ) { v.visit( this ); }
     
    128125  public:
    129126        SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches );
    130         SwitchStmt( const SwitchStmt &other );
    131127        virtual ~SwitchStmt();
    132128
     
    150146  public:
    151147        ChooseStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &branches );
    152         ChooseStmt( const ChooseStmt &other );
    153148        virtual ~ChooseStmt();
    154149
     
    182177class CaseStmt : public Statement {
    183178  public:
    184         CaseStmt( std::list<Label> labels, Expression *conditions,
     179        CaseStmt( std::list<Label> labels, Expression *conditions, 
    185180              std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
    186         CaseStmt( const CaseStmt &other );
    187181        virtual ~CaseStmt();
    188182
     
    198192        std::list<Statement *> &get_statements() { return stmts; }
    199193        void set_statements( std::list<Statement *> &newValue ) { stmts = newValue; }
    200 
     194       
    201195        virtual void accept( Visitor &v ) { v.visit( this ); }
    202196        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    214208        WhileStmt( std::list<Label> labels, Expression *condition,
    215209               Statement *body, bool isDoWhile = false );
    216         WhileStmt( const WhileStmt &other );
    217210        virtual ~WhileStmt();
    218211
     
    223216        bool get_isDoWhile() { return isDoWhile; }
    224217        void set_isDoWhile( bool newValue ) { isDoWhile = newValue; }
    225 
     218       
    226219        virtual WhileStmt *clone() const { return new WhileStmt( *this ); }
    227220        virtual void accept( Visitor &v ) { v.visit( this ); }
     
    238231        ForStmt( std::list<Label> labels, std::list<Statement *> initialization,
    239232             Expression *condition = 0, Expression *increment = 0, Statement *body = 0 );
    240         ForStmt( const ForStmt &other );
    241233        virtual ~ForStmt();
    242234
     
    249241        Statement *get_body() { return body; }
    250242        void set_body( Statement *newValue ) { body = newValue; }
    251 
     243       
    252244        virtual ForStmt *clone() const { return new ForStmt( *this ); }
    253245        virtual void accept( Visitor &v ) { v.visit( this ); }
     
    267259        BranchStmt( std::list<Label> labels, Label target, Type ) throw (SemanticError);
    268260        BranchStmt( std::list<Label> labels, Expression *computedTarget, Type ) throw (SemanticError);
     261        virtual ~BranchStmt() {}
    269262
    270263        Label get_originalTarget() { return originalTarget; }
    271264        Label get_target() { return target; }
    272265        void set_target( Label newValue ) { target = newValue; }
    273 
     266       
    274267        Expression *get_computedTarget() { return computedTarget; }
    275268        void set_target( Expression * newValue ) { computedTarget = newValue; }
     
    293286  public:
    294287        ReturnStmt( std::list<Label> labels, Expression *expr, bool throwP = false );
    295         ReturnStmt( const ReturnStmt &other );
    296288        virtual ~ReturnStmt();
    297289
    298290        Expression *get_expr() { return expr; }
    299291        void set_expr( Expression *newValue ) { expr = newValue; }
    300 
     292       
    301293        virtual ReturnStmt *clone() const { return new ReturnStmt( *this ); }
    302294        virtual void accept( Visitor &v ) { v.visit( this ); }
     
    313305        NullStmt();
    314306        NullStmt( std::list<Label> labels );
     307        virtual ~NullStmt();
    315308
    316309        virtual NullStmt *clone() const { return new NullStmt( *this ); }
     
    318311        virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    319312        virtual void print( std::ostream &os, int indent = 0 ) const;
    320 
    321   private:
    322 };
    323 
    324 class TryStmt : public Statement {
     313       
     314  private:
     315};
     316
     317class TryStmt : public Statement { 
    325318  public:
    326319        TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<Statement *> &handlers, FinallyStmt *finallyBlock = 0 );
     
    339332        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    340333        virtual void print( std::ostream &os, int indent = 0 ) const;
    341 
     334       
    342335  private:
    343336        CompoundStmt *block;
    344337        std::list<Statement *> handlers;
    345338        FinallyStmt *finallyBlock;
    346 };
     339}; 
    347340
    348341class CatchStmt : public Statement {
    349342  public:
    350343        CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false );
    351         CatchStmt( const CatchStmt &other );
    352344        virtual ~CatchStmt();
    353345
     
    357349        Statement *get_body() { return body; }
    358350        void set_body( Statement *newValue ) { body = newValue; }
    359 
     351       
    360352        virtual CatchStmt *clone() const { return new CatchStmt( *this ); }
    361353        virtual void accept( Visitor &v ) { v.visit( this ); }
    362354        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    363355        virtual void print( std::ostream &os, int indent = 0 ) const;
    364 
     356       
    365357  private:
    366358        Declaration *decl;
     
    369361};
    370362
    371 class FinallyStmt : public Statement {
     363class FinallyStmt : public Statement { 
    372364  public:
    373365        FinallyStmt( std::list<Label> labels, CompoundStmt *block );
    374         FinallyStmt( const FinallyStmt &other );
    375366        virtual ~FinallyStmt();
    376367
    377368        CompoundStmt *get_block() const { return block; }
    378369        void set_block( CompoundStmt *newValue ) { block = newValue; }
    379 
     370       
    380371        virtual FinallyStmt *clone() const { return new FinallyStmt( *this ); }
    381372        virtual void accept( Visitor &v ) { v.visit( this ); }
     
    384375  private:
    385376        CompoundStmt *block;
    386 };
     377}; 
    387378
    388379
  • src/SynTree/SynTree.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 16:47:44 2016
    13 // Update Count     : 5
     12// Last Modified On : Thu Jul 23 23:25:04 2015
     13// Update Count     : 3
    1414//
    1515
     
    3030class UnionDecl;
    3131class EnumDecl;
    32 class TraitDecl;
     32class ContextDecl;
    3333class NamedTypeDecl;
    3434class TypeDecl;
     
    7272class UntypedOffsetofExpr;
    7373class OffsetofExpr;
    74 class OffsetPackExpr;
    7574class AttrExpr;
    7675class LogicalExpr;
     
    8281class AsmExpr;
    8382class UntypedValofExpr;
    84 class CompoundLiteralExpr;
    8583
    8684class Type;
     
    9492class UnionInstType;
    9593class EnumInstType;
    96 class TraitInstType;
     94class ContextInstType;
    9795class TypeInstType;
    9896class TupleType;
    9997class TypeofType;
    10098class AttrType;
    101 class VarArgsType;
    10299
    103100class Initializer;
  • src/SynTree/Type.h

    r0f9e4403 rc5833e8  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:29:08 2016
    13 // Update Count     : 21
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Fri Dec 18 14:46:18 2015
     13// Update Count     : 18
    1414//
    1515
     
    296296};
    297297
    298 class TraitInstType : public ReferenceToType {
     298class ContextInstType : public ReferenceToType {
    299299        typedef ReferenceToType Parent;
    300300  public:
    301         TraitInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
    302         TraitInstType( const TraitInstType &other );
    303         ~TraitInstType();
     301        ContextInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
     302        ContextInstType( const ContextInstType &other );
     303        ~ContextInstType();
    304304
    305305        std::list< Declaration* >& get_members() { return members; }
    306306
    307         virtual TraitInstType *clone() const { return new TraitInstType( *this ); }
     307        virtual ContextInstType *clone() const { return new ContextInstType( *this ); }
    308308        virtual void accept( Visitor &v ) { v.visit( this ); }
    309309        virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
     
    400400};
    401401
    402 /// Represents the GCC built-in varargs type
    403 class VarArgsType : public Type {
    404   public:
    405         VarArgsType();
    406         VarArgsType( Type::Qualifiers tq );
    407 
    408         virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
    409         virtual void accept( Visitor &v ) { v.visit( this ); }
    410         virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    411         virtual void print( std::ostream &os, int indent = 0 ) const;
    412 };
    413 
    414402inline Type::Qualifiers &Type::Qualifiers::operator+=( const Type::Qualifiers &other ) {
    415403        isConst |= other.isConst;
  • src/SynTree/TypeSubstitution.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:29:15 2016
    13 // Update Count     : 3
     12// Last Modified On : Mon May 18 11:10:04 2015
     13// Update Count     : 2
    1414//
    1515
     
    190190}
    191191
    192 Type * TypeSubstitution::mutate( TraitInstType *aggregateUseType ) {
     192Type * TypeSubstitution::mutate( ContextInstType *aggregateUseType ) {
    193193        return handleType( aggregateUseType );
    194194}
     
    196196Type * TypeSubstitution::mutate( TupleType *tupleType ) {
    197197        return handleType( tupleType );
    198 }
    199 
    200 Type * TypeSubstitution::mutate( VarArgsType *varArgsType ) {
    201         return handleType( varArgsType );
    202198}
    203199
  • src/SynTree/TypeSubstitution.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 17:33:19 2016
    13 // Update Count     : 2
     12// Last Modified On : Mon May 18 11:12:30 2015
     13// Update Count     : 1
    1414//
    1515
     
    7272        virtual Type* mutate(UnionInstType *aggregateUseType);
    7373        virtual Type* mutate(EnumInstType *aggregateUseType);
    74         virtual Type* mutate(TraitInstType *aggregateUseType);
     74        virtual Type* mutate(ContextInstType *aggregateUseType);
    7575        virtual Type* mutate(TupleType *tupleType);
    76         virtual Type* mutate(VarArgsType *varArgsType);
    7776       
    7877        // TODO: worry about traversing into a forall-qualified function type or type decl with assertions
  • src/SynTree/Visitor.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 18:05:13 2016
    13 // Update Count     : 18
     12// Last Modified On : Fri Jul 24 16:11:05 2015
     13// Update Count     : 15
    1414//
    1515
     
    5656}
    5757
    58 void Visitor::visit( TraitDecl *aggregateDecl ) {
     58void Visitor::visit( ContextDecl *aggregateDecl ) {
    5959        visit( static_cast< AggregateDecl* >( aggregateDecl ) );
    6060}
     
    230230}
    231231
    232 void Visitor::visit( OffsetPackExpr *offsetPackExpr ) {
    233         acceptAll( offsetPackExpr->get_results(), *this );
    234         maybeAccept( offsetPackExpr->get_type(), *this );
    235 }
    236 
    237232void Visitor::visit( AttrExpr *attrExpr ) {
    238233        acceptAll( attrExpr->get_results(), *this );
     
    289284}
    290285
    291 void Visitor::visit( CompoundLiteralExpr *compLitExpr ) {
    292         acceptAll( compLitExpr->get_results(), *this );
    293         maybeAccept( compLitExpr->get_type(), *this );
    294         maybeAccept( compLitExpr->get_initializer(), *this );
    295 }
    296 
    297286void Visitor::visit( VoidType *voidType ) {
    298287        acceptAll( voidType->get_forall(), *this );
     
    337326}
    338327
    339 void Visitor::visit( TraitInstType *aggregateUseType ) {
     328void Visitor::visit( ContextInstType *aggregateUseType ) {
    340329        visit( static_cast< ReferenceToType * >( aggregateUseType ) );
    341330        acceptAll( aggregateUseType->get_members(), *this );
     
    366355}
    367356
    368 void Visitor::visit( VarArgsType *varArgsType ) {
    369         acceptAll( varArgsType->get_forall(), *this );
    370 }
    371 
    372357void Visitor::visit( SingleInit *singleInit ) {
    373358        singleInit->get_value()->accept( *this );
  • src/SynTree/Visitor.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Apr  1 17:26:55 2016
    13 // Update Count     : 7
     12// Last Modified On : Mon Jan 25 21:20:44 2016
     13// Update Count     : 5
    1414//
    1515
     
    3131        virtual void visit( UnionDecl *aggregateDecl );
    3232        virtual void visit( EnumDecl *aggregateDecl );
    33         virtual void visit( TraitDecl *aggregateDecl );
     33        virtual void visit( ContextDecl *aggregateDecl );
    3434        virtual void visit( TypeDecl *typeDecl );
    3535        virtual void visit( TypedefDecl *typeDecl );
     
    6767        virtual void visit( UntypedOffsetofExpr *offsetofExpr );
    6868        virtual void visit( OffsetofExpr *offsetofExpr );
    69         virtual void visit( OffsetPackExpr *offsetPackExpr );
    7069        virtual void visit( AttrExpr *attrExpr );
    7170        virtual void visit( LogicalExpr *logicalExpr );
     
    7776        virtual void visit( AsmExpr *asmExpr );
    7877        virtual void visit( UntypedValofExpr *valofExpr );
    79         virtual void visit( CompoundLiteralExpr *compLitExpr );
    8078
    8179        virtual void visit( VoidType *basicType );
     
    8785        virtual void visit( UnionInstType *aggregateUseType );
    8886        virtual void visit( EnumInstType *aggregateUseType );
    89         virtual void visit( TraitInstType *aggregateUseType );
     87        virtual void visit( ContextInstType *aggregateUseType );
    9088        virtual void visit( TypeInstType *aggregateUseType );
    9189        virtual void visit( TupleType *tupleType );
    9290        virtual void visit( TypeofType *typeofType );
    9391        virtual void visit( AttrType *attrType );
    94         virtual void visit( VarArgsType *varArgsType );
    9592
    9693        virtual void visit( SingleInit *singleInit );
  • src/SynTree/module.mk

    r0f9e4403 rc5833e8  
    2525       SynTree/TypeofType.cc \
    2626       SynTree/AttrType.cc \
    27        SynTree/VarArgsType.cc \
    2827       SynTree/Constant.cc \
    2928       SynTree/Expression.cc \
     
    4645       SynTree/Visitor.cc \
    4746       SynTree/Mutator.cc \
     47       SynTree/CodeGenVisitor.cc \
    4848       SynTree/TypeSubstitution.cc
    4949
  • src/Tuples/FlattenTuple.cc

    r0f9e4403 rc5833e8  
    4949        void FlattenTuple::CollectArgs::visit( UntypedOffsetofExpr *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5050        void FlattenTuple::CollectArgs::visit( OffsetofExpr        *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    51         void FlattenTuple::CollectArgs::visit( OffsetPackExpr      *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5251        void FlattenTuple::CollectArgs::visit( AttrExpr            *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
    5352        void FlattenTuple::CollectArgs::visit( LogicalExpr         *expr )  {  currentArgs.insert( currentArgs.end(), expr );  }
  • src/Tuples/FlattenTuple.h

    r0f9e4403 rc5833e8  
    4545                        virtual void visit( UntypedOffsetofExpr * );
    4646                        virtual void visit( OffsetofExpr * );
    47                         virtual void visit( OffsetPackExpr * );
    4847                        virtual void visit( AttrExpr * );
    4948                        virtual void visit( LogicalExpr * );
  • src/driver/Makefile.in

    r0f9e4403 rc5833e8  
    196196          esac; \
    197197        done; \
    198         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \
     198        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \
    199199        $(am__cd) $(top_srcdir) && \
    200           $(AUTOMAKE) --foreign src/driver/Makefile
     200          $(AUTOMAKE) --gnu src/driver/Makefile
    201201.PRECIOUS: Makefile
    202202Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/driver/cfa.cc

    r0f9e4403 rc5833e8  
    1010// Created On       : Tue Aug 20 13:44:49 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr  6 14:04:22 2016
    13 // Update Count     : 132
     12// Last Modified On : Thu Jan 28 18:24:06 2016
     13// Update Count     : 127
    1414//
    1515
     
    165165                                nargs += 1;
    166166                        } else if ( prefix( arg, "-std=" ) ) {
    167                                 std_flag = true;                                                // -std=XX provided
     167                                std_flag = true;                                                // std=XX provided
    168168                                args[nargs] = argv[i];                                  // pass the argument along
    169169                                nargs += 1;
     
    307307                nargs += 1;
    308308                if ( ! std_flag ) {                                                             // default c99, if none specified
    309                         args[nargs] = "-std=gnu99";
     309                        args[nargs] = "-std=c99";
    310310                        nargs += 1;
    311311                } // if
  • src/examples/Makefile.in

    r0f9e4403 rc5833e8  
    189189          esac; \
    190190        done; \
    191         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
     191        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
    192192        $(am__cd) $(top_srcdir) && \
    193           $(AUTOMAKE) --foreign src/examples/Makefile
     193          $(AUTOMAKE) --gnu src/examples/Makefile
    194194.PRECIOUS: Makefile
    195195Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
  • src/examples/abs.c

    r0f9e4403 rc5833e8  
    1010// Created On       : Thu Jan 28 18:26:16 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 15:07:26 2016
    13 // Update Count     : 51
     12// Last Modified On : Wed Feb 17 09:32:04 2016
     13// Update Count     : 44
    1414//
    1515
     
    2020        char ch = -65;
    2121        sout | "char\t\t\t"                                     | ch     | "\tabs " | abs( ch ) | endl;
    22         sout | "signed int\t\t"                         | -65    | "\tabs" | abs( -65 ) | endl;
    23         sout | "signed long int\t\t"            | -65l   | "\tabs" | abs( -65l ) | endl;
    24         sout | "signed long long int\t"         | -65ll  | "\tabs" | abs( -65ll ) | endl;
    25         sout | "float\t\t\t"                            | -65.0f | "\tabs" | abs( -65.0f ) | endl;
    26         sout | "double\t\t\t"                           | -65.0  | "\tabs" | abs( -65.0 ) | endl;
    27         sout | "long double\t\t"                        | -65.0l | "\tabs" | abs( -65.0l ) | endl;
    28         sout | "float _Complex\t\t"                     | -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl;
    29         sout | "double _Complex\t\t"            | -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl;
    30         sout | "long double _Complex\t"         | -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl;
     22        sout | "signed int\t\t"                         | -65    | "\tabs " | abs( -65 ) | endl;
     23        sout | "signed long int\t\t"            | -65l   | "\tabs " | abs( -65l ) | endl;
     24        sout | "signed long long int\t"         | -65ll  | "\tabs " | abs( -65ll ) | endl;
     25        sout | "float\t\t\t"                            | -65.0f | "\tabs " | abs( -65.0f ) | endl;
     26        sout | "double\t\t\t"                           | -65.0  | "\tabs " | abs( -65.0 ) | endl;
     27        sout | "long double\t\t"                        | -65.0l | "\tabs " | abs( -65.0l ) | endl;
     28        sout | "float _Complex\t\t"                     | -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl;
     29        sout | "double _Complex\t\t"            | -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl;
     30        sout | "long double _Complex\t"         | -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl;
    3131} // main
    3232
  • src/examples/array.c

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 18:13:52 2016
    13 // Update Count     : 3
     12// Last Modified On : Wed May 27 18:10:13 2015
     13// Update Count     : 2
    1414//
    1515
    1616#include "array.h"
    1717
    18 /// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
     18/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
    1919/// [ array_iterator begin, array_iterator end ]
    2020/// get_iterators( array_type array )
     
    2525
    2626// The first element is always at index 0.
    27 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
     27forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
    2828elt_type * begin( array_type array ) {
    2929        return &array[ 0 ];
     
    3131
    3232// The end iterator should point one past the last element.
    33 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
     33forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
    3434elt_type * end( array_type array ) {
    3535        return &array[ last( array ) ] + 1;
  • src/examples/array.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 18:13:35 2016
    13 // Update Count     : 5
     12// Last Modified On : Tue Jan 26 17:09:29 2016
     13// Update Count     : 3
    1414//
    1515
     
    2121// An array has contiguous elements accessible in any order using integer indicies. The first
    2222// element has index 0.
    23 trait array( otype array_type, otype elt_type ) {
     23context array( type array_type, type elt_type ) {
    2424        lvalue elt_type ?[?]( array_type, int );
    2525};
    2626
    2727// A bounded array is an array that carries its maximum index with it.
    28 trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) {
     28context bounded_array( type array_type, type elt_type | array( array_type, elt_type ) ) {
    2929        int last( array_type );
    3030};
     
    3434typedef int array_iterator;
    3535
    36 /// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
     36/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
    3737/// [ array_iterator begin, array_iterator end ] get_iterators( array_type );
    3838
     
    4040// A bounded array can be iterated over by using a pointer to the element type. These functions
    4141// return iterators corresponding to the first element and the one-past-the-end element, STL-style.
    42 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
     42forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
    4343elt_type *begin( array_type );
    4444
    45 forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
     45forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
    4646elt_type *end( array_type );
    4747
  • src/examples/ato.c

    r0f9e4403 rc5833e8  
    1111// Created On       : Thu Feb  4 08:10:57 2016
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Mon Feb 29 17:57:35 2016
    14 // Update Count     : 44
     13// Last Modified On : Wed Feb 17 11:44:03 2016
     14// Update Count     : 42
    1515//
    1616
     
    2424int main( void ) {
    2525        int i = ato( "-123" );
    26         sout | i | "-123" | endl;
     26        sout | i | ' ' | "-123" | endl;
    2727        unsigned int ui = ato( "123" );
    28         sout | ui | "123" | endl;
     28        sout | ui | ' ' | "123" | endl;
    2929        long int li = ato( "-123" );
    30         sout | li | "-123" | endl;
     30        sout | li | ' ' | "-123" | endl;
    3131        unsigned long int uli = ato( "123" );
    32         sout | uli | "123" | endl;
     32        sout | uli | ' ' | "123" | endl;
    3333        long long int lli = ato( "-123" );
    34         sout | lli | "-123" | endl;
     34        sout | lli | ' ' | "-123" | endl;
    3535        unsigned long long int ulli = ato( "123" );
    36         sout | ulli | "123" | endl;
     36        sout | ulli | ' ' | "123" | endl;
    3737        float f = ato( "-123.456" );
    38         sout | f | "-123.456" | endl;
     38        sout | f | ' ' | "-123.456" | endl;
    3939        double d = ato( "-123.4567890123456" );
    40         sout | d | "-123.4567890123456" | endl;
     40        sout | d | ' ' | "-123.4567890123456" | endl;
    4141        long double ld = ato( "-123.45678901234567890123456789" );
    42         sout | ld | "-123.45678901234567890123456789" | endl;
     42        sout | ld | ' ' | "-123.45678901234567890123456789" | endl;
    4343        float _Complex fc = ato( "-123.456-123.456i" );
    44         sout | fc | "-123.456-123.456i" | endl;
     44        sout | fc | ' ' | "-123.456-123.456i" | endl;
    4545        double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" );
    46         sout | dc | "-123.4567890123456+123.4567890123456i" | endl;
     46        sout | dc | ' ' | "-123.4567890123456+123.4567890123456i" | endl;
    4747        long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" );
    48         sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
     48        sout | ldc | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
    4949        long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" );
    50         sout | ldc2 | "123.45678901234-123.4567890i" | endl;
     50        sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
    5151} // main
    5252
  • src/examples/constants.c

    r0f9e4403 rc5833e8  
    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/ctxts.c

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 18:10:21 2016
    13 // Update Count     : 3
     12// Last Modified On : Wed May 27 18:11:19 2015
     13// Update Count     : 2
    1414//
    1515
    16 trait has_f( type T ) {
     16context has_f( type T ) {
    1717        T f( T );
    1818};
    1919
    20 trait has_g( type U | has_f( U ) ) {
     20context has_g( type U | has_f( U ) ) {
    2121        U g( U );
    2222};
  • src/examples/fstream_test.c

    r0f9e4403 rc5833e8  
    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 Feb 17 11:45:43 2016
     13// Update Count     : 43
    1414//
    1515
     
    1818int main( void ) {
    1919        int nombre;
    20         sout | "Entrez un nombre, s'il vous plaît:" | endl;
     20        sout | "Entrez un nombre, s'il vous plaît:\n";
    2121        sin  | &nombre;
    22         sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl;
    23         sout | "nombre" | nombre | "est"
    24                  | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de")
    25                  | "zéro" | endl;
     22        sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl;
     23        sout | "nombre " | nombre | " est "
     24                 | (nombre > 0 ? "plus grand que" :
     25                   nombre == 0 ? "égal à" : "moins de")
     26                 | " zéro" | endl;
    2627
    27         sout | "Entrez trois nombres, s'il vous plaît: " | endl;
     28        sout | "Entrez trois nombres, s'il vous plaît:\n";
    2829        int i, j, k;
    2930        sin  | &i | &j | &k;
    30         sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k | endl;
     31        sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl;
     32
     33        sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl;
    3134}
    3235
  • src/examples/hello.c

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Feb 29 18:06:17 2016
    13 // Update Count     : 10
     12// Last Modified On : Wed Feb 17 12:11:45 2016
     13// Update Count     : 8
    1414//
    1515
     
    1717
    1818int main() {
    19         sout | "Bonjour au monde!" | endl;
     19        sout | "Bonjour au monde!\n";
    2020}
    2121
  • src/examples/huge.c

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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 : Wed Feb 17 12:17:32 2016
     13// Update Count     : 10
    1414//
    1515
    1616#include <fstream>
    1717
    18 forall( otype T )
     18forall( type T )
    1919T identity( T t ) {
    2020        return t;
  • src/examples/includes.c

    r0f9e4403 rc5833e8  
    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/index.h

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 18:10:46 2016
    13 // Update Count     : 2
     12// Last Modified On : Wed May 27 18:17:31 2015
     13// Update Count     : 1
    1414//
    1515
    16 trait index( type T ) {
     16context index( type T ) {
    1717        T ?+?( T, T );
    1818        T ?-?( T, T );
  • src/examples/it_out.c

    r0f9e4403 rc5833e8  
    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 May 27 18:41:23 2015
     13// Update Count     : 4
    1414//
    1515
    1616typedef unsigned long streamsize_type;
    1717
    18 trait ostream( dtype os_type ) {
     18context ostream( dtype os_type ) {
    1919        os_type *write( os_type *, const char *, streamsize_type );
    2020        int fail( os_type * );
    2121};
    2222
    23 trait writeable( otype T ) {
     23context writeable( type T ) {
    2424        forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T );
    2525};
     
    2929forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * );
    3030
    31 trait istream( dtype is_type ) {
     31context istream( dtype is_type ) {
    3232        is_type *read( is_type *, char *, streamsize_type );
    3333        is_type *unread( is_type *, char );
     
    3636};
    3737
    38 trait readable( otype T ) {
     38context 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 ) {
     45context 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

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

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Feb 29 23:45:16 2016
    13 // Update Count     : 49
     12// Last Modified On : Wed Feb 17 12:17:53 2016
     13// Update Count     : 47
    1414//
    1515
     
    2323
    2424        sout | "char\t\t\t"                                     | 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl;
    25         sout | "signed int\t\t"                         | 4 | 3 | "\tmin" | min( 4, 3 ) | endl;
    26         sout | "unsigned int\t\t"                       | 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;
    27         sout | "signed long int\t\t"            | 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;
    28         sout | "unsigned long int\t"            | 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;
    29         sout | "signed long long int\t"         | 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;
    30         sout | "unsigned long long int\t"       | 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;
    31         sout | "float\t\t\t"                            | 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;
    32         sout | "double\t\t\t"                           | 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;
    33         sout | "long double\t\t"                        | 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;
     25        sout | "signed int\t\t"                         | 4 | ' ' | 3 | "\tmin " | min( 4, 3 ) | endl;
     26        sout | "unsigned int\t\t"                       | 4u | ' ' | 3u | "\tmin " | min( 4u, 3u ) | endl;
     27        sout | "signed long int\t\t"            | 4l | ' ' | 3l | "\tmin " | min( 4l, 3l ) | endl;
     28        sout | "unsigned long int\t"            | 4ul | ' ' | 3ul | "\tmin " | min( 4ul, 3ul ) | endl;
     29        sout | "signed long long int\t"         | 4ll | ' ' | 3ll | "\tmin " | min( 4ll, 3ll ) | endl;
     30        sout | "unsigned long long int\t"       | 4ull | ' ' | 3ull | "\tmin " | min( 4ull, 3ull ) | endl;
     31        sout | "float\t\t\t"                            | 4.0f | ' ' | 3.1f | "\tmin " | min( 4.0f, 3.1f ) | endl;
     32        sout | "double\t\t\t"                           | 4.0 | ' ' | 3.1 | "\tmin " | min( 4.0, 3.1 ) | endl;
     33        sout | "long double\t\t"                        | 4.0l | ' ' | 3.1l | "\tmin " | min( 4.0l, 3.1l ) | endl;
    3434
    3535        sout | endl;
    3636
    3737        sout | "char\t\t\t"                                     | 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl;
    38         sout | "signed int\t\t"                         | 4 | 3 | "\tmax" | max( 4, 3 ) | endl;
    39         sout | "unsigned int\t\t"                       | 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;
    40         sout | "signed long int\t\t"            | 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;
    41         sout | "unsigned long int\t"            | 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;
    42         sout | "signed long long int\t"         | 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;
    43         sout | "unsigned long long int\t"       | 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;
    44         sout | "float\t\t\t"                            | 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;
    45         sout | "double\t\t\t"                           | 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;
    46         sout | "long double\t\t"                        | 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;
     38        sout | "signed int\t\t"                         | 4 | ' ' | 3 | "\tmax " | max( 4, 3 ) | endl;
     39        sout | "unsigned int\t\t"                       | 4u | ' ' | 3u | "\tmax " | max( 4u, 3u ) | endl;
     40        sout | "signed long int\t\t"            | 4l | ' ' | 3l | "\tmax " | max( 4l, 3l ) | endl;
     41        sout | "unsigned long int\t"            | 4ul | ' ' | 3ul | "\tmax " | max( 4ul, 3ul ) | endl;
     42        sout | "signed long long int\t"         | 4ll | ' ' | 3ll | "\tmax " | max( 4ll, 3ll ) | endl;
     43        sout | "unsigned long long int\t"       | 4ull | ' ' | 3ull | "\tmax " | max( 4ull, 3ull ) | endl;
     44        sout | "float\t\t\t"                            | 4.0f | ' ' | 3.1f | "\tmax " | max( 4.0f, 3.1f ) | endl;
     45        sout | "double\t\t\t"                           | 4.0 | ' ' | 3.1 | "\tmax " | max( 4.0, 3.1 ) | endl;
     46        sout | "long double\t\t"                        | 4.0l | ' ' | 3.1l | "\tmax " | max( 4.0l, 3.1l ) | endl;
    4747} // main
    4848
  • src/examples/new.c

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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 May 27 18:25:52 2015
     13// Update Count     : 1
    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 ) {
     27context ArithmeticType( type T ) {
    2828        void is_arithmetic( T );
    2929};
    3030
    31 trait IntegralType( otype T | ArithmeticType( T ) ) {
     31context 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

    r0f9e4403 rc5833e8  
    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 : Wed Feb 17 12:19:24 2016
     13// Update Count     : 6
    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 ) );
     
    2828int main() {
    2929        int N = 2;
    30         sout | "result of quad of" | N | "is" | quad( N ) | endl;
     30        sout | "result of quad of " | N | " is " | quad( N ) | endl;
    3131}
    3232
  • src/examples/random.c

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    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 : Tue Feb 16 23:49:31 2016
     13// Update Count     : 189
    1414//
    1515
    1616#include <fstream>
    1717
    18 trait sumable( otype T ) {
     18context 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
     
    4747                a[i] = v;
    4848        } // for
    49         sout | "sum from" | low | "to" | High | "is"
    50                  | (int)sum( size, a ) | "" | ", check" | (int)s | endl;
     49        sout | "sum from " | low | " to " | High | " is "
     50                 | (int)sum( size, a ) | ", check " | (int)s | endl;
    5151
    5252        int s = 0, a[size], v = low;
     
    5555                a[i] = (int)v;
    5656        } // for
    57         sout | "sum from" | low | "to" | High | "is"
    58                  | sum( size, (int *)a ) | "" | ", check" | (int)s | endl;
     57        sout | "sum from " | low | " to " | High | " is "
     58                 | sum( size, (int *)a ) | ", check " | (int)s | endl;
    5959
    6060        float s = 0.0, a[size], v = low / 10.0;
     
    6363                a[i] = (float)v;
    6464        } // for
    65         sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
    66                  | sum( size, (float *)a ) | "" | ", check" | (float)s | endl;
     65        sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
     66                 | sum( size, (float *)a ) | ", check " | (float)s | endl;
    6767
    6868        double s = 0, a[size], v = low / 10.0;
     
    7171                a[i] = (double)v;
    7272        } // for
    73         sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
    74                  | sum( size, (double *)a ) | "" | ", check" | (double)s | endl;
     73        sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
     74                 | sum( size, (double *)a ) | ", check " | (double)s | endl;
    7575
    7676        struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 };
     
    7979        S ++?( S *t ) { *t += 1; return *t; }
    8080        S ?++( S *t ) { S temp = *t; *t += 1; return temp; }
    81         ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
     81        ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' | v.j; }
    8282
    8383        S s = 0, a[size], v = { low, low };
     
    8686                a[i] = (S)v;
    8787        } // for
    88         sout | "sum from" | low | "to" | High | "is"
    89                  | sum( size, (S *)a ) | "" | ", check" | (S)s | endl;
     88        sout | "sum from " | low | " to " | High | " is "
     89                 | sum( size, (S *)a ) | ", check " | (S)s | endl;
    9090} // main
    9191
  • src/examples/swap.c

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 16:15:11 2016
    13 // Update Count     : 65
     12// Last Modified On : Wed Feb 17 12:22:12 2016
     13// Update Count     : 64
    1414//
    1515
     
    5454
    5555        float f1 = 1.5, f2 = 2.5;
    56         sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap ";
     56        sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t\tswap ";
    5757        swap( &f1, &f2 );
    5858        sout | '\t' | f1 | ' ' | f2 | endl;
    5959
    6060        double d1 = 1.5, d2 = 2.5;
    61         sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap ";
     61        sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t\tswap ";
    6262        swap( &d1, &d2 );
    6363        sout | '\t' | d1 | ' ' | d2 | endl;
    6464
    6565        long double ld1 = 1.5, ld2 = 2.5;
    66         sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap ";
     66        sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t\tswap ";
    6767        swap( &ld1, &ld2 );
    6868        sout | '\t' | ld1 | ' ' | ld2 | endl;
  • src/examples/tests/vector_test.out.txt

    r0f9e4403 rc5833e8  
    11enter N elements and C-d on a separate line:
    22Array elements:
    3 1 2 3 4 5
     31 2 3 4 5 
    44Array elements reversed:
    5 5 4 3 2 1
     55 4 3 2 1 
  • src/examples/twice.c

    r0f9e4403 rc5833e8  
    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

    r0f9e4403 rc5833e8  
    1111## Created On       : Sun May 31 08:54:01 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Wed Apr  6 21:10:44 2016
    14 ## Update Count     : 123
     13## Last Modified On : Wed Feb  3 11:19:35 2016
     14## Update Count     : 117
    1515###############################################################################
    1616
     
    6060        ${CC} ${CFLAGS} -c -o $@ $<
    6161
    62 libs = limits stdlib iostream fstream iterator rational
     62libs = stdlib iostream fstream iterator
    6363libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    6464
    65 cheaders = # expat
    66 cfaheaders = # limits
     65cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math
     66cfaheaders = limits
    6767include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
    6868
  • src/libcfa/Makefile.in

    r0f9e4403 rc5833e8  
    8383libcfa_a_AR = $(AR) $(ARFLAGS)
    8484libcfa_a_LIBADD =
    85 am__objects_1 = limits.$(OBJEXT) stdlib.$(OBJEXT) iostream.$(OBJEXT) \
    86         fstream.$(OBJEXT) iterator.$(OBJEXT) rational.$(OBJEXT)
     85am__objects_1 = stdlib.$(OBJEXT) iostream.$(OBJEXT) fstream.$(OBJEXT) \
     86        iterator.$(OBJEXT)
    8787am_libcfa_a_OBJECTS = libcfa-prelude.$(OBJEXT) $(am__objects_1)
    8888libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
     
    213213MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} \
    214214        ${addprefix ${libdir}/,${lib_LIBRARIES}} ${includedir}/*
    215 libs = limits stdlib iostream fstream iterator rational
     215libs = stdlib iostream fstream iterator
    216216libcfa_a_SOURCES = libcfa-prelude.c ${libs:=.c}
    217 cheaders = # expat
    218 cfaheaders = # limits
     217cheaders = bfd bfdlink demangle dialog evdns evhttp evrpc expat fcntl form gcrypt math
     218cfaheaders = limits
    219219include_HEADERS = ${cheaders:=.h} ${libs} ${cfaheaders}
    220220all: all-am
     
    231231          esac; \
    232232        done; \
    233         echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \
     233        echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \
    234234        $(am__cd) $(top_srcdir) && \
    235           $(AUTOMAKE) --foreign src/libcfa/Makefile
     235          $(AUTOMAKE) --gnu src/libcfa/Makefile
    236236.PRECIOUS: Makefile
    237237Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
     
    297297@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Po@am__quote@
    298298@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa-prelude.Po@am__quote@
    299 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@
    300 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rational.Po@am__quote@
    301299@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdlib.Po@am__quote@
    302300
  • src/libcfa/builtins.cf

    r0f9e4403 rc5833e8  
    390390int __builtin_sprintf(char *, const char *, ...);
    391391int __builtin_sscanf(const char *, const char *, ...);
    392 int __builtin_vfprintf(struct _IO_FILE *, const char *, __builtin_va_list);
    393 int __builtin_vfscanf(struct _IO_FILE *, const char *, __builtin_va_list);
    394 int __builtin_vprintf(const char *, __builtin_va_list);
    395 int __builtin_vscanf(const char *, __builtin_va_list);
    396 int __builtin_vsnprintf(char *, unsigned long, const char *, __builtin_va_list);
    397 int __builtin_vsprintf(char *, const char *, __builtin_va_list);
    398 int __builtin_vsscanf(const char *, const char *, __builtin_va_list);
     392int __builtin_vfprintf(struct _IO_FILE *, const char *, void **);
     393int __builtin_vfscanf(struct _IO_FILE *, const char *, void **);
     394int __builtin_vprintf(const char *, void **);
     395int __builtin_vscanf(const char *, void **);
     396int __builtin_vsnprintf(char *, unsigned long, const char *, void **);
     397int __builtin_vsprintf(char *, const char *, void **);
     398int __builtin_vsscanf(const char *, const char *, void **);
    399399int __builtin_isalnum(int);
    400400int __builtin_isalpha(int);
     
    534534void __builtin_unwind_init();
    535535void __builtin_update_setjmp_buf(void *, int);
    536 void __builtin_va_copy(__builtin_va_list, __builtin_va_list);
    537 void __builtin_va_end(__builtin_va_list);
    538 void __builtin_va_start(__builtin_va_list, ...);
     536void __builtin_va_copy(void **, void **);
     537void __builtin_va_end(void **);
     538void __builtin_va_start(void **, ...);
    539539int __builtin_va_arg_pack();
    540540int __builtin_va_arg_pack_len();
     
    563563int __builtin___snprintf_chk(char *, unsigned long, int, unsigned long, const char *, ...);
    564564int __builtin___sprintf_chk(char *, int, unsigned long, const char *, ...);
    565 int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, __builtin_va_list);
    566 int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, __builtin_va_list);
     565int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, void **);
     566int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, void **);
    567567int __builtin___fprintf_chk(struct _IO_FILE *, int, const char *, ...);
    568568int __builtin___printf_chk(int, const char *, ...);
    569 int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, __builtin_va_list);
    570 int __builtin___vprintf_chk(int, const char *, __builtin_va_list);
     569int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, void **);
     570int __builtin___vprintf_chk(int, const char *, void **);
    571571void __cyg_profile_func_enter(void *, void *);
    572572void __cyg_profile_func_exit(void *, void *);
     
    583583const char * __builtin_FUNCTION();
    584584int __builtin_LINE();
     585typedef void ** __builtin_va_list;
    585586extern const char *__PRETTY_FUNCTION__;
     587typedef int wchar_t;
  • src/libcfa/fstream

    r0f9e4403 rc5833e8  
    77// fstream --
    88//
    9 // Author           : Peter A. Buhr
     9// Author           : Richard C. Bilson
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Apr  5 22:37:12 2016
    13 // Update Count     : 82
     12// Last Modified On : Wed Feb 17 14:02:01 2016
     13// Update Count     : 22
    1414//
    1515
     
    1919#include "iostream"
    2020
    21 enum { separateSize = 16 };
    22 struct ofstream {
    23         void *file;
    24         _Bool sepDefault;
    25         _Bool sepOnOff;
    26         char separator[separateSize];
    27 }; // ofstream
     21// implement context ostream
     22struct ofstream;
    2823
    29 _Bool sepPrt( ofstream * );
    30 void sepOn( ofstream * );
    31 void sepOff( ofstream * );
    32 void sepReset( ofstream * );
    33 void sepReset( ofstream *, _Bool );
    34 void sepSet( ofstream *, const char * );
    35 const char * sepGet( ofstream * );
    36 _Bool sepDisable( ofstream * );
    37 _Bool sepEnable( ofstream * );
    38 int fail( ofstream * );
    39 int flush( ofstream * );
    40 void open( ofstream *, const char * name, const char * mode );
    41 void close( ofstream * );
    42 ofstream * write( ofstream *, const char * data, unsigned long int size );
    43 int prtfmt( ofstream *, const char fmt[], ... );
     24int fail( ofstream * os );
     25int flush( ofstream * os );
     26void open( ofstream ** os, const char * name, const char * mode );
     27void close( ofstream * os );
     28ofstream * write( ofstream * os, const char * data, streamsize_type size );
    4429
    4530extern ofstream * sout, * serr;
    4631
    4732// implement context istream
    48 struct ifstream {
    49         void *file;
    50 }; // ifstream
     33struct ifstream;
    5134
    5235int fail( ifstream * is );
    5336int eof( ifstream * is );
    54 void open( ifstream * is, const char * name, const char * mode );
     37void open( ifstream ** is, const char * name, const char * mode );
    5538void close( ifstream * is );
    56 ifstream * read( ifstream * is, char * data, unsigned long int size );
     39ifstream * get( ifstream * is, int * data );
     40ifstream * read( ifstream * is, char * data, streamsize_type size );
    5741ifstream * ungetc( ifstream * is, char c );
    58 int scanfmt( ifstream *, const char fmt[], ... );
    5942
    6043extern ifstream *sin;
     
    6649// tab-width: 4 //
    6750// End: //
    68 
  • src/libcfa/fstream.c

    r0f9e4403 rc5833e8  
    77// fstream.c --
    88//
    9 // Author           : Peter A. Buhr
     9// Author           : Richard C. Bilson
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr  6 17:55:27 2016
    13 // Update Count     : 176
     12// Last Modified On : Wed Feb 17 14:03:05 2016
     13// Update Count     : 76
    1414//
    1515
     
    1717
    1818extern "C" {
    19 #include <stdio.h>                                                                              // vfprintf, vfscanf
    20 #include <stdlib.h>                                                                             // exit
    21 #include <stdarg.h>                                                                             // varargs
    22 #include <string.h>                                                                             // strlen
    23 #include <float.h>                                                                              // DBL_DIG, LDBL_DIG
    24 #include <complex.h>                                                                    // creal, cimag
     19#include <stdio.h>
     20#include <stdlib.h>
    2521}
    2622
    27 #define IO_MSG "I/O error: "
     23struct ofstream {
     24        FILE *file;
     25};
    2826
    29 _Bool sepPrt( ofstream * os ) { return os->sepOnOff; }
    30 void sepOn( ofstream * os ) { os->sepOnOff = 1; }
    31 void sepOff( ofstream * os ) { os->sepOnOff = 0; }
    32 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
    33 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
    34 void sepSet( ofstream * os, const char * s ) {
    35         strncpy( &(os->separator[0]), s, separateSize - 1 );
    36         os->separator[separateSize - 1] = '\0';
    37 } // sepSet
    38 const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
    39 _Bool sepDisable( ofstream *os ) {
    40         _Bool temp = os->sepDefault;
    41         os->sepDefault = 0;
    42         sepReset( os );
    43         return temp;
    44 } // sepDisable
    45 _Bool sepEnable( ofstream *os ) {
    46         _Bool temp = os->sepDefault;
    47         os->sepDefault = 1;
    48         sepReset( os );
    49         return temp;
    50 } // sepEnable
     27#define IO_MSG "I/O error "
    5128
    5229int fail( ofstream * os ) {
    53         return ferror( (FILE *)(os->file) );
     30        return ferror( os->file );
    5431} // fail
    5532
    5633int flush( ofstream * os ) {
    57         return fflush( (FILE *)(os->file) );
     34        return fflush( os->file );
    5835} // flush
    5936
    60 void open( ofstream * os, const char * name, const char * mode ) {
    61         FILE *file = fopen( name, mode );
    62         if ( file == 0 ) {                                                                      // do not change unless successful
    63                 fprintf( stderr, IO_MSG "open output file \"%s\", ", name );
    64                 perror( 0 );
     37void open( ofstream ** os, const char * name, const char * mode ) {
     38        FILE *t = fopen( name, mode );
     39        if ( t == 0 ) {                                                                         // do not change unless successful
     40                perror( IO_MSG "open output" );
    6541                exit( EXIT_FAILURE );
    6642        } // if
    67         os->file = file;
    68         sepOff( os );
    69         sepSet( os, " " );
     43        (*os)->file = t;
    7044} // open
    7145
    7246void close( ofstream * os ) {
    73         if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return;
     47        if ( os->file == stdout || os->file == stderr ) return;
    7448
    75         if ( fclose( (FILE *)(os->file) ) == EOF ) {
     49        if ( fclose( os->file ) == EOF ) {
    7650                perror( IO_MSG "close output" );
    7751        } // if
    7852} // close
    7953
    80 ofstream * write( ofstream * os, const char * data, unsigned long int size ) {
     54ofstream * write( ofstream * os, const char * data, streamsize_type size ) {
    8155        if ( fail( os ) ) {
    8256                fprintf( stderr, "attempt write I/O on failed stream\n" );
     
    8458        } // if
    8559
    86         if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) {
     60        if ( fwrite( data, 1, size, os->file ) != size ) {
    8761                perror( IO_MSG "write" );
    8862                exit( EXIT_FAILURE );
     
    9165} // write
    9266
    93 int prtfmt( ofstream * os, const char fmt[], ... ) {
    94     va_list args;
     67static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) };
     68ofstream *sout = &soutFile;
     69static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };
     70ofstream *serr = &serrFile;
    9571
    96     va_start( args, fmt );
    97     int len = vfprintf( (FILE *)(os->file), fmt, args );
    98         if ( len == EOF ) {
    99                 if ( ferror( (FILE *)(os->file) ) ) {
    100                         fprintf( stderr, "invalid write\n" );
     72//---------------------------------------
     73
     74struct ifstream {
     75        FILE *file;
     76};
     77
     78int fail( ifstream * is ) {
     79        return ferror( is->file );
     80} // fail
     81
     82int eof( ifstream * is ) {
     83        return feof( is->file );
     84} // eof
     85
     86ifstream * get( ifstream * is, int * data ) {
     87        if ( fscanf( is->file, "%d", data ) == EOF ) {
     88                if ( ferror( is->file ) ) {
     89                        fprintf( stderr, "invalid int read\n" );
    10190                        exit( EXIT_FAILURE );
    10291                } // if
    10392        } // if
    104     va_end( args );
    105         return len;
    106 } // prtfmt
     93        return is;
     94} // read
    10795
    108 
    109 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, { ' ', '\0' } };
    110 ofstream *sout = &soutFile;
    111 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, { ' ', '\0' } };
    112 ofstream *serr = &serrFile;
    113 
    114 
    115 //---------------------------------------
    116 
    117 
    118 int fail( ifstream * is ) {
    119         return ferror( (FILE *)(is->file) );
    120 } // fail
    121 
    122 int eof( ifstream * is ) {
    123         return feof( (FILE *)(is->file) );
    124 } // eof
    125 
    126 void open( ifstream * is, const char * name, const char * mode ) {
    127         FILE *t = fopen( name, mode );
    128         if ( t == 0 ) {                                                                         // do not change unless successful
    129                 fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
    130                 perror( 0 );
    131                 exit( EXIT_FAILURE );
    132         } // if
    133         is->file = t;
    134 } // open
    135 
    136 void close( ifstream * is ) {
    137         if ( (FILE *)(is->file) == stdin ) return;
    138 
    139         if ( fclose( (FILE *)(is->file) ) == EOF ) {
    140                 perror( IO_MSG "close input" );
    141         } // if
    142 } // close
    143 
    144 ifstream * read( ifstream * is, char * data, unsigned long int size ) {
     96ifstream * read( ifstream * is, char * data, streamsize_type size ) {
    14597        if ( fail( is ) ) {
    14698                fprintf( stderr, "attempt read I/O on failed stream\n" );
     
    148100        } // if
    149101
    150         if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) {
     102        if ( fread( data, size, 1, is->file ) == 0 ) {
    151103                perror( IO_MSG "read" );
    152104                exit( EXIT_FAILURE );
     
    161113        } // if
    162114
    163         if ( ungetc( c, (FILE *)(is->file) ) == EOF ) {
     115        if ( ungetc( c, is->file ) == EOF ) {
    164116                perror( IO_MSG "ungetc" );
    165117                exit( EXIT_FAILURE );
     
    168120} // ungetc
    169121
    170 int scanfmt( ifstream * is, const char fmt[], ... ) {
    171     va_list args;
     122void open( ifstream ** is, const char * name, const char * mode ) {
     123        FILE *t = fopen( name, mode );
     124        if ( t == 0 ) {                                                                         // do not change unless successful
     125                perror( IO_MSG "open input" );
     126                exit( EXIT_FAILURE );
     127        } // if
     128        (*is)->file = t;
     129} // open
    172130
    173     va_start( args, fmt );
    174     int len = vfscanf( (FILE *)(is->file), fmt, args );
    175         if ( len == EOF ) {
    176                 if ( ferror( (FILE *)(is->file) ) ) {
    177                         fprintf( stderr, "invalid read\n" );
    178                         exit( EXIT_FAILURE );
    179                 } // if
    180         } // if
    181     va_end( args );
    182         return len;
    183 } // prtfmt
     131void close( ifstream * is ) {
     132        if ( is->file == stdin ) return;
    184133
     134        if ( fclose( is->file ) == EOF ) {
     135                perror( IO_MSG "close input" );
     136        } // if
     137} // close
    185138
    186139static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) };
     
    189142// Local Variables: //
    190143// tab-width: 4 //
     144// compile-command: "cfa fstream.c" //
    191145// End: //
  • src/libcfa/iostream

    r0f9e4403 rc5833e8  
    77// iostream --
    88//
    9 // Author           : Peter A. Buhr
     9// Author           : Richard C. Bilson
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Apr 10 23:00:12 2016
    13 // Update Count     : 92
     12// Last Modified On : Wed Feb 17 14:04:24 2016
     13// Update Count     : 32
    1414//
    1515
    16 #ifndef __IOSTREAM_H__
    17 #define __IOSTREAM_H__
     16#ifndef IOSTREAM_H
     17#define IOSTREAM_H
    1818
    1919#include "iterator"
    2020
    21 trait ostream( dtype ostype ) {
    22         _Bool sepPrt( ostype * );                                                       // return separator state (on/off)
    23         void sepOn( ostype * );                                                         // turn separator state on
    24         void sepOff( ostype * );                                                        // turn separator state off
    25         void sepReset( ostype * );                                                      // set separator state to default state
    26         void sepReset( ostype *, _Bool );                                       // set separator and default state
    27         void sepSet( ostype *, const char * );                          // set separator to string (15 character maximum)
    28         const char * sepGet( ostype * );                                        // get separator string
    29         _Bool sepDisable( ostype * );                                           // set default state to off, and return previous state
    30         _Bool sepEnable( ostype * );                                            // set default state to on, and return previous state
     21typedef unsigned long streamsize_type;
    3122
     23context ostream( dtype ostype ) {
    3224        int fail( ostype * );
    3325        int flush( ostype * );
    34         void open( ostype * os, const char * name, const char * mode );
    35         void close( ostype * os );
    36         ostype * write( ostype *, const char *, unsigned long int );
    37         int prtfmt( ostype *, const char fmt[], ... );
     26        ostype * write( ostype *, const char *, streamsize_type );
    3827};
    39 
    40 trait writeable( otype T ) {
     28context writeable( type T ) {
    4129        forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
    4230};
     
    4533
    4634forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
    47 
    48 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );
    49 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );
    5035forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
    5136forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );
     
    5439forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );
    5540forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );
    56 
    5741forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required
    5842forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
    5943forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );
    60 
    6144forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );
    6245forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );
    6346forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );
    64 
    6547forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
    6648forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
    6749
    68 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
     50forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );
    6951forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
    70 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
    71 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
    72 forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype * );
    73 forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype * );
    7452
    7553// writes the range [begin, end) to the given stream
    76 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     54forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
    7755void write( iterator_type begin, iterator_type end, os_type *os );
    7856
    79 forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
     57forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
    8058void write_reverse( iterator_type begin, iterator_type end, os_type *os );
    8159
    8260//---------------------------------------
    8361
    84 trait istream( dtype istype ) {
     62context istream( dtype istype ) {
    8563        int fail( istype * );
    8664        int eof( istype * );
    87         void open( istype * is, const char * name, const char * mode );
    88         void close( istype * is );
    89         istype * read( istype *, char *, unsigned long int );
     65        istype * get( istype *, int * );
     66        istype * read( istype *, char *, streamsize_type );
    9067        istype * ungetc( istype *, char );
    91         int scanfmt( istype *, const char fmt[], ... );
    9268};
    9369
    94 trait readable( otype T ) {
     70context readable( type T ) {
    9571        forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
    9672};
    9773
    98 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * );
     74forall( dtype istype | istream( istype ) )
     75istype * ?|?( istype *, char * );
    9976
    100 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * );
    101 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * );
    102 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * );
    103 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * );
    104 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * );
    105 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * );
    106 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * );
    107 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * );
     77forall( dtype istype | istream( istype ) )
     78istype * ?|?( istype *, int * );
    10879
    109 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * );
    110 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * );
    111 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * );
    112 
    113 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * );
    114 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * );
    115 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
    116 
    117 struct _Istream_cstrUC { char * s; };
    118 _Istream_cstrUC cstr( char * );
    119 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC );
    120 
    121 struct _Istream_cstrC { char * s; int size; };
    122 _Istream_cstrC cstr( char *, int size );
    123 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );
    124 
    125 #endif // __IOSTREAM_H__
     80#endif // IOSTREAM_H
    12681
    12782// Local Variables: //
  • src/libcfa/iostream.c

    r0f9e4403 rc5833e8  
    77// iostream.c --
    88//
    9 // Author           : Peter A. Buhr
     9// Author           : Richard C. Bilson
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr  6 16:13:29 2016
    13 // Update Count     : 278
     12// Last Modified On : Wed Feb 17 14:19:56 2016
     13// Update Count     : 76
    1414//
    1515
     
    2121#include <float.h>                                                                              // DBL_DIG, LDBL_DIG
    2222#include <complex.h>                                                                    // creal, cimag
    23 #include <ctype.h>                                                                              // isspace, ispunct
    2423}
    2524
    2625forall( dtype ostype | ostream( ostype ) )
    2726ostype * ?|?( ostype *os, char c ) {
    28         prtfmt( os, "%c", c );
    29         sepOff( os );
    30         return os;
    31 } // ?|?
    32 
    33 forall( dtype ostype | ostream( ostype ) )
    34 ostype * ?|?( ostype *os, short int si ) {
    35         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    36         sepReset( os );
    37         prtfmt( os, "%hd", si );
    38         return os;
    39 } // ?|?
    40 
    41 forall( dtype ostype | ostream( ostype ) )
    42 ostype * ?|?( ostype *os, unsigned short int usi ) {
    43         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    44         sepReset( os );
    45         prtfmt( os, "%hu", usi );
    46         return os;
     27        return write( os, &c, 1 );
    4728} // ?|?
    4829
    4930forall( dtype ostype | ostream( ostype ) )
    5031ostype * ?|?( ostype *os, int i ) {
    51         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    52         sepReset( os );
    53         prtfmt( os, "%d", i );
    54         return os;
     32        char buffer[32];
     33        return write( os, buffer, sprintf( buffer, "%d", i ) );
    5534} // ?|?
    5635
    5736forall( dtype ostype | ostream( ostype ) )
    58 ostype * ?|?( ostype *os, unsigned int ui ) {
    59         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    60         sepReset( os );
    61         prtfmt( os, "%u", ui );
    62         return os;
     37ostype * ?|?( ostype *os, unsigned int i ) {
     38        char buffer[32];
     39        return write( os, buffer, sprintf( buffer, "%u", i ) );
    6340} // ?|?
    6441
    6542forall( dtype ostype | ostream( ostype ) )
    66 ostype * ?|?( ostype *os, long int li ) {
    67         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    68         sepReset( os );
    69         prtfmt( os, "%ld", li );
    70         return os;
     43ostype * ?|?( ostype *os, long int i ) {
     44        char buffer[32];
     45        return write( os, buffer, sprintf( buffer, "%ld", i ) );
    7146} // ?|?
    7247
    7348forall( dtype ostype | ostream( ostype ) )
    74 ostype * ?|?( ostype *os, unsigned long int uli ) {
    75         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    76         sepReset( os );
    77         prtfmt( os, "%lu", uli );
    78         return os;
     49ostype * ?|?( ostype *os, long long int i ) {
     50        char buffer[32];
     51        return write( os, buffer, sprintf( buffer, "%lld", i ) );
    7952} // ?|?
    8053
    8154forall( dtype ostype | ostream( ostype ) )
    82 ostype * ?|?( ostype *os, long long int lli ) {
    83         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    84         sepReset( os );
    85         prtfmt( os, "%lld", lli );
    86         return os;
     55ostype * ?|?( ostype *os, unsigned long int i ) {
     56        char buffer[32];
     57        return write( os, buffer, sprintf( buffer, "%lu", i ) );
    8758} // ?|?
    8859
    8960forall( dtype ostype | ostream( ostype ) )
    90 ostype * ?|?( ostype *os, unsigned long long int ulli ) {
    91         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    92         sepReset( os );
    93         prtfmt( os, "%llu", ulli );
    94         return os;
     61ostype * ?|?( ostype *os, unsigned long long int i ) {
     62        char buffer[32];
     63        return write( os, buffer, sprintf( buffer, "%llu", i ) );
    9564} // ?|?
    9665
    9766forall( dtype ostype | ostream( ostype ) )
    9867ostype * ?|?( ostype *os, float f ) {
    99         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    100         sepReset( os );
    101         prtfmt( os, "%g", f );
    102         return os;
     68        char buffer[32];
     69        return write( os, buffer, sprintf( buffer, "%g", f ) );
    10370} // ?|?
    10471
    10572forall( dtype ostype | ostream( ostype ) )
    10673ostype * ?|?( ostype *os, double d ) {
    107         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    108         sepReset( os );
    109         prtfmt( os, "%.*lg", DBL_DIG, d );
    110         return os;
     74        char buffer[32];
     75        return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) );
    11176} // ?|?
    11277
    11378forall( dtype ostype | ostream( ostype ) )
    114 ostype * ?|?( ostype *os, long double ld ) {
    115         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    116         sepReset( os );
    117         prtfmt( os, "%.*Lg", LDBL_DIG, ld );
    118         return os;
     79ostype * ?|?( ostype *os, long double d ) {
     80        char buffer[32];
     81        return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) );
    11982} // ?|?
    12083
    12184forall( dtype ostype | ostream( ostype ) )
    122 ostype * ?|?( ostype *os, float _Complex fc ) {
    123         os | crealf( fc );
    124         _Bool temp = sepDisable( os );                                          // disable separators within complex value
    125         if ( cimagf( fc ) >= 0 ) os | '+';                                      // negative value prints '-'
    126         os | cimagf( fc ) | 'i';
    127         sepReset( os, temp );                                                           // reset separator
    128         return os;
     85ostype * ?|?( ostype *os, float _Complex c ) {
     86        return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i';
    12987} // ?|?
    13088
    13189forall( dtype ostype | ostream( ostype ) )
    132 ostype * ?|?( ostype *os, double _Complex dc ) {
    133         os | creal( dc );
    134         _Bool temp = sepDisable( os );                                          // disable separators within complex value
    135         if ( cimag( dc ) >= 0 ) os | '+';                                       // negative value prints '-'
    136         os | cimag( dc ) | 'i';
    137         sepReset( os, temp );                                                           // reset separator
    138         return os;
     90ostype * ?|?( ostype *os, double _Complex c ) {
     91        return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i';
    13992} // ?|?
    14093
    14194forall( dtype ostype | ostream( ostype ) )
    142 ostype * ?|?( ostype *os, long double _Complex ldc ) {
    143         os | creall( ldc );
    144         _Bool temp = sepDisable( os );                                          // disable separators within complex value
    145         if ( cimagl( ldc ) >= 0 ) os | '+';                                     // negative value prints '-'
    146         os | cimagl( ldc ) | 'i';
    147         sepReset( os, temp );                                                           // reset separator
    148         return os;
     95ostype * ?|?( ostype *os, long double _Complex c ) {
     96        return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i';
     97} // ?|?
     98
     99forall( dtype ostype | ostream( ostype ) )
     100ostype * ?|?( ostype *os, const void *p ) {
     101        char buffer[32];
     102        return write( os, buffer, sprintf( buffer, "%p", p ) );
    149103} // ?|?
    150104
    151105forall( dtype ostype | ostream( ostype ) )
    152106ostype * ?|?( ostype *os, const char *cp ) {
    153         enum { Open = 1, Close, OpenClose };
    154         static const unsigned char mask[256] = {
    155                 // opening delimiters
    156                 ['('] : Open, ['['] : Open, ['{'] : Open,
    157                 ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
    158                 // closing delimiters
    159                 [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
    160                 [')'] : Close, [']'] : Close, ['}'] : Close,
    161                 ['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
    162                 // opening-closing delimiters
    163                 ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
    164                 ['\f'] : OpenClose, ['\n'] : OpenClose, ['\r'] : OpenClose, ['\t'] : OpenClose, ['\v'] : OpenClose, // isspace
    165         }; // mask
    166 
    167         int len = strlen( cp );
    168         // null string => no separator
    169   if ( len == 0 ) { sepOff( os ); return os; }
    170         // first character IS NOT spacing or closing punctuation => add left separator
    171         unsigned char ch = cp[0];                                                       // must make unsigned
    172         if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) {
    173                 prtfmt( os, "%s", sepGet( os ) );
    174         } // if
    175         // last character IS spacing or opening punctuation => turn off separator for next item
    176         unsigned int posn = len - 1;
    177         ch = cp[posn];                                                                          // must make unsigned
    178         if ( mask[ ch ] == Open || mask[ ch ] == OpenClose ) {
    179                 sepOff( os );
    180         } else {
    181                 sepOn( os );
    182         } // if
    183         return write( os, cp, len );
    184 } // ?|?
    185 
    186 forall( dtype ostype | ostream( ostype ) )
    187 ostype * ?|?( ostype *os, const void *p ) {
    188         if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
    189         sepReset( os );
    190         prtfmt( os, "%p", p );
    191         return os;
     107        return write( os, cp, strlen( cp ) );
    192108} // ?|?
    193109
    194110
    195 forall( dtype ostype | ostream( ostype ) )
    196 ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) {
    197         return manip( os );
    198 } // ?|?
     111forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) )
     112retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) {
     113  return manip( os );
     114}
    199115
    200116forall( dtype ostype | ostream( ostype ) )
    201117ostype * endl( ostype * os ) {
    202         os | '\n';
     118        os | "\n";
    203119        flush( os );
    204         sepOff( os );
    205120        return os;
    206121} // endl
    207122
    208 forall( dtype ostype | ostream( ostype ) )
    209 ostype * sepOn( ostype * os ) {
    210         sepOn( os );
    211         return os;
    212 } // sepOn
    213 
    214 forall( dtype ostype | ostream( ostype ) )
    215 ostype * sepOff( ostype * os ) {
    216         sepOff( os );
    217         return os;
    218 } // sepOff
    219 
    220 forall( dtype ostype | ostream( ostype ) )
    221 ostype * sepEnable( ostype * os ) {
    222         sepEnable( os );
    223         return os;
    224 } // sepEnable
    225 
    226 forall( dtype ostype | ostream( ostype ) )
    227 ostype * sepDisable( ostype * os ) {
    228         sepDisable( os );
    229         return os;
    230 } // sepDisable
    231 
    232123//---------------------------------------
    233124
    234 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
    235 void write( iteratortype begin, iteratortype end, ostype *os ) {
    236         void print( elttype i ) { os | i; }
     125forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
     126                dtype os_type | ostream( os_type ) )
     127void write( iterator_type begin, iterator_type end, os_type *os ) {
     128        void print( elt_type i ) { os | i | ' '; }
    237129        for_each( begin, end, print );
    238130} // ?|?
    239131
    240 forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
    241 void write_reverse( iteratortype begin, iteratortype end, ostype *os ) {
    242         void print( elttype i ) { os | i; }
     132forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
     133                dtype os_type | ostream( os_type ) )
     134void write_reverse( iterator_type begin, iterator_type end, os_type *os ) {
     135        void print( elt_type i ) { os | i | ' '; }
    243136        for_each_reverse( begin, end, print );
    244137} // ?|?
     
    247140
    248141forall( dtype istype | istream( istype ) )
    249 istype * ?|?( istype * is, char * c ) {
    250         scanfmt( is, "%c", c );
    251         return is;
     142istype * ?|?( istype *is, char *cp ) {
     143        return read( is, cp, 1 );
    252144} // ?|?
    253145
    254146forall( dtype istype | istream( istype ) )
    255 istype * ?|?( istype * is, short int * si ) {
    256         scanfmt( is, "%hd", si );
    257         return is;
     147istype * ?|?( istype *is, int *ip ) {
     148        return get( is, ip );
    258149} // ?|?
    259 
    260 forall( dtype istype | istream( istype ) )
    261 istype * ?|?( istype * is, unsigned short int * usi ) {
    262         scanfmt( is, "%hu", usi );
    263         return is;
    264 } // ?|?
    265 
    266 forall( dtype istype | istream( istype ) )
    267 istype * ?|?( istype * is, int * i ) {
    268         scanfmt( is, "%d", i );
    269         return is;
    270 } // ?|?
    271 
    272 forall( dtype istype | istream( istype ) )
    273 istype * ?|?( istype * is, unsigned int * ui ) {
    274         scanfmt( is, "%u", ui );
    275         return is;
    276 } // ?|?
    277 
    278 forall( dtype istype | istream( istype ) )
    279 istype * ?|?( istype * is, long int * li ) {
    280         scanfmt( is, "%ld", li );
    281         return is;
    282 } // ?|?
    283 
    284 forall( dtype istype | istream( istype ) )
    285 istype * ?|?( istype * is, unsigned long int * ulli ) {
    286         scanfmt( is, "%lu", ulli );
    287         return is;
    288 } // ?|?
    289 
    290 forall( dtype istype | istream( istype ) )
    291 istype * ?|?( istype * is, long long int * lli ) {
    292         scanfmt( is, "%lld", lli );
    293         return is;
    294 } // ?|?
    295 
    296 forall( dtype istype | istream( istype ) )
    297 istype * ?|?( istype * is, unsigned long long int * ulli ) {
    298         scanfmt( is, "%llu", ulli );
    299         return is;
    300 } // ?|?
    301 
    302 
    303 forall( dtype istype | istream( istype ) )
    304 istype * ?|?( istype * is, float * f ) {
    305         scanfmt( is, "%f", f );
    306         return is;
    307 } // ?|?
    308 
    309 forall( dtype istype | istream( istype ) )
    310 istype * ?|?( istype * is, double * d ) {
    311         scanfmt( is, "%lf", d );
    312         return is;
    313 } // ?|?
    314 
    315 forall( dtype istype | istream( istype ) )
    316 istype * ?|?( istype * is, long double * ld ) {
    317         scanfmt( is, "%Lf", ld );
    318         return is;
    319 } // ?|?
    320 
    321 
    322 forall( dtype istype | istream( istype ) )
    323 istype * ?|?( istype * is, float _Complex * fc ) {
    324         float re, im;
    325         scanfmt( is, "%g%gi", &re, &im );
    326         *fc = re + im * _Complex_I;
    327         return is;
    328 } // ?|?
    329 
    330 forall( dtype istype | istream( istype ) )
    331 istype * ?|?( istype * is, double _Complex * dc ) {
    332         double re, im;
    333         scanfmt( is, "%lf%lfi", &re, &im );
    334         *dc = re + im * _Complex_I;
    335         return is;
    336 } // ?|?
    337 
    338 forall( dtype istype | istream( istype ) )
    339 istype * ?|?( istype * is, long double _Complex * ldc ) {
    340         long double re, im;
    341         scanfmt( is, "%Lf%Lfi", &re, &im );
    342         *ldc = re + im * _Complex_I;
    343         return is;
    344 } // ?|?
    345 
    346 _Istream_cstrUC cstr( char * s ) { _Istream_cstrUC s = { s }; return s; }
    347 forall( dtype istype | istream( istype ) )
    348 istype * ?|?( istype * is, _Istream_cstrUC cstr ) {
    349         scanfmt( is, "%s", cstr.s );
    350         return is;
    351 } // cstr
    352 
    353 _Istream_cstrC cstr( char * s, int size ) { _Istream_cstrC s = { s, size }; return s; }
    354 forall( dtype istype | istream( istype ) )
    355 istype * ?|?( istype * is, _Istream_cstrC cstr ) {
    356         char buf[16];
    357         sprintf( buf, "%%%ds", cstr.size );
    358         scanfmt( is, buf, cstr.s );
    359         return is;
    360 } // cstr
    361150
    362151// Local Variables: //
  • src/libcfa/iterator

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 18:06:05 2016
    13 // Update Count     : 9
     12// Last Modified On : Wed Jan 27 23:49:13 2016
     13// Update Count     : 7
    1414//
    1515
     
    1818
    1919// An iterator can be used to traverse a data structure.
    20 trait iterator( otype iterator_type, otype elt_type ) {
     20context iterator( type iterator_type, type elt_type ) {
    2121        // point to the next element
    2222//      iterator_type ?++( iterator_type * );
     
    3232};
    3333
    34 trait iterator_for( otype iterator_type, otype collection_type, otype elt_type | iterator( iterator_type, elt_type ) ) {
     34context iterator_for( type iterator_type, type collection_type, type elt_type | iterator( iterator_type, elt_type ) ) {
    3535//      [ iterator_type begin, iterator_type end ] get_iterators( collection_type );
    3636        iterator_type begin( collection_type );
     
    3838};
    3939
    40 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
     40forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
    4141void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
    4242
    43 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
     43forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
    4444void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
    4545
  • src/libcfa/iterator.c

    r0f9e4403 rc5833e8  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar  2 18:08:11 2016
    13 // Update Count     : 27
     12// Last Modified On : Tue Jan 26 17:16:07 2016
     13// Update Count     : 26
    1414//
    1515
    1616#include "iterator"
    1717
    18 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
     18forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
    1919void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
    2020        for ( iterator_type i = begin; i != end; ++i ) {
     
    2323}
    2424
    25 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
     25forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
    2626void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
    2727        for ( iterator_type i = end; i != begin; ) {
  • src/libcfa/limits

    r0f9e4403 rc5833e8  
    1 //
    2 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    3 //
    4 // The contents of this file are covered under the licence agreement in the
    5 // file "LICENCE" distributed with Cforall.
    6 //
    7 // limits --
    8 //
    9 // Author           : Peter A. Buhr
    10 // Created On       : Wed Apr  6 18:06:52 2016
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr  6 21:08:16 2016
    13 // Update Count     : 6
    14 //
    15 
    161// Integral Constants
    172
    18 extern const short int MIN;
    19 extern const int MIN;
    20 extern const long int MIN;
    21 extern const long long int MIN;
     3const short int MIN = -32768;
     4const int MIN = -2147483648;
     5const long int MIN = -9223372036854775807L - 1L;
     6const long long int MIN = -9223372036854775807LL - 1LL;
    227
    23 extern const short int MAX;
    24 extern const unsigned short int MAX;
    25 extern const int MAX;
    26 extern const unsigned int MAX;
    27 extern const long int MAX;
    28 extern const unsigned long int MAX;
    29 extern const long long int MAX;
    30 extern const unsigned long long int MAX;
     8const short int MAX = 32767;
     9const unsigned short int MAX = 65535;
     10const int MAX = 2147483647;
     11const unsigned int MAX = 4294967295_U;
     12const long int MAX = 9223372036854775807_L;
     13const unsigned long int MAX = 4294967295_U;
     14const long long int MAX = 9223372036854775807_LL;
     15const unsigned long long int MAX = 18446744073709551615_ULL;
    3116
    3217// Floating-Point Constants
    3318
    34 extern const float PI;                                                                  // pi
    35 extern const float PI_2;                                                                // pi / 2
    36 extern const float PI_4;                                                                // pi / 4
    37 extern const float _1_PI;                                                               // 1 / pi
    38 extern const float _2_PI;                                                               // 2 / pi
    39 extern const float _2_SQRT_PI;                                                  // 2 / sqrt(pi)
     19const float PI = 3.141592_F;                            // pi
     20const float PI_2 = 1.570796_F;                          // pi / 2
     21const float PI_4 = 0.7853981_F;                         // pi / 4
     22const float _1_PI = 0.3183098_F;                        // 1 / pi
     23const float _2_PI = 0.6366197_F;                        // 2 / pi
     24const float _2_SQRT_PI = 1.128379_F;                    // 2 / sqrt(pi)
    4025
    41 extern const double PI;                                                                 // pi
    42 extern const double PI_2;                                                               // pi / 2
    43 extern const double PI_4;                                                               // pi / 4
    44 extern const double _1_PI;                                                              // 1 / pi
    45 extern const double _2_PI;                                                              // 2 / pi
    46 extern const double _2_SQRT_PI;                                                 // 2 / sqrt(pi)
     26const double PI = 3.14159265358979323846_D;             // pi
     27const double PI_2 = 1.57079632679489661923_D;           // pi / 2
     28const double PI_4 = 0.78539816339744830962_D;           // pi / 4
     29const double _1_PI = 0.31830988618379067154_D;          // 1 / pi
     30const double _2_PI = 0.63661977236758134308_D;          // 2 / pi
     31const double _2_SQRT_PI = 1.12837916709551257390_D;     // 2 / sqrt(pi)
    4732
    48 extern const long double PI;                                                    // pi
    49 extern const long double PI_2;                                                  // pi / 2
    50 extern const long double PI_4;                                                  // pi / 4
    51 extern const long double _1_PI;                                                 // 1 / pi
    52 extern const long double _2_PI;                                                 // 2 / pi
    53 extern const long double _2_SQRT_PI;                                    // 2 / sqrt(pi)
     33const long double PI = 3.1415926535897932384626433832795029_DL; // pi
     34const long double PI_2 = 1.5707963267948966192313216916397514_DL; // pi / 2
     35const long double PI_4 = 0.7853981633974483096156608458198757_DL; // pi / 4
     36const long double _1_PI = 0.3183098861837906715377675267450287_DL; // 1 / pi
     37const long double _2_PI = 0.6366197723675813430755350534900574_DL; // 2 / pi
     38const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL; // 2 / sqrt(pi)
    5439
    55 extern const _Complex PI;                                                               // pi
    56 extern const _Complex PI_2;                                                             // pi / 2
    57 extern const _Complex PI_4;                                                             // pi / 4
    58 extern const _Complex _1_PI;                                                    // 1 / pi
    59 extern const _Complex _2_PI;                                                    // 2 / pi
    60 extern const _Complex _2_SQRT_PI;                                               // 2 / sqrt(pi)
     40const _Complex PI = 3.14159265358979323846_D+0.0_iD;    // pi
     41const _Complex PI_2 = 1.57079632679489661923_D+0.0_iD;  // pi / 2
     42const _Complex PI_4 = 0.78539816339744830962_D+0.0_iD;  // pi / 4
     43const _Complex _1_PI = 0.31830988618379067154_D+0.0_iD; // 1 / pi
     44const _Complex _2_PI = 0.63661977236758134308_D+0.0_iD; // 2 / pi
     45const _Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD; // 2 / sqrt(pi)
    6146
    62 extern const long _Complex PI;                                                  // pi
    63 extern const long _Complex PI_2;                                                // pi / 2
    64 extern const long _Complex PI_4;                                                // pi / 4
    65 extern const long _Complex _1_PI;                                               // 1 / pi
    66 extern const long _Complex _2_PI;                                               // 2 / pi
    67 extern const long _Complex _2_SQRT_PI;                                  // 2 / sqrt(pi)
     47const long _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL; // pi
     48const long _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL; // pi / 2
     49const long _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL; // pi / 4
     50const long _Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL; // 1 / pi
     51const long _Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL; // 2 / pi
     52const long _Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL; // 2 / sqrt(pi)
    6853
    69 extern const float E;                                                                   // e
    70 extern const float LOG2_E;                                                              // log_2(e)
    71 extern const float LOG10_E;                                                             // log_10(e)
    72 extern const float LN_2;                                                                // log_e(2)
    73 extern const float LN_10;                                                               // log_e(10)
    74 extern const float SQRT_2;                                                              // sqrt(2)
    75 extern const float _1_SQRT_2;                                                   // 1 / sqrt(2)
     54const float E = 2.718281;                               // e
     55const float LOG2_E = 1.442695;                          // log_2(e)
     56const float LOG10_E = 0.4342944;                        // log_10(e)
     57const float LN_2 = 0.6931471;                           // log_e(2)
     58const float LN_10 = 2.302585;                           // log_e(10)
     59const float SQRT_2 = 1.414213;                          // sqrt(2)
     60const float _1_SQRT_2 = 0.7071067;                      // 1 / sqrt(2)
    7661
    77 extern const double E;                                                                  // e
    78 extern const double LOG2_E;                                                             // log_2(e)
    79 extern const double LOG10_E;                                                    // log_10(e)
    80 extern const double LN_2;                                                               // log_e(2)
    81 extern const double LN_10;                                                              // log_e(10)
    82 extern const double SQRT_2;                                                             // sqrt(2)
    83 extern const double _1_SQRT_2;                                                  // 1 / sqrt(2)
     62const double E = 2.7182818284590452354_D;               // e
     63const double LOG2_E = 1.4426950408889634074_D;          // log_2(e)
     64const double LOG10_E = 0.43429448190325182765_D;        // log_10(e)
     65const double LN_2 = 0.69314718055994530942_D;           // log_e(2)
     66const double LN_10 = 2.30258509299404568402_D;          // log_e(10)
     67const double SQRT_2 = 1.41421356237309504880_D;         // sqrt(2)
     68const double _1_SQRT_2 = 0.70710678118654752440_D;      // 1 / sqrt(2)
    8469
    85 extern const long double E;                                                             // e
    86 extern const long double LOG2_E;                                                // log_2(e)
    87 extern const long double LOG10_E;                                               // log_10(e)
    88 extern const long double LN_2;                                                  // log_e(2)
    89 extern const long double LN_10;                                                 // log_e(10)
    90 extern const long double SQRT_2;                                                // sqrt(2)
    91 extern const long double _1_SQRT_2;                                             // 1/sqrt(2)
     70const long double E = 2.7182818284590452353602874713526625_DL; // e
     71const long double LOG2_E = 1.4426950408889634073599246810018921_DL; // log_2(e)
     72const long double LOG10_E = 0.4342944819032518276511289189166051_DL; // log_10(e)
     73const long double LN_2 = 0.6931471805599453094172321214581766_DL; // log_e(2)
     74const long double LN_10 = 2.3025850929940456840179914546843642_DL; // log_e(10)
     75const long double SQRT_2 = 1.4142135623730950488016887242096981_DL; // sqrt(2)
     76const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL; // 1/sqrt(2)
    9277
    93 extern const _Complex E;                                                                // e
    94 extern const _Complex LOG2_E;                                                   // log_2(e)
    95 extern const _Complex LOG10_E;                                                  // log_10(e)
    96 extern const _Complex LN_2;                                                             // log_e(2)
    97 extern const _Complex LN_10;                                                    // log_e(10)
    98 extern const _Complex SQRT_2;                                                   // sqrt(2)
    99 extern const _Complex _1_SQRT_2;                                                // 1 / sqrt(2)
     78const _Complex E = 2.7182818284590452354_D+0.0_iD;      // e
     79const _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD; // log_2(e)
     80const _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD; // log_10(e)
     81const _Complex LN_2 = 0.69314718055994530942_D+0.0_iD;  // log_e(2)
     82const _Complex LN_10 = 2.30258509299404568402_D+0.0_iD; // log_e(10)
     83const _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD;        // sqrt(2)
     84const _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD; // 1 / sqrt(2)
    10085
    101 extern const long _Complex E;                                                   // e
    102 extern const long _Complex LOG2_E;                                              // log_2(e)
    103 extern const long _Complex LOG10_E;                                             // log_10(e)
    104 extern const long _Complex LN_2;                                                // log_e(2)
    105 extern const long _Complex LN_10;                                               // log_e(10)
    106 extern const long _Complex SQRT_2;                                              // sqrt(2)
    107 extern const long _Complex _1_SQRT_2;                                   // 1 / sqrt(2)
    108 
    109 // Local Variables: //
    110 // mode: c //
    111 // tab-width: 4 //
    112 // End: //
     86const long _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e
     87const long _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e)
     88const long _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e)
     89const long _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2)
     90const long _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10)
     91const long _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2)
     92const long _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2)
  • src/libcfa/prelude.cf

    r0f9e4403 rc5833e8  
    1 # 2 "prelude.cf"  // needed for error messages from this file
    21//                               -*- Mode: C -*-
    32//
     
    98// Created On       : Sat Nov 29 07:23:41 2014
    109// Last Modified By : Peter A. Buhr
    11 // Last Modified On : Wed Mar  2 18:03:41 2016
    12 // Update Count     : 89
     10// Last Modified On : Mon Jan  4 11:13:26 2016
     11// Update Count     : 81
    1312//
    1413
     
    6463long double _Complex    ?--( long double _Complex * ),          ?--( volatile long double _Complex * );
    6564
    66 forall( otype T ) T *                    ?++(                T ** );
    67 forall( otype T ) const T *              ?++( const          T ** );
    68 forall( otype T ) volatile T *           ?++(       volatile T ** );
    69 forall( otype T ) const volatile T *     ?++( const volatile T ** );
    70 forall( otype T ) T *                    ?--(                T ** );
    71 forall( otype T ) const T *              ?--( const          T ** );
    72 forall( otype T ) volatile T *           ?--(       volatile T ** );
    73 forall( otype T ) const volatile T *     ?--( const volatile T ** );
    74 
    75 forall( otype T ) lvalue T               ?[?](                T *,          ptrdiff_t );
    76 forall( otype T ) const lvalue T         ?[?]( const          T *,          ptrdiff_t );
    77 forall( otype T ) volatile lvalue T      ?[?](       volatile T *,          ptrdiff_t );
    78 forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,         ptrdiff_t );
    79 forall( otype T ) lvalue T               ?[?](          ptrdiff_t,                T * );
    80 forall( otype T ) const lvalue T         ?[?](          ptrdiff_t, const          T * );
    81 forall( otype T ) volatile lvalue T      ?[?](          ptrdiff_t,       volatile T * );
    82 forall( otype T ) const volatile lvalue T ?[?](         ptrdiff_t, const volatile T * );
     65forall( type T ) T *                     ?++(                T ** );
     66forall( type T ) const T *               ?++( const          T ** );
     67forall( type T ) volatile T *            ?++(       volatile T ** );
     68forall( type T ) const volatile T *      ?++( const volatile T ** );
     69forall( type T ) T *                     ?--(                T ** );
     70forall( type T ) const T *               ?--( const          T ** );
     71forall( type T ) volatile T *            ?--(       volatile T ** );
     72forall( type T ) const volatile T *      ?--( const volatile T ** );
     73
     74forall( type T ) lvalue T                ?[?](                T *,          ptrdiff_t );
     75forall( type T ) const lvalue T          ?[?]( const          T *,          ptrdiff_t );
     76forall( type T ) volatile lvalue T       ?[?](       volatile T *,          ptrdiff_t );
     77forall( type T ) const volatile lvalue T ?[?]( const volatile T *,          ptrdiff_t );
     78forall( type T ) lvalue T                ?[?](          ptrdiff_t,                T * );
     79forall( type T ) const lvalue T          ?[?](          ptrdiff_t, const          T * );
     80forall( type T ) volatile lvalue T       ?[?](          ptrdiff_t,       volatile T * );
     81forall( type T ) const volatile lvalue T ?[?](          ptrdiff_t, const volatile T * );
    8382
    8483// ------------------------------------------------------------
     
    102101long double _Complex    ++?( long double _Complex * ),          --?( long double _Complex * );
    103102
    104 forall( otype T ) T *                    ++?(                T ** );
    105 forall( otype T ) const T *              ++?( const          T ** );
    106 forall( otype T ) volatile T *           ++?(       volatile T ** );
    107 forall( otype T ) const volatile T *     ++?( const volatile T ** );
    108 forall( otype T ) T *                    --?(                T ** );
    109 forall( otype T ) const T *              --?( const          T ** );
    110 forall( otype T ) volatile T *           --?(       volatile T ** );
    111 forall( otype T ) const volatile T *     --?( const volatile T ** );
    112 
    113 forall( otype T ) lvalue T               *?(                 T * );
    114 forall( otype T ) const lvalue T                 *?( const           T * );
    115 forall( otype T ) volatile lvalue T      *?(       volatile  T * );
    116 forall( otype T ) const volatile lvalue T *?( const volatile  T * );
     103forall( type T ) T *                     ++?(                T ** );
     104forall( type T ) const T *               ++?( const          T ** );
     105forall( type T ) volatile T *            ++?(       volatile T ** );
     106forall( type T ) const volatile T *      ++?( const volatile T ** );
     107forall( type T ) T *                     --?(                T ** );
     108forall( type T ) const T *               --?( const          T ** );
     109forall( type T ) volatile T *            --?(       volatile T ** );
     110forall( type T ) const volatile T *      --?( const volatile T ** );
     111
     112forall( type T ) lvalue T                *?(                 T * );
     113forall( type T ) const lvalue T          *?( const           T * );
     114forall( type T ) volatile lvalue T       *?(       volatile  T * );
     115forall( type T ) const volatile lvalue T *?( const volatile  T * );
    117116forall( ftype FT ) lvalue FT             *?( FT * );
    118117
     
    184183long double _Complex    ?+?( long double _Complex, long double _Complex ),      ?-?( long double _Complex, long double _Complex );
    185184
    186 forall( otype T ) T *                   ?+?(                T *,          ptrdiff_t );
    187 forall( otype T ) T *                   ?+?(          ptrdiff_t,                T * );
    188 forall( otype T ) const T *             ?+?( const          T *,          ptrdiff_t );
    189 forall( otype T ) const T *             ?+?(          ptrdiff_t, const          T * );
    190 forall( otype T ) volatile T *          ?+?(       volatile T *,          ptrdiff_t );
    191 forall( otype T ) volatile T *          ?+?(          ptrdiff_t,       volatile T * );
    192 forall( otype T ) const volatile T *    ?+?( const volatile T *,          ptrdiff_t );
    193 forall( otype T ) const volatile T *    ?+?(          ptrdiff_t, const volatile T * );
    194 forall( otype T ) T *                   ?-?(                T *,          ptrdiff_t );
    195 forall( otype T ) const T *             ?-?( const          T *,          ptrdiff_t );
    196 forall( otype T ) volatile T *          ?-?(       volatile T *,          ptrdiff_t );
    197 forall( otype T ) const volatile T *    ?-?( const volatile T *,          ptrdiff_t );
    198 forall( otype T ) ptrdiff_t             ?-?( const volatile T *, const volatile T * );
     185forall( type T ) T *                    ?+?(                T *,          ptrdiff_t );
     186forall( type T ) T *                    ?+?(          ptrdiff_t,                T * );
     187forall( type T ) const T *              ?+?( const          T *,          ptrdiff_t );
     188forall( type T ) const T *              ?+?(          ptrdiff_t, const          T * );
     189forall( type T ) volatile T *           ?+?(       volatile T *,          ptrdiff_t );
     190forall( type T ) volatile T *           ?+?(          ptrdiff_t,       volatile T * );
     191forall( type T ) const volatile T *     ?+?( const volatile T *,          ptrdiff_t );
     192forall( type T ) const volatile T *     ?+?(          ptrdiff_t, const volatile T * );
     193forall( type T ) T *                    ?-?(                T *,          ptrdiff_t );
     194forall( type T ) const T *              ?-?( const          T *,          ptrdiff_t );
     195forall( type T ) volatile T *           ?-?(       volatile T *,          ptrdiff_t );
     196forall( type T ) const volatile T *     ?-?( const volatile T *,          ptrdiff_t );
     197forall( type T ) ptrdiff_t              ?-?( const volatile T *, const volatile T * );
    199198
    200199// ------------------------------------------------------------
     
    432431forall( ftype FT ) FT *                 ?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
    433432
    434 forall( otype T ) T *                   ?+=?(                T *          *, ptrdiff_t );
    435 forall( otype T ) T *                   ?+=?(                T * volatile *, ptrdiff_t );
    436 forall( otype T ) const T *             ?+=?( const          T *          *, ptrdiff_t );
    437 forall( otype T ) const T *             ?+=?( const          T * volatile *, ptrdiff_t );
    438 forall( otype T ) volatile T *          ?+=?(       volatile T *          *, ptrdiff_t );
    439 forall( otype T ) volatile T *          ?+=?(       volatile T * volatile *, ptrdiff_t );
    440 forall( otype T ) const volatile T *    ?+=?( const volatile T *          *, ptrdiff_t );
    441 forall( otype T ) const volatile T *    ?+=?( const volatile T * volatile *, ptrdiff_t );
    442 forall( otype T ) T *                   ?-=?(                T *          *, ptrdiff_t );
    443 forall( otype T ) T *                   ?-=?(                T * volatile *, ptrdiff_t );
    444 forall( otype T ) const T *             ?-=?( const          T *          *, ptrdiff_t );
    445 forall( otype T ) const T *             ?-=?( const          T * volatile *, ptrdiff_t );
    446 forall( otype T ) volatile T *          ?-=?(       volatile T *          *, ptrdiff_t );
    447 forall( otype T ) volatile T *          ?-=?(       volatile T * volatile *, ptrdiff_t );
    448 forall( otype T ) const volatile T *    ?-=?( const volatile T *          *, ptrdiff_t );
    449 forall( otype T ) const volatile T *    ?-=?( const volatile T * volatile *, ptrdiff_t );
     433forall( type T ) T *                    ?+=?(                T *          *, ptrdiff_t );
     434forall( type T ) T *                    ?+=?(                T * volatile *, ptrdiff_t );
     435forall( type T ) const T *              ?+=?( const          T *          *, ptrdiff_t );
     436forall( type T ) const T *              ?+=?( const          T * volatile *, ptrdiff_t );
     437forall( type T ) volatile T *           ?+=?(       volatile T *          *, ptrdiff_t );
     438forall( type T ) volatile T *           ?+=?(       volatile T * volatile *, ptrdiff_t );
     439forall( type T ) const volatile T *     ?+=?( const volatile T *          *, ptrdiff_t );
     440forall( type T ) const volatile T *     ?+=?( const volatile T * volatile *, ptrdiff_t );
     441forall( type T ) T *                    ?-=?(                T *          *, ptrdiff_t );
     442forall( type T ) T *                    ?-=?(                T * volatile *, ptrdiff_t );
     443forall( type T ) const T *              ?-=?( const          T *          *, ptrdiff_t );
     444forall( type T ) const T *              ?-=?( const          T * volatile *, ptrdiff_t );
     445forall( type T ) volatile T *           ?-=?(       volatile T *          *, ptrdiff_t );
     446forall( type T ) volatile T *           ?-=?(       volatile T * volatile *, ptrdiff_t );
     447forall( type T ) const volatile T *     ?-=?( const volatile T *          *, ptrdiff_t );
     448forall( type T ) const volatile T *     ?-=?( const volatile T * volatile *, ptrdiff_t );
    450449
    451450_Bool                   ?=?( _Bool *, _Bool ),                                  ?=?( volatile _Bool *, _Bool );
  • src/libcfa/stdlib

    r0f9e4403 rc5833e8  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 14:45:53 2016
    13 // Update Count     : 85
     12// Last Modified On : Fri Feb  5 15:21:18 2016
     13// Update Count     : 61
    1414//
    1515
     
    2020} // extern "C"
    2121
    22 //---------------------------------------
     22forall( type T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
     23forall( type T ) T * memset( T * ptr );                                 // remove when default value available
    2324
    24 extern "C" {
    25 #ifndef EXIT_FAILURE
    26 #define EXIT_FAILURE    1                                                               // failing exit status
    27 #define EXIT_SUCCESS    0                                                               // successful exit status
    28 #endif // ! EXIT_FAILURE
    29 void exit( int rc );
    30 } // extern "C"
     25forall( type T ) T * malloc( void );
     26forall( type T ) T * malloc( char fill );
     27forall( type T ) T * malloc( size_t size );
     28forall( type T ) T * malloc( T * ptr, size_t size );
     29forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill );
     30forall( type T ) T * calloc( size_t size );
     31forall( type T ) T * realloc( T * ptr, size_t size );
     32forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill );
    3133
    32 //---------------------------------------
    33 
    34 extern "C" {
    35 void * malloc( size_t );                                                                // use default C routine for void *
    36 } // extern "C"
    37 forall( otype T ) T * malloc( void );
    38 forall( otype T ) T * malloc( char fill );
    39 forall( otype T ) T * malloc( T * ptr, size_t size );
    40 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
    41 extern "C" {
    42 void * calloc( size_t nmemb, size_t size );                             // use default C routine for void *
    43 } // extern "C"
    44 forall( otype T ) T * calloc( size_t nmemb );
    45 extern "C" {
    46 void * realloc( void * ptr, size_t size );                              // use default C routine for void *
    47 } // extern "C"
    48 forall( otype T ) T * realloc( T * ptr, size_t size );
    49 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
    50 
    51 forall( otype T ) T * aligned_alloc( size_t alignment );
    52 forall( otype T ) T * memalign( size_t alignment );             // deprecated
    53 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
    54 
    55 forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
    56 forall( otype T ) T * memset( T * ptr );                                // remove when default value available
     34forall( type T ) T * aligned_alloc( size_t alignment );
     35forall( type T ) T * memalign( size_t alignment );              // deprecated
     36forall( type T ) int posix_memalign( T ** ptr, size_t alignment );
    5737
    5838//---------------------------------------
     
    8666//---------------------------------------
    8767
    88 forall( otype T | { int ?<?( T, T ); } )
     68forall( type T | { int ?<?( T, T ); } )
    8969T * bsearch( const T key, const T * arr, size_t dimension );
    9070
    91 forall( otype T | { int ?<?( T, T ); } )
     71forall( type T | { int ?<?( T, T ); } )
    9272void qsort( const T * arr, size_t dimension );
    9373
    9474//---------------------------------------
    9575
    96 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
     76forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
    9777[ T, T ] div( T t1, T t2 );
    9878
     
    10181char abs( char );
    10282extern "C" {
    103 int abs( int );                                                                                 // use default C routine for int
    104 } // extern "C"
     83int abs( int );         // use default C routine for int
     84} // extern
    10585long int abs( long int );
    10686long long int abs( long long int );
     
    11494//---------------------------------------
    11595
    116 float floor( float );
    117 extern "C" {
    118 double floor( double );                                                                 // use C routine for double
    119 } // extern "C"
    120 long double floor( long double );
    121 
    122 float ceil( float );
    123 extern "C" {
    124 double ceil( double );                                                                  // use C routine for double
    125 } // extern "C"
    126 long double ceil( long double );
     96void randseed( long int s );
     97char random();
     98int random();
     99unsigned int random();
     100long int random();
     101unsigned long int random();
     102float random();
     103double random();
     104float _Complex random();
     105double _Complex random();
     106long double _Complex random();
    127107
    128108//---------------------------------------
    129109
    130 void rand48seed( long int s );
    131 char rand48();
    132 int rand48();
    133 unsigned int rand48();
    134 long int rand48();
    135 unsigned long int rand48();
    136 float rand48();
    137 double rand48();
    138 float _Complex rand48();
    139 double _Complex rand48();
    140 long double _Complex rand48();
    141 
    142 //---------------------------------------
    143 
    144 forall( otype T | { int ?<?( T, T ); } )
     110forall( type T | { int ?<?( T, T ); } )
    145111T min( const T t1, const T t2 );
    146112
    147 forall( otype T | { int ?>?( T, T ); } )
     113forall( type T | { int ?>?( T, T ); } )
    148114T max( const T t1, const T t2 );
    149115
    150 forall( otype T )
     116forall( type T )
    151117void swap( T * t1, T * t2 );
    152118
  • src/libcfa/stdlib.c

    r0f9e4403 rc5833e8  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 14:49:58 2016
    13 // Update Count     : 155
     12// Last Modified On : Wed Feb 10 15:45:56 2016
     13// Update Count     : 140
    1414//
    1515
     
    2727} // extern "C"
    2828
    29 forall( otype T ) T * malloc( void ) {
    30         //printf( "malloc1\n" );
     29forall( type 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( type 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
     37
     38forall( type T ) T * malloc( void ) {
     39        printf( "malloc1\n" );
    3140    return (T *)malloc( sizeof(T) );
    3241} // malloc
    33 forall( otype T ) T * malloc( char fill ) {
    34         //printf( "malloc3\n" );
     42forall( type T ) T * malloc( size_t size ) {
     43        printf( "malloc2\n" );
     44    return (T *)(void *)malloc( size );
     45} // malloc
     46forall( type T ) T * malloc( char fill ) {
     47        printf( "malloc3\n" );
    3548        T * ptr = (T *)malloc( sizeof(T) );
    3649    return memset( ptr );
    3750} // malloc
    3851
    39 forall( otype T ) T * calloc( size_t nmemb ) {
    40         //printf( "calloc\n" );
    41     return (T *)calloc( nmemb, sizeof(T) );
     52forall( type T ) T * calloc( size_t size ) {
     53        printf( "calloc\n" );
     54    return (T *)calloc( size, sizeof(T) );
    4255} // calloc
    4356
    44 forall( otype T ) T * realloc( T * ptr, size_t size ) {
    45         //printf( "realloc1\n" );
     57forall( type T ) T * realloc( T * ptr, size_t size ) {
     58        printf( "realloc1\n" );
    4659    return (T *)(void *)realloc( (void *)ptr, size );
    4760} // realloc
    48 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
    49         //printf( "realloc2\n" );
     61forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
     62        printf( "realloc2\n" );
    5063    char * nptr = (T *)(void *)realloc( (void *)ptr, size );
    5164    size_t unused = malloc_usable_size( nptr );
     
    5467} // realloc
    5568
    56 forall( otype T ) T * malloc( T * ptr, size_t size ) {
    57         //printf( "malloc4\n" );
     69forall( type T ) T * malloc( T * ptr, size_t size ) {
     70        printf( "malloc4\n" );
    5871    return (T *)realloc( ptr, size );
    5972} // malloc
    60 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
    61         //printf( "malloc5\n" );
     73forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
     74        printf( "malloc5\n" );
    6275    return (T *)realloc( ptr, size, fill );
    6376} // malloc
    6477
    65 forall( otype T ) T * aligned_alloc( size_t alignment ) {
    66         //printf( "aligned_alloc\n" );
     78forall( type T ) T * aligned_alloc( size_t alignment ) {
     79        printf( "aligned_alloc\n" );
    6780    return (T *)memalign( alignment, sizeof(T) );
    6881} // aligned_alloc
    6982
    70 forall( otype T ) T * memalign( size_t alignment ) {
    71         //printf( "memalign\n" );
     83forall( type T ) T * memalign( size_t alignment ) {
     84        printf( "memalign\n" );
    7285    return (T *)memalign( alignment, sizeof(T) );
    7386} // memalign
    7487
    75 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {
    76         //printf( "posix_memalign\n" );
     88forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) {
     89        printf( "posix_memalign\n" );
    7790    return posix_memalign( (void **)ptr, alignment, sizeof(T) );
    7891} // posix_memalign
    79 
    80 forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
    81         //printf( "memset1\n" );
    82     return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
    83 } // memset
    84 forall( otype T ) T * memset( T * ptr ) {                               // remove when default value available
    85         //printf( "memset2\n" );
    86     return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
    87 } // memset
    8892
    8993//---------------------------------------
     
    119123        return ulli;
    120124}
    121 
    122125float ato( const char * ptr ) {
    123126        float f;
     
    135138        return ld;
    136139}
    137 
    138140float _Complex ato( const char * ptr ) {
    139141        float re, im;
     
    170172        return strtoull( sptr, eptr, base );
    171173}
    172 
    173174float strto( const char * sptr, char ** eptr ) {
    174175        return strtof( sptr, eptr );
     
    180181        return strtold( sptr, eptr );
    181182}
    182 
    183183float _Complex strto( const char * sptr, char ** eptr ) {
    184184        float re, im;
     
    208208//---------------------------------------
    209209
    210 forall( otype T | { int ?<?( T, T ); } )
     210forall( type T | { int ?<?( T, T ); } )
    211211T * bsearch( const T key, const T * arr, size_t dimension ) {
    212212        int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
     
    214214} // bsearch
    215215
    216 forall( otype T | { int ?<?( T, T ); } )
     216forall( type T | { int ?<?( T, T ); } )
    217217void qsort( const T * arr, size_t dimension ) {
    218218        int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
     
    222222//---------------------------------------
    223223
    224 forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
     224forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
    225225[ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ }
    226226
     
    239239//---------------------------------------
    240240
    241 float floor( float v ) { return floorf( v ); }
    242 long double floor( long double v ) { return floorl( v ); }
    243 
    244 float ceil( float v ) { return ceilf( v ); }
    245 long double ceil( long double v ) { return ceill( v ); }
    246 
    247 //---------------------------------------
    248 
    249 void rand48seed( long int s ) { srand48( s ); }
    250 char rand48() { return mrand48(); }
    251 int rand48() { return mrand48(); }
    252 unsigned int rand48() { return lrand48(); }
    253 long int rand48() { return mrand48(); }
    254 unsigned long int rand48() { return lrand48(); }
    255 float rand48() { return (float)drand48(); }                             // otherwise float uses lrand48
    256 double rand48() { return drand48(); }
    257 float _Complex rand48() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
    258 double _Complex rand48() { return drand48() + (double _Complex)(drand48() * _Complex_I); }
    259 long double _Complex rand48() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
    260 
    261 //---------------------------------------
    262 
    263 forall( otype T | { int ?<?( T, T ); } )
     241void randseed( long int s ) { srand48( s ); }
     242char random() { return lrand48(); }
     243int random() { return mrand48(); }
     244unsigned int random() { return lrand48(); }
     245long int random() { return mrand48(); }
     246unsigned long int random() { return lrand48(); }
     247float random() { return (float)drand48(); }                             // otherwise float uses lrand48
     248double random() { return drand48(); }
     249float _Complex random() { return (float)drand48() + (float _Complex)(drand48() * _Complex_I); }
     250double _Complex random() { return drand48() + (double _Complex)(drand48() * _Complex_I); }
     251long double _Complex random() { return (long double)drand48() + (long double _Complex)(drand48() * _Complex_I); }
     252
     253//---------------------------------------
     254
     255forall( type T | { int ?<?( T, T ); } )
    264256T min( const T t1, const T t2 ) {
    265257        return t1 < t2 ? t1 : t2;
    266258} // min
    267259
    268 forall( otype T | { int ?>?( T, T ); } )
     260forall( type T | { int ?>?( T, T ); } )
    269261T max( const T t1, const T t2 ) {
    270262        return t1 > t2 ? t1 : t2;
    271263} // max
    272264
    273 forall( otype T )
     265forall( type T )
    274266void swap( T * t1, T * t2 ) {
    275267        T temp = *t1;
Note: See TracChangeset for help on using the changeset viewer.